diff --git a/Autorization:Registration Example/.gitignore b/Autorization:Registration Example/.gitignore new file mode 100644 index 0000000..adc3c12 --- /dev/null +++ b/Autorization:Registration Example/.gitignore @@ -0,0 +1,30 @@ +# OS X +.DS_Store + +# Xcode + +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +.xcbkptlist + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control +# +# Pods/ diff --git a/Autorization:Registration Example/.travis.yml b/Autorization:Registration Example/.travis.yml new file mode 100644 index 0000000..15226b3 --- /dev/null +++ b/Autorization:Registration Example/.travis.yml @@ -0,0 +1,30 @@ +language: objective-c + +xcode_workspace: Authorization-module.xcworkspace +xcode_scheme: Staging + +before_install: + - export LANG=en_US.UTF-8 + - sudo gem install cocoapods --no-document + +install: + - pod install + +script: + - ./Authorization-module/Scripts/build.sh + - ./Authorization-module/Scripts/test.sh + +branches: + only: + - master + +notifications: + hipchat: + rooms: + - $API_TOKEN@ios-base + email: + recipients: + # - one@example.com + # - other@example.com + on_success: change # [always|never|change] # default: change + on_failure: change # [always|never|change] # default: always diff --git a/Autorization:Registration Example/Authorization-module.xcodeproj/project.pbxproj b/Autorization:Registration Example/Authorization-module.xcodeproj/project.pbxproj new file mode 100755 index 0000000..c965ed3 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module.xcodeproj/project.pbxproj @@ -0,0 +1,1756 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1710DE5F1C453AF800912C5B /* Swift_BaseUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1710DE5E1C453AF800912C5B /* Swift_BaseUITests.swift */; }; + 17DD8D141D1024940080CD19 /* Authorization.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 17DD8D131D1024940080CD19 /* Authorization.storyboard */; }; + 17DD8D171D1026960080CD19 /* StartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17DD8D161D1026960080CD19 /* StartViewController.swift */; }; + 17DD8D191D1026A20080CD19 /* SignUpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17DD8D181D1026A20080CD19 /* SignUpViewController.swift */; }; + 17DD8D1B1D1026A70080CD19 /* SignUpWithEmailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17DD8D1A1D1026A70080CD19 /* SignUpWithEmailViewController.swift */; }; + 17DD8D1E1D1029550080CD19 /* FBSDKCoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17DD8D1C1D1029550080CD19 /* FBSDKCoreKit.framework */; }; + 17DD8D1F1D1029550080CD19 /* FBSDKLoginKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17DD8D1D1D1029550080CD19 /* FBSDKLoginKit.framework */; }; + 17DD8D211D102E6C0080CD19 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 17DD8D201D102E6C0080CD19 /* GoogleService-Info.plist */; }; + 17DD8D221D102E6C0080CD19 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 17DD8D201D102E6C0080CD19 /* GoogleService-Info.plist */; }; + 17DD8D231D102E6C0080CD19 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 17DD8D201D102E6C0080CD19 /* GoogleService-Info.plist */; }; + 17DD8D271D10336E0080CD19 /* AuthorizationAPIManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17DD8D261D10336E0080CD19 /* AuthorizationAPIManager.swift */; }; + 17DD8D291D1039260080CD19 /* ForgotPasswordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17DD8D281D1039260080CD19 /* ForgotPasswordViewController.swift */; }; + 2124DFA01A8DF48000422313 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2124DF9F1A8DF48000422313 /* ViewController.swift */; }; + 212D018E1BB1986B00B34340 /* Swift_BaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 212D018D1BB1986B00B34340 /* Swift_BaseTests.swift */; }; + 213B89BF19F01A1E005D3749 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 213B89BE19F01A1E005D3749 /* CoreGraphics.framework */; }; + 214F4FF21BFDC2CF0084BE32 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 214F4FF11BFDC2CF0084BE32 /* Extensions.swift */; }; + 214F4FF41BFDC2D90084BE32 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 214F4FF31BFDC2D90084BE32 /* Helpers.swift */; }; + 214F4FF61BFDC35C0084BE32 /* Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 214F4FF51BFDC35C0084BE32 /* Protocols.swift */; }; + 2158286D1A91E2F200833BE6 /* mogend.sh in Resources */ = {isa = PBXBuildFile; fileRef = 2158286B1A91E2F200833BE6 /* mogend.sh */; }; + 2158286F1A91E56600833BE6 /* APIManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2158286E1A91E56600833BE6 /* APIManager.swift */; }; + 218C64B81BA078BA00EEEDF1 /* Authorization-module.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 218C64B61BA078BA00EEEDF1 /* Authorization-module.xcdatamodeld */; }; + 218C64C01BA07DDE00EEEDF1 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 218C64BD1BA07DDE00EEEDF1 /* Localizable.strings */; }; + 21DB301519DD2289003A418D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21DB301419DD2289003A418D /* AppDelegate.swift */; }; + 21DB301F19DD2289003A418D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 21DB301E19DD2289003A418D /* Images.xcassets */; }; + 21DB304919DD2D6D003A418D /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21DB304819DD2D6D003A418D /* Constants.swift */; }; + 21E157E21BB3EDF40041FCE4 /* FSTestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21E157E11BB3EDF40041FCE4 /* FSTestHelpers.swift */; }; + 21E617E31CE60676005D67E0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 21E617E21CE60676005D67E0 /* LaunchScreen.storyboard */; }; + 2AA988380CB5F0BA261165A1 /* Pods_Abstract_Swift_BaseTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7E04C71AF697F9F512C851E /* Pods_Abstract_Swift_BaseTests.framework */; }; + 81ABC4E5D5B644C560E0AA21 /* Pods_Abstract_Swift_BaseUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9091B29869F8A46A78676A7 /* Pods_Abstract_Swift_BaseUITests.framework */; }; + E7566D9F1A1F85CB00DE3010 /* Main_Storyboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E7566DA11A1F85CB00DE3010 /* Main_Storyboard.storyboard */; }; + EEC725679E678BA791351397 /* Pods_Abstract_Swift_Base.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71DE0E16F1FA73404577138C /* Pods_Abstract_Swift_Base.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXBuildRule section */ + 21DB304A19DD32B1003A418D /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + fileType = wrapper.xcdatamodeld; + isEditable = 1; + outputFiles = ( + "$(DERIVED_FILES_DIR)/$(INPUT_FILE_BASE).mom", + ); + script = "echo \"Running mogend (Data model version files)\"\n\"${PROJECT_DIR}/Authorization-module/Scripts/mogend.sh\""; + }; + 21DB304B19DD32D9003A418D /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + fileType = wrapper.xcdatamodel; + isEditable = 1; + outputFiles = ( + "$(DERIVED_FILES_DIR)/$(INPUT_FILE_BASE).momd", + ); + script = "echo \"Running mogend (Data model files)\"\n\"${PROJECT_DIR}/Authorization-module/Scripts/mogend.sh"; + }; +/* End PBXBuildRule section */ + +/* Begin PBXContainerItemProxy section */ + 1710DE611C453AF800912C5B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 21DB300719DD2289003A418D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 21DB300E19DD2289003A418D; + remoteInfo = "Authorization-module"; + }; + 212D01901BB1986B00B34340 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 21DB300719DD2289003A418D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 21DB300E19DD2289003A418D; + remoteInfo = "Authorization-module"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 020C4A5E30B743EDD370DB89 /* Pods-Abstract-Authorization-module.test staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-module.test staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.test staging.xcconfig"; sourceTree = ""; }; + 1218E154FF6E17259B67BF8D /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1710DE5C1C453AF700912C5B /* Authorization-moduleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Authorization-moduleUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1710DE5E1C453AF800912C5B /* Swift_BaseUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Swift_BaseUITests.swift; sourceTree = ""; }; + 1710DE601C453AF800912C5B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 17DD8D131D1024940080CD19 /* Authorization.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Authorization.storyboard; sourceTree = ""; }; + 17DD8D161D1026960080CD19 /* StartViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StartViewController.swift; sourceTree = ""; }; + 17DD8D181D1026A20080CD19 /* SignUpViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignUpViewController.swift; sourceTree = ""; }; + 17DD8D1A1D1026A70080CD19 /* SignUpWithEmailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignUpWithEmailViewController.swift; sourceTree = ""; }; + 17DD8D1C1D1029550080CD19 /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FBSDKCoreKit.framework; sourceTree = ""; }; + 17DD8D1D1D1029550080CD19 /* FBSDKLoginKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FBSDKLoginKit.framework; sourceTree = ""; }; + 17DD8D201D102E6C0080CD19 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 17DD8D261D10336E0080CD19 /* AuthorizationAPIManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorizationAPIManager.swift; sourceTree = ""; }; + 17DD8D281D1039260080CD19 /* ForgotPasswordViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ForgotPasswordViewController.swift; sourceTree = ""; }; + 194478471AAF90AF00A34744 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; + 19D856C11AB5ED2E0014C459 /* build.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = build.sh; path = Scripts/build.sh; sourceTree = ""; }; + 19D856C51AB5ED2E0014C459 /* test.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = test.sh; path = Scripts/test.sh; sourceTree = ""; }; + 19D856C71AB5EDDF0014C459 /* .travis.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .travis.yml; sourceTree = SOURCE_ROOT; }; + 1EEA300C1693C74958C4FE90 /* Pods-Abstract-Authorization-module.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-module.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.debug.xcconfig"; sourceTree = ""; }; + 2124DF9F1A8DF48000422313 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 212D018B1BB1986B00B34340 /* Authorization-moduleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Authorization-moduleTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 212D018D1BB1986B00B34340 /* Swift_BaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Swift_BaseTests.swift; sourceTree = ""; }; + 212D018F1BB1986B00B34340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 213B89BE19F01A1E005D3749 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 213B89C019F01A40005D3749 /* SpriteKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SpriteKit.framework; path = System/Library/Frameworks/SpriteKit.framework; sourceTree = SDKROOT; }; + 214F4FF11BFDC2CF0084BE32 /* Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; + 214F4FF31BFDC2D90084BE32 /* Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Helpers.swift; sourceTree = ""; }; + 214F4FF51BFDC35C0084BE32 /* Protocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Protocols.swift; sourceTree = ""; }; + 21513BBD19EBCBFA00EE6273 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; + 2158286B1A91E2F200833BE6 /* mogend.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = mogend.sh; path = Scripts/mogend.sh; sourceTree = ""; }; + 2158286E1A91E56600833BE6 /* APIManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = APIManager.swift; sourceTree = ""; }; + 218C64B71BA078BA00EEEDF1 /* Authorization-module.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Authorization-module.xcdatamodel"; sourceTree = ""; }; + 218C64BB1BA07D3800EEEDF1 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Main_Storyboard.strings; sourceTree = ""; }; + 218C64C21BA07E1F00EEEDF1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; + 218C64C31BA07E4300EEEDF1 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; + 21C9F2DF19E833300084D18D /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + 21DB300F19DD2289003A418D /* Authorization-module.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Authorization-module.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 21DB301319DD2289003A418D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 21DB301419DD2289003A418D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 21DB301E19DD2289003A418D /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 21DB303819DD2341003A418D /* BridgeHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BridgeHeader.h; sourceTree = ""; }; + 21DB304819DD2D6D003A418D /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; + 21E157E11BB3EDF40041FCE4 /* FSTestHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FSTestHelpers.swift; path = "Authorization-moduleTests/FSTestHelpers.swift"; sourceTree = ""; }; + 21E617E21CE60676005D67E0 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; + 21E617E41CE61BBF005D67E0 /* generate_entities.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = generate_entities.sh; sourceTree = SOURCE_ROOT; }; + 24CD8CBBB8A679E300A592E5 /* Pods-Abstract-Authorization-module.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-module.test.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.test.xcconfig"; sourceTree = ""; }; + 34CEE7B0A1468777DB0D6EF8 /* Pods-Abstract-Authorization-moduleUITests.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleUITests.test.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.test.xcconfig"; sourceTree = ""; }; + 38B1BC0F25415CD477A6B5B8 /* Pods-Abstract-Authorization-moduleUITests.release staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleUITests.release staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.release staging.xcconfig"; sourceTree = ""; }; + 3A5FE293BB9438C1AE339D7F /* Pods-Abstract-Authorization-module.release staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-module.release staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.release staging.xcconfig"; sourceTree = ""; }; + 51A0D6856BD58979B29B2269 /* Pods-Abstract-Authorization-moduleTests.appstore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleTests.appstore.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.appstore.xcconfig"; sourceTree = ""; }; + 62261FC7DE20C9A6ACA0BAE4 /* Pods-Abstract-Authorization-moduleUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.debug.xcconfig"; sourceTree = ""; }; + 64B3F1B9224ADD02041E18AA /* Pods-Abstract-Authorization-moduleUITests.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleUITests.debug staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.debug staging.xcconfig"; sourceTree = ""; }; + 6E2293E2DC3390EAB27468D6 /* Pods-Abstract-Authorization-moduleTests.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleTests.test.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.test.xcconfig"; sourceTree = ""; }; + 6FF19AC0520F67714729E8C3 /* Pods-Abstract-Authorization-moduleUITests.test staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleUITests.test staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.test staging.xcconfig"; sourceTree = ""; }; + 71DE0E16F1FA73404577138C /* Pods_Abstract_Swift_Base.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Abstract_Swift_Base.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 777CEADF0A3987259CB4C60D /* Pods-Abstract-Authorization-moduleTests.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleTests.debug staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.debug staging.xcconfig"; sourceTree = ""; }; + 7EDBE43BF809E4BF3F085A1F /* Pods-Abstract-Authorization-moduleTests.release staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleTests.release staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.release staging.xcconfig"; sourceTree = ""; }; + 98101F9FE1B08B9670240835 /* Pods-Abstract-Authorization-module.appstore debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-module.appstore debug.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.appstore debug.xcconfig"; sourceTree = ""; }; + 9E9AF561EE2CD0A3A7DDD0CF /* Pods-Abstract-Authorization-module.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-module.debug staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.debug staging.xcconfig"; sourceTree = ""; }; + 9FE58E7B2053F4AFF188DF61 /* Pods-Abstract-Authorization-moduleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.debug.xcconfig"; sourceTree = ""; }; + AF5D1F97F5C59B62E7E84E1B /* Pods-Abstract-Authorization-module.appstore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-module.appstore.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.appstore.xcconfig"; sourceTree = ""; }; + B27D5D57B204407114491374 /* Pods-Abstract-Authorization-moduleUITests.appstore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleUITests.appstore.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.appstore.xcconfig"; sourceTree = ""; }; + B4B0F73B11F25FEB89C85F54 /* Pods-Abstract-Authorization-moduleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.release.xcconfig"; sourceTree = ""; }; + B8D82C4F4021CFF6F5F5CC68 /* Pods-Abstract-Authorization-moduleUITests.appstore debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleUITests.appstore debug.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.appstore debug.xcconfig"; sourceTree = ""; }; + C7E04C71AF697F9F512C851E /* Pods_Abstract_Swift_BaseTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Abstract_Swift_BaseTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D36E011C9F5B75FAD1EAB225 /* Pods-Abstract-Authorization-moduleUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleUITests.release.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.release.xcconfig"; sourceTree = ""; }; + D9091B29869F8A46A78676A7 /* Pods_Abstract_Swift_BaseUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Abstract_Swift_BaseUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E52012F8C989ECF5309835D0 /* Pods-Abstract-Authorization-moduleTests.appstore debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleTests.appstore debug.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.appstore debug.xcconfig"; sourceTree = ""; }; + E7566DA01A1F85CB00DE3010 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main_Storyboard.storyboard; sourceTree = ""; }; + EE03134474C0070BF8DA767B /* Pods-Abstract-Authorization-module.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-module.release.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.release.xcconfig"; sourceTree = ""; }; + FC6E3D360349BB799F9BA741 /* Pods-Abstract-Authorization-moduleTests.test staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Abstract-Authorization-moduleTests.test staging.xcconfig"; path = "Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.test staging.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1710DE591C453AF700912C5B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 81ABC4E5D5B644C560E0AA21 /* Pods_Abstract_Swift_BaseUITests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 212D01881BB1986B00B34340 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2AA988380CB5F0BA261165A1 /* Pods_Abstract_Swift_BaseTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 21DB300C19DD2289003A418D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 213B89BF19F01A1E005D3749 /* CoreGraphics.framework in Frameworks */, + 17DD8D1E1D1029550080CD19 /* FBSDKCoreKit.framework in Frameworks */, + 17DD8D1F1D1029550080CD19 /* FBSDKLoginKit.framework in Frameworks */, + EEC725679E678BA791351397 /* Pods_Abstract_Swift_Base.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1710DE5D1C453AF800912C5B /* Authorization-moduleUITests */ = { + isa = PBXGroup; + children = ( + 1710DE5E1C453AF800912C5B /* Swift_BaseUITests.swift */, + 1710DE601C453AF800912C5B /* Info.plist */, + ); + path = "Authorization-moduleUITests"; + sourceTree = ""; + }; + 17DD8D151D1026850080CD19 /* Authorization */ = { + isa = PBXGroup; + children = ( + 17DD8D161D1026960080CD19 /* StartViewController.swift */, + 17DD8D181D1026A20080CD19 /* SignUpViewController.swift */, + 17DD8D1A1D1026A70080CD19 /* SignUpWithEmailViewController.swift */, + 17DD8D281D1039260080CD19 /* ForgotPasswordViewController.swift */, + ); + name = Authorization; + sourceTree = ""; + }; + 196D6E161BAB0736000B7997 /* Helpers */ = { + isa = PBXGroup; + children = ( + 214F4FF31BFDC2D90084BE32 /* Helpers.swift */, + 214F4FF11BFDC2CF0084BE32 /* Extensions.swift */, + 214F4FF51BFDC35C0084BE32 /* Protocols.swift */, + ); + name = Helpers; + sourceTree = ""; + }; + 19C66A341C1DC54800C44FE3 /* Classes */ = { + isa = PBXGroup; + children = ( + ); + name = Classes; + sourceTree = ""; + }; + 19D856BF1AB5ECF50014C459 /* Travis CI */ = { + isa = PBXGroup; + children = ( + 19D856C71AB5EDDF0014C459 /* .travis.yml */, + 19D856C11AB5ED2E0014C459 /* build.sh */, + 19D856C51AB5ED2E0014C459 /* test.sh */, + ); + name = "Travis CI"; + sourceTree = ""; + }; + 212D01801BB1977100B34340 /* Tests */ = { + isa = PBXGroup; + children = ( + 21E157E11BB3EDF40041FCE4 /* FSTestHelpers.swift */, + 212D018C1BB1986B00B34340 /* UnitTests */, + ); + name = Tests; + sourceTree = ""; + }; + 212D018C1BB1986B00B34340 /* UnitTests */ = { + isa = PBXGroup; + children = ( + 212D018D1BB1986B00B34340 /* Swift_BaseTests.swift */, + 212D018F1BB1986B00B34340 /* Info.plist */, + ); + name = UnitTests; + path = "Authorization-moduleTests"; + sourceTree = ""; + }; + 215828691A91E2E000833BE6 /* Scripts */ = { + isa = PBXGroup; + children = ( + 21E617E41CE61BBF005D67E0 /* generate_entities.sh */, + 19D856BF1AB5ECF50014C459 /* Travis CI */, + 2158286B1A91E2F200833BE6 /* mogend.sh */, + ); + name = Scripts; + sourceTree = ""; + }; + 218C64B41BA078BA00EEEDF1 /* CoreData */ = { + isa = PBXGroup; + children = ( + 218C64B51BA078BA00EEEDF1 /* Private */, + 218C64B61BA078BA00EEEDF1 /* Authorization-module.xcdatamodeld */, + ); + path = CoreData; + sourceTree = ""; + }; + 218C64B51BA078BA00EEEDF1 /* Private */ = { + isa = PBXGroup; + children = ( + ); + path = Private; + sourceTree = ""; + }; + 218C64BC1BA07DDE00EEEDF1 /* Localization */ = { + isa = PBXGroup; + children = ( + 218C64BD1BA07DDE00EEEDF1 /* Localizable.strings */, + ); + path = Localization; + sourceTree = ""; + }; + 21DB300619DD2289003A418D = { + isa = PBXGroup; + children = ( + 21DB301119DD2289003A418D /* Authorization-module */, + 212D01801BB1977100B34340 /* Tests */, + 1710DE5D1C453AF800912C5B /* Authorization-moduleUITests */, + 21DB301019DD2289003A418D /* Products */, + 5C5B41AD2B6E0DFDD4D53E6B /* Frameworks */, + 35A5DC772BDBEE89744BCCF8 /* Pods */, + ); + sourceTree = ""; + }; + 21DB301019DD2289003A418D /* Products */ = { + isa = PBXGroup; + children = ( + 21DB300F19DD2289003A418D /* Authorization-module.app */, + 212D018B1BB1986B00B34340 /* Authorization-moduleTests.xctest */, + 1710DE5C1C453AF700912C5B /* Authorization-moduleUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 21DB301119DD2289003A418D /* Authorization-module */ = { + isa = PBXGroup; + children = ( + 21DB304819DD2D6D003A418D /* Constants.swift */, + 21DB301419DD2289003A418D /* AppDelegate.swift */, + 17DD8D131D1024940080CD19 /* Authorization.storyboard */, + E7566DA11A1F85CB00DE3010 /* Main_Storyboard.storyboard */, + 21E617E21CE60676005D67E0 /* LaunchScreen.storyboard */, + 21DB301E19DD2289003A418D /* Images.xcassets */, + 196D6E161BAB0736000B7997 /* Helpers */, + E736C5E11A25CF8200B8986E /* API */, + 218C64B41BA078BA00EEEDF1 /* CoreData */, + 19C66A341C1DC54800C44FE3 /* Classes */, + E731DC711A1CB30C00E12CBA /* Views */, + E736C5A41A252B1500B8986E /* Controllers */, + 21DB301219DD2289003A418D /* Supporting Files */, + ); + path = "Authorization-module"; + sourceTree = ""; + }; + 21DB301219DD2289003A418D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 218C64BC1BA07DDE00EEEDF1 /* Localization */, + 21DB301319DD2289003A418D /* Info.plist */, + 17DD8D201D102E6C0080CD19 /* GoogleService-Info.plist */, + 21DB303819DD2341003A418D /* BridgeHeader.h */, + 215828691A91E2E000833BE6 /* Scripts */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 35A5DC772BDBEE89744BCCF8 /* Pods */ = { + isa = PBXGroup; + children = ( + 1EEA300C1693C74958C4FE90 /* Pods-Abstract-Authorization-module.debug.xcconfig */, + 98101F9FE1B08B9670240835 /* Pods-Abstract-Authorization-module.appstore debug.xcconfig */, + 9E9AF561EE2CD0A3A7DDD0CF /* Pods-Abstract-Authorization-module.debug staging.xcconfig */, + EE03134474C0070BF8DA767B /* Pods-Abstract-Authorization-module.release.xcconfig */, + 24CD8CBBB8A679E300A592E5 /* Pods-Abstract-Authorization-module.test.xcconfig */, + AF5D1F97F5C59B62E7E84E1B /* Pods-Abstract-Authorization-module.appstore.xcconfig */, + 3A5FE293BB9438C1AE339D7F /* Pods-Abstract-Authorization-module.release staging.xcconfig */, + 020C4A5E30B743EDD370DB89 /* Pods-Abstract-Authorization-module.test staging.xcconfig */, + 9FE58E7B2053F4AFF188DF61 /* Pods-Abstract-Authorization-moduleTests.debug.xcconfig */, + E52012F8C989ECF5309835D0 /* Pods-Abstract-Authorization-moduleTests.appstore debug.xcconfig */, + 777CEADF0A3987259CB4C60D /* Pods-Abstract-Authorization-moduleTests.debug staging.xcconfig */, + B4B0F73B11F25FEB89C85F54 /* Pods-Abstract-Authorization-moduleTests.release.xcconfig */, + 6E2293E2DC3390EAB27468D6 /* Pods-Abstract-Authorization-moduleTests.test.xcconfig */, + 51A0D6856BD58979B29B2269 /* Pods-Abstract-Authorization-moduleTests.appstore.xcconfig */, + 7EDBE43BF809E4BF3F085A1F /* Pods-Abstract-Authorization-moduleTests.release staging.xcconfig */, + FC6E3D360349BB799F9BA741 /* Pods-Abstract-Authorization-moduleTests.test staging.xcconfig */, + 62261FC7DE20C9A6ACA0BAE4 /* Pods-Abstract-Authorization-moduleUITests.debug.xcconfig */, + B8D82C4F4021CFF6F5F5CC68 /* Pods-Abstract-Authorization-moduleUITests.appstore debug.xcconfig */, + 64B3F1B9224ADD02041E18AA /* Pods-Abstract-Authorization-moduleUITests.debug staging.xcconfig */, + D36E011C9F5B75FAD1EAB225 /* Pods-Abstract-Authorization-moduleUITests.release.xcconfig */, + 34CEE7B0A1468777DB0D6EF8 /* Pods-Abstract-Authorization-moduleUITests.test.xcconfig */, + B27D5D57B204407114491374 /* Pods-Abstract-Authorization-moduleUITests.appstore.xcconfig */, + 38B1BC0F25415CD477A6B5B8 /* Pods-Abstract-Authorization-moduleUITests.release staging.xcconfig */, + 6FF19AC0520F67714729E8C3 /* Pods-Abstract-Authorization-moduleUITests.test staging.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + 5C5B41AD2B6E0DFDD4D53E6B /* Frameworks */ = { + isa = PBXGroup; + children = ( + 194478471AAF90AF00A34744 /* SenTestingKit.framework */, + 17DD8D1C1D1029550080CD19 /* FBSDKCoreKit.framework */, + 17DD8D1D1D1029550080CD19 /* FBSDKLoginKit.framework */, + 213B89C019F01A40005D3749 /* SpriteKit.framework */, + 213B89BE19F01A1E005D3749 /* CoreGraphics.framework */, + 21513BBD19EBCBFA00EE6273 /* MediaPlayer.framework */, + 21C9F2DF19E833300084D18D /* AVFoundation.framework */, + 1218E154FF6E17259B67BF8D /* Pods.framework */, + 71DE0E16F1FA73404577138C /* Pods_Abstract_Swift_Base.framework */, + C7E04C71AF697F9F512C851E /* Pods_Abstract_Swift_BaseTests.framework */, + D9091B29869F8A46A78676A7 /* Pods_Abstract_Swift_BaseUITests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E731DC711A1CB30C00E12CBA /* Views */ = { + isa = PBXGroup; + children = ( + ); + name = Views; + sourceTree = ""; + }; + E736C5A41A252B1500B8986E /* Controllers */ = { + isa = PBXGroup; + children = ( + 17DD8D151D1026850080CD19 /* Authorization */, + 2124DF9F1A8DF48000422313 /* ViewController.swift */, + ); + name = Controllers; + sourceTree = ""; + }; + E736C5E11A25CF8200B8986E /* API */ = { + isa = PBXGroup; + children = ( + 2158286E1A91E56600833BE6 /* APIManager.swift */, + 17DD8D261D10336E0080CD19 /* AuthorizationAPIManager.swift */, + ); + name = API; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 1710DE5B1C453AF700912C5B /* Authorization-moduleUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1710DE6B1C453AF800912C5B /* Build configuration list for PBXNativeTarget "Authorization-moduleUITests" */; + buildPhases = ( + 89E91AAF0FB90E6F0FF929E5 /* 📦 Check Pods Manifest.lock */, + 1710DE581C453AF700912C5B /* Sources */, + 1710DE591C453AF700912C5B /* Frameworks */, + 1710DE5A1C453AF700912C5B /* Resources */, + 0785C3FD82F5A4CEF5C1AC4F /* 📦 Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + 1710DE621C453AF800912C5B /* PBXTargetDependency */, + ); + name = "Authorization-moduleUITests"; + productName = "Authorization-moduleUITests"; + productReference = 1710DE5C1C453AF700912C5B /* Authorization-moduleUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; + 212D018A1BB1986B00B34340 /* Authorization-moduleTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 212D01921BB1986B00B34340 /* Build configuration list for PBXNativeTarget "Authorization-moduleTests" */; + buildPhases = ( + 0ACA543E4B3B0E6EB48E63C8 /* 📦 Check Pods Manifest.lock */, + 212D01871BB1986B00B34340 /* Sources */, + 212D01881BB1986B00B34340 /* Frameworks */, + 212D01891BB1986B00B34340 /* Resources */, + 1F35F343FE9DD3287707261D /* 📦 Embed Pods Frameworks */, + 27B807D70486544FDB85DAA6 /* 📦 Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + 212D01911BB1986B00B34340 /* PBXTargetDependency */, + ); + name = "Authorization-moduleTests"; + productName = "Authorization-moduleTests"; + productReference = 212D018B1BB1986B00B34340 /* Authorization-moduleTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 21DB300E19DD2289003A418D /* Authorization-module */ = { + isa = PBXNativeTarget; + buildConfigurationList = 21DB303119DD2289003A418D /* Build configuration list for PBXNativeTarget "Authorization-module" */; + buildPhases = ( + A6DB15C2BC155A2623DF25F0 /* 📦 Check Pods Manifest.lock */, + 21DB300B19DD2289003A418D /* Sources */, + 21DB300C19DD2289003A418D /* Frameworks */, + 21DB300D19DD2289003A418D /* Resources */, + 21B3D19F19E6E2B700EF0D52 /* ShellScript */, + 97E8D7A0CF9962C339626CAC /* 📦 Embed Pods Frameworks */, + 6A105BDE6BBF4E1ACD2AAE0F /* 📦 Copy Pods Resources */, + ); + buildRules = ( + 21DB304B19DD32D9003A418D /* PBXBuildRule */, + 21DB304A19DD32B1003A418D /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "Authorization-module"; + productName = "Authorization-module"; + productReference = 21DB300F19DD2289003A418D /* Authorization-module.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 21DB300719DD2289003A418D /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftMigration = 0700; + LastSwiftUpdateCheck = 0710; + LastTestingUpgradeCheck = 0700; + LastUpgradeCheck = 0730; + ORGANIZATIONNAME = Flatstack; + TargetAttributes = { + 1710DE5B1C453AF700912C5B = { + CreatedOnToolsVersion = 7.1; + TestTargetID = 21DB300E19DD2289003A418D; + }; + 212D018A1BB1986B00B34340 = { + CreatedOnToolsVersion = 7.0; + TestTargetID = 21DB300E19DD2289003A418D; + }; + 21DB300E19DD2289003A418D = { + CreatedOnToolsVersion = 6.0.1; + DevelopmentTeam = Y49MTY8CU2; + }; + }; + }; + buildConfigurationList = 21DB300A19DD2289003A418D /* Build configuration list for PBXProject "Authorization-module" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + ru, + en, + ); + mainGroup = 21DB300619DD2289003A418D; + productRefGroup = 21DB301019DD2289003A418D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 21DB300E19DD2289003A418D /* Authorization-module */, + 212D018A1BB1986B00B34340 /* Authorization-moduleTests */, + 1710DE5B1C453AF700912C5B /* Authorization-moduleUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 1710DE5A1C453AF700912C5B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 17DD8D231D102E6C0080CD19 /* GoogleService-Info.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 212D01891BB1986B00B34340 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 17DD8D221D102E6C0080CD19 /* GoogleService-Info.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 21DB300D19DD2289003A418D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 17DD8D141D1024940080CD19 /* Authorization.storyboard in Resources */, + E7566D9F1A1F85CB00DE3010 /* Main_Storyboard.storyboard in Resources */, + 218C64C01BA07DDE00EEEDF1 /* Localizable.strings in Resources */, + 17DD8D211D102E6C0080CD19 /* GoogleService-Info.plist in Resources */, + 2158286D1A91E2F200833BE6 /* mogend.sh in Resources */, + 21E617E31CE60676005D67E0 /* LaunchScreen.storyboard in Resources */, + 21DB301F19DD2289003A418D /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 0785C3FD82F5A4CEF5C1AC4F /* 📦 Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 0ACA543E4B3B0E6EB48E63C8 /* 📦 Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 1F35F343FE9DD3287707261D /* 📦 Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 21B3D19F19E6E2B700EF0D52 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#\"${PODS_ROOT}/Fabric/Fabric.framework/run\" api_key build_secret"; + }; + 27B807D70486544FDB85DAA6 /* 📦 Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 6A105BDE6BBF4E1ACD2AAE0F /* 📦 Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 89E91AAF0FB90E6F0FF929E5 /* 📦 Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 97E8D7A0CF9962C339626CAC /* 📦 Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + A6DB15C2BC155A2623DF25F0 /* 📦 Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "📦 Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 1710DE581C453AF700912C5B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1710DE5F1C453AF800912C5B /* Swift_BaseUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 212D01871BB1986B00B34340 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 212D018E1BB1986B00B34340 /* Swift_BaseTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 21DB300B19DD2289003A418D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 17DD8D191D1026A20080CD19 /* SignUpViewController.swift in Sources */, + 218C64B81BA078BA00EEEDF1 /* Authorization-module.xcdatamodeld in Sources */, + 21E157E21BB3EDF40041FCE4 /* FSTestHelpers.swift in Sources */, + 2124DFA01A8DF48000422313 /* ViewController.swift in Sources */, + 214F4FF61BFDC35C0084BE32 /* Protocols.swift in Sources */, + 17DD8D271D10336E0080CD19 /* AuthorizationAPIManager.swift in Sources */, + 214F4FF41BFDC2D90084BE32 /* Helpers.swift in Sources */, + 17DD8D171D1026960080CD19 /* StartViewController.swift in Sources */, + 17DD8D291D1039260080CD19 /* ForgotPasswordViewController.swift in Sources */, + 21DB301519DD2289003A418D /* AppDelegate.swift in Sources */, + 2158286F1A91E56600833BE6 /* APIManager.swift in Sources */, + 21DB304919DD2D6D003A418D /* Constants.swift in Sources */, + 214F4FF21BFDC2CF0084BE32 /* Extensions.swift in Sources */, + 17DD8D1B1D1026A70080CD19 /* SignUpWithEmailViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 1710DE621C453AF800912C5B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 21DB300E19DD2289003A418D /* Authorization-module */; + targetProxy = 1710DE611C453AF800912C5B /* PBXContainerItemProxy */; + }; + 212D01911BB1986B00B34340 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 21DB300E19DD2289003A418D /* Authorization-module */; + targetProxy = 212D01901BB1986B00B34340 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 218C64BD1BA07DDE00EEEDF1 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 218C64C21BA07E1F00EEEDF1 /* Base */, + 218C64C31BA07E4300EEEDF1 /* ru */, + ); + name = Localizable.strings; + sourceTree = ""; + }; + E7566DA11A1F85CB00DE3010 /* Main_Storyboard.storyboard */ = { + isa = PBXVariantGroup; + children = ( + E7566DA01A1F85CB00DE3010 /* Base */, + 218C64BB1BA07D3800EEEDF1 /* ru */, + ); + name = Main_Storyboard.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 1710DE631C453AF800912C5B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 62261FC7DE20C9A6ACA0BAE4 /* Pods-Abstract-Authorization-moduleUITests.debug.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "Authorization-moduleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Authorization-moduleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_TARGET_NAME = "Authorization-module"; + USES_XCTRUNNER = YES; + }; + name = Debug; + }; + 1710DE641C453AF800912C5B /* AppStore Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B8D82C4F4021CFF6F5F5CC68 /* Pods-Abstract-Authorization-moduleUITests.appstore debug.xcconfig */; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Authorization-moduleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Authorization-moduleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_TARGET_NAME = "Authorization-module"; + USES_XCTRUNNER = YES; + }; + name = "AppStore Debug"; + }; + 1710DE651C453AF800912C5B /* Debug Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 64B3F1B9224ADD02041E18AA /* Pods-Abstract-Authorization-moduleUITests.debug staging.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "Authorization-moduleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Authorization-moduleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_TARGET_NAME = "Authorization-module"; + USES_XCTRUNNER = YES; + }; + name = "Debug Staging"; + }; + 1710DE661C453AF800912C5B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D36E011C9F5B75FAD1EAB225 /* Pods-Abstract-Authorization-moduleUITests.release.xcconfig */; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Authorization-moduleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Authorization-moduleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_TARGET_NAME = "Authorization-module"; + USES_XCTRUNNER = YES; + }; + name = Release; + }; + 1710DE671C453AF800912C5B /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 34CEE7B0A1468777DB0D6EF8 /* Pods-Abstract-Authorization-moduleUITests.test.xcconfig */; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Authorization-moduleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Authorization-moduleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_TARGET_NAME = "Authorization-module"; + USES_XCTRUNNER = YES; + }; + name = Test; + }; + 1710DE681C453AF800912C5B /* AppStore */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B27D5D57B204407114491374 /* Pods-Abstract-Authorization-moduleUITests.appstore.xcconfig */; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Authorization-moduleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Authorization-moduleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_TARGET_NAME = "Authorization-module"; + USES_XCTRUNNER = YES; + }; + name = AppStore; + }; + 1710DE691C453AF800912C5B /* Release Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 38B1BC0F25415CD477A6B5B8 /* Pods-Abstract-Authorization-moduleUITests.release staging.xcconfig */; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Authorization-moduleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Authorization-moduleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_TARGET_NAME = "Authorization-module"; + USES_XCTRUNNER = YES; + }; + name = "Release Staging"; + }; + 1710DE6A1C453AF800912C5B /* Test Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6FF19AC0520F67714729E8C3 /* Pods-Abstract-Authorization-moduleUITests.test staging.xcconfig */; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Authorization-moduleUITests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "FS.Authorization-moduleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_TARGET_NAME = "Authorization-module"; + USES_XCTRUNNER = YES; + }; + name = "Test Staging"; + }; + 212D01811BB1978500B34340 /* Test */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + VALIDATE_PRODUCT = YES; + }; + name = Test; + }; + 212D01821BB1978500B34340 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 24CD8CBBB8A679E300A592E5 /* Pods-Abstract-Authorization-module.test.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + BUNDLE_DISPLAY_NAME = "Authorization-module"; + BUNDLE_ID = "com.flatstack.Authorization-module"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Authorization-module/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -DTEST"; + PRODUCT_NAME = "Authorization-module"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Authorization-module/BridgeHeader.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Test; + }; + 212D01831BB1978B00B34340 /* Test Staging */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + VALIDATE_PRODUCT = YES; + }; + name = "Test Staging"; + }; + 212D01841BB1978B00B34340 /* Test Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 020C4A5E30B743EDD370DB89 /* Pods-Abstract-Authorization-module.test staging.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-Staging"; + BUNDLE_DISPLAY_NAME = "Authorization-module Staging"; + BUNDLE_ID = "com.flatstack.Authorization-module.staging"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Authorization-module/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -DTEST"; + PRODUCT_NAME = "Authorization-module"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Authorization-module/BridgeHeader.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = 1; + }; + name = "Test Staging"; + }; + 212D01851BB1981C00B34340 /* AppStore Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + }; + name = "AppStore Debug"; + }; + 212D01861BB1981C00B34340 /* AppStore Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 98101F9FE1B08B9670240835 /* Pods-Abstract-Authorization-module.appstore debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + BUNDLE_DISPLAY_NAME = "Authorization-module"; + BUNDLE_ID = "com.flatstack.Authorization-module"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Authorization-module/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -DDEBUG"; + PRODUCT_NAME = "Authorization-module"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Authorization-module/BridgeHeader.h"; + TARGETED_DEVICE_FAMILY = 1; + }; + name = "AppStore Debug"; + }; + 212D01931BB1986B00B34340 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9FE58E7B2053F4AFF188DF61 /* Pods-Abstract-Authorization-moduleTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "Authorization-moduleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Authorization-moduleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Authorization-module.app/Authorization-module"; + }; + name = Debug; + }; + 212D01941BB1986B00B34340 /* AppStore Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E52012F8C989ECF5309835D0 /* Pods-Abstract-Authorization-moduleTests.appstore debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Authorization-moduleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Authorization-moduleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Authorization-module.app/Authorization-module"; + }; + name = "AppStore Debug"; + }; + 212D01951BB1986B00B34340 /* Debug Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 777CEADF0A3987259CB4C60D /* Pods-Abstract-Authorization-moduleTests.debug staging.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "Authorization-moduleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Authorization-moduleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Authorization-module.app/Authorization-module"; + }; + name = "Debug Staging"; + }; + 212D01961BB1986B00B34340 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B4B0F73B11F25FEB89C85F54 /* Pods-Abstract-Authorization-moduleTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Authorization-moduleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Authorization-moduleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Authorization-module.app/Authorization-module"; + }; + name = Release; + }; + 212D01971BB1986B00B34340 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6E2293E2DC3390EAB27468D6 /* Pods-Abstract-Authorization-moduleTests.test.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + INFOPLIST_FILE = "Authorization-moduleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Authorization-moduleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Authorization-module.app/Authorization-module"; + }; + name = Test; + }; + 212D01981BB1986B00B34340 /* AppStore */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 51A0D6856BD58979B29B2269 /* Pods-Abstract-Authorization-moduleTests.appstore.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Authorization-moduleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Authorization-moduleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Authorization-module.app/Authorization-module"; + }; + name = AppStore; + }; + 212D01991BB1986B00B34340 /* Release Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7EDBE43BF809E4BF3F085A1F /* Pods-Abstract-Authorization-moduleTests.release staging.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Authorization-moduleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Authorization-moduleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Authorization-module.app/Authorization-module"; + }; + name = "Release Staging"; + }; + 212D019A1BB1986B00B34340 /* Test Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FC6E3D360349BB799F9BA741 /* Pods-Abstract-Authorization-moduleTests.test staging.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + INFOPLIST_FILE = "Authorization-moduleTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.flatstack.Authorization-moduleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Authorization-module.app/Authorization-module"; + }; + name = "Test Staging"; + }; + 21DB302F19DD2289003A418D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + }; + name = Debug; + }; + 21DB303019DD2289003A418D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 21DB303219DD2289003A418D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1EEA300C1693C74958C4FE90 /* Pods-Abstract-Authorization-module.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + BUNDLE_DISPLAY_NAME = "Authorization-module"; + BUNDLE_ID = "com.flatstack.Authorization-module"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Authorization-module/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -DDEBUG"; + PRODUCT_NAME = "Authorization-module"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Authorization-module/BridgeHeader.h"; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + 21DB303319DD2289003A418D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EE03134474C0070BF8DA767B /* Pods-Abstract-Authorization-module.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + BUNDLE_DISPLAY_NAME = "Authorization-module"; + BUNDLE_ID = "com.flatstack.Authorization-module"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Authorization-module/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited)"; + PRODUCT_NAME = "Authorization-module"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Authorization-module/BridgeHeader.h"; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; + 21DB304C19DD3B30003A418D /* Debug Staging */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + }; + name = "Debug Staging"; + }; + 21DB304D19DD3B30003A418D /* Debug Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9E9AF561EE2CD0A3A7DDD0CF /* Pods-Abstract-Authorization-module.debug staging.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-Staging"; + BUNDLE_DISPLAY_NAME = "Authorization-module Staging"; + BUNDLE_ID = "com.flatstack.Authorization-module.staging"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Authorization-module/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -DDEBUG"; + PRODUCT_NAME = "Authorization-module"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Authorization-module/BridgeHeader.h"; + TARGETED_DEVICE_FAMILY = 1; + }; + name = "Debug Staging"; + }; + 21DB304F19DD3B48003A418D /* Release Staging */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + VALIDATE_PRODUCT = YES; + }; + name = "Release Staging"; + }; + 21DB305019DD3B48003A418D /* Release Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3A5FE293BB9438C1AE339D7F /* Pods-Abstract-Authorization-module.release staging.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-Staging"; + BUNDLE_DISPLAY_NAME = "Authorization-module Staging"; + BUNDLE_ID = "com.flatstack.Authorization-module.staging"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Authorization-module/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited)"; + PRODUCT_NAME = "Authorization-module"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Authorization-module/BridgeHeader.h"; + TARGETED_DEVICE_FAMILY = 1; + }; + name = "Release Staging"; + }; + E736C5DE1A25320400B8986E /* AppStore */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + API_VERSION = v1; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_SWIFT_FLAGS = ""; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + URL_HOST = "https://apple.com"; + VALIDATE_PRODUCT = YES; + }; + name = AppStore; + }; + E736C5DF1A25320400B8986E /* AppStore */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AF5D1F97F5C59B62E7E84E1B /* Pods-Abstract-Authorization-module.appstore.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + BUNDLE_DISPLAY_NAME = "Authorization-module"; + BUNDLE_ID = "com.flatstack.Authorization-module"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + INFOPLIST_FILE = "Authorization-module/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-framework", + "\"QuartzCore\"", + ); + OTHER_SWIFT_FLAGS = "$(inherited)"; + PRODUCT_NAME = "Authorization-module"; + PROVISIONING_PROFILE = ""; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Authorization-module/BridgeHeader.h"; + TARGETED_DEVICE_FAMILY = 1; + }; + name = AppStore; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1710DE6B1C453AF800912C5B /* Build configuration list for PBXNativeTarget "Authorization-moduleUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1710DE631C453AF800912C5B /* Debug */, + 1710DE641C453AF800912C5B /* AppStore Debug */, + 1710DE651C453AF800912C5B /* Debug Staging */, + 1710DE661C453AF800912C5B /* Release */, + 1710DE671C453AF800912C5B /* Test */, + 1710DE681C453AF800912C5B /* AppStore */, + 1710DE691C453AF800912C5B /* Release Staging */, + 1710DE6A1C453AF800912C5B /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 212D01921BB1986B00B34340 /* Build configuration list for PBXNativeTarget "Authorization-moduleTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 212D01931BB1986B00B34340 /* Debug */, + 212D01941BB1986B00B34340 /* AppStore Debug */, + 212D01951BB1986B00B34340 /* Debug Staging */, + 212D01961BB1986B00B34340 /* Release */, + 212D01971BB1986B00B34340 /* Test */, + 212D01981BB1986B00B34340 /* AppStore */, + 212D01991BB1986B00B34340 /* Release Staging */, + 212D019A1BB1986B00B34340 /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 21DB300A19DD2289003A418D /* Build configuration list for PBXProject "Authorization-module" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 21DB302F19DD2289003A418D /* Debug */, + 212D01851BB1981C00B34340 /* AppStore Debug */, + 21DB304C19DD3B30003A418D /* Debug Staging */, + 21DB303019DD2289003A418D /* Release */, + 212D01811BB1978500B34340 /* Test */, + E736C5DE1A25320400B8986E /* AppStore */, + 21DB304F19DD3B48003A418D /* Release Staging */, + 212D01831BB1978B00B34340 /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 21DB303119DD2289003A418D /* Build configuration list for PBXNativeTarget "Authorization-module" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 21DB303219DD2289003A418D /* Debug */, + 212D01861BB1981C00B34340 /* AppStore Debug */, + 21DB304D19DD3B30003A418D /* Debug Staging */, + 21DB303319DD2289003A418D /* Release */, + 212D01821BB1978500B34340 /* Test */, + E736C5DF1A25320400B8986E /* AppStore */, + 21DB305019DD3B48003A418D /* Release Staging */, + 212D01841BB1978B00B34340 /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + 218C64B61BA078BA00EEEDF1 /* Authorization-module.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + 218C64B71BA078BA00EEEDF1 /* Authorization-module.xcdatamodel */, + ); + currentVersion = 218C64B71BA078BA00EEEDF1 /* Authorization-module.xcdatamodel */; + path = "Authorization-module.xcdatamodeld"; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = 21DB300719DD2289003A418D /* Project object */; +} diff --git a/Autorization:Registration Example/Authorization-module.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Autorization:Registration Example/Authorization-module.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100755 index 0000000..664ff86 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Autorization:Registration Example/Authorization-module.xcodeproj/xcshareddata/xcschemes/AppStore.xcscheme b/Autorization:Registration Example/Authorization-module.xcodeproj/xcshareddata/xcschemes/AppStore.xcscheme new file mode 100644 index 0000000..efd3d3c --- /dev/null +++ b/Autorization:Registration Example/Authorization-module.xcodeproj/xcshareddata/xcschemes/AppStore.xcscheme @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Autorization:Registration Example/Authorization-module.xcodeproj/xcshareddata/xcschemes/Production.xcscheme b/Autorization:Registration Example/Authorization-module.xcodeproj/xcshareddata/xcschemes/Production.xcscheme new file mode 100644 index 0000000..1d53650 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module.xcodeproj/xcshareddata/xcschemes/Production.xcscheme @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Autorization:Registration Example/Authorization-module.xcodeproj/xcshareddata/xcschemes/Staging.xcscheme b/Autorization:Registration Example/Authorization-module.xcodeproj/xcshareddata/xcschemes/Staging.xcscheme new file mode 100644 index 0000000..1b8f63b --- /dev/null +++ b/Autorization:Registration Example/Authorization-module.xcodeproj/xcshareddata/xcschemes/Staging.xcscheme @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Autorization:Registration Example/Authorization-module.xcworkspace/contents.xcworkspacedata b/Autorization:Registration Example/Authorization-module.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..e97d210 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Autorization:Registration Example/Authorization-module/APIManager.swift b/Autorization:Registration Example/Authorization-module/APIManager.swift new file mode 100644 index 0000000..e818dea --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/APIManager.swift @@ -0,0 +1,193 @@ +// +// APIManager.swift +// Authorization-module +// +// Created by Kruperfone on 16.02.15. +// Copyright (c) 2015 Flatstack. All rights reserved. +// + +import Foundation + +class APIManager: NSObject { + + class var sharedInstance: APIManager { + struct Static { + static var instance: APIManager? + static var token: dispatch_once_t = 0 + } + + dispatch_once(&Static.token) { + Static.instance = APIManager() + } + + return Static.instance! + } + + private static let baseURL: NSURL = { + + #if TEST + return NSURL(string: "http://httpbin.org/")! + #else + let host = NSBundle.mainBundle().infoDictionary!["URL_HOST"] + let version = NSBundle.mainBundle().infoDictionary!["API_VERSION"] + return NSURL(string: "\(host)/\(version)")! + #endif + + }() + + private(set) lazy var manager: AFHTTPSessionManager = { + + let manager = AFHTTPSessionManager(baseURL: APIManager.baseURL) + + manager.requestSerializer = AFJSONRequestSerializer(writingOptions: NSJSONWritingOptions.PrettyPrinted) + manager.responseSerializer = AFJSONResponseSerializer(readingOptions: NSJSONReadingOptions.AllowFragments) + + manager.responseSerializer.acceptableContentTypes = ["text/plain", "text/html", "application/json"] + + #if DEBUG + manager.securityPolicy.allowInvalidCertificates = true + #endif + + return manager + }() + +} + +enum InitializationOperationError: ErrorType { + case operationNotCreated + case queryIsAlreadyRunning + case missingRequiredParameter + case notImplemented +} + +//MARK: - Basic methods + +typealias APIManagerSuccessBlock = (task: NSURLSessionDataTask, response: Dictionary) -> Void +typealias APIManagerFailureBlock = (task: NSURLSessionDataTask?, error: NSError?) -> Void +typealias APIManagerProgressBlock = (progress: NSProgress) -> Void + +extension AFHTTPSessionManager { + + func API_GET(URLString : String, + params : AnyObject?, + success : APIManagerSuccessBlock?, + failure : APIManagerFailureBlock?, + progress : APIManagerProgressBlock? = nil) throws -> NSURLSessionDataTask { + + let task = self.GET(URLString, parameters: params, + + progress: { (progressState: NSProgress) in + dispatch_async(dispatch_get_main_queue(), { () -> Void in + progress?(progress: progressState) + }) + }, + + success: { (task: NSURLSessionDataTask, response: AnyObject?) in + + if let lResponse = response as? Dictionary { + dispatch_async(dispatch_get_main_queue(), { () -> Void in + success?(task: task, response: lResponse) + }) + } else { + dispatch_async(dispatch_get_main_queue(), { () -> Void in + failure?(task: task, error: nil) + }) + } + }, + + failure: { (task: NSURLSessionDataTask?, error: NSError) in + dispatch_async(dispatch_get_main_queue(), { () -> Void in + failure?(task: task, error: error) + }) + }) + + guard let lTask = task else { + throw InitializationOperationError.operationNotCreated + } + + return lTask + } + + func API_POST(URLString : String, + params : AnyObject?, + success : APIManagerSuccessBlock?, + failure : APIManagerFailureBlock?, + progress : APIManagerProgressBlock? = nil) -> NSURLSessionDataTask? { + + + + let task = self.POST(URLString, parameters: params, + + progress: { (progressState: NSProgress) in + dispatch_async(dispatch_get_main_queue(), { () -> Void in + progress?(progress: progressState) + }) + }, + + success: { (task: NSURLSessionDataTask, response: AnyObject?) in + dispatch_async(dispatch_get_main_queue(), { () -> Void in + success?(task: task, response: (response as? [String : AnyObject]) ?? [:]) + }) + }, + + failure: { (task: NSURLSessionDataTask?, error: NSError) in + dispatch_async(dispatch_get_main_queue(), { () -> Void in + failure?(task: task, error: error) + }) + }) + + + return task + } + + func API_PATCH(URLString : String, + params : AnyObject?, + success : APIManagerSuccessBlock?, + failure : APIManagerFailureBlock?) throws -> NSURLSessionDataTask { + + let task = self.PATCH(URLString, parameters: params, + success: { (task: NSURLSessionDataTask, response: AnyObject?) in + dispatch_async(dispatch_get_main_queue(), { () -> Void in + success?(task: task, response: (response as? [String : AnyObject]) ?? [:]) + }) + }, + + failure: { (task: NSURLSessionDataTask?, error: NSError) in + dispatch_async(dispatch_get_main_queue(), { () -> Void in + failure?(task: task, error: error) + }) + }) + + guard let lTask = task else { + throw InitializationOperationError.operationNotCreated + } + + return lTask + } + + func API_DELETE(URLString : String, + params : AnyObject?, + success : APIManagerSuccessBlock?, + failure : APIManagerFailureBlock?) throws -> NSURLSessionDataTask { + let task = self.DELETE(URLString, parameters: params, + + success: { (task: NSURLSessionDataTask, response: AnyObject?) in + dispatch_async(dispatch_get_main_queue(), { () -> Void in + success?(task: task, response: (response as? [String : AnyObject]) ?? [:]) + }) + }, + + failure: { (task: NSURLSessionDataTask?, error: NSError) in + dispatch_async(dispatch_get_main_queue(), { () -> Void in + failure?(task: task, error: error) + }) + }) + + guard let lTask = task else { + throw InitializationOperationError.operationNotCreated + } + + return lTask + } + +} diff --git a/Autorization:Registration Example/Authorization-module/AppDelegate.swift b/Autorization:Registration Example/Authorization-module/AppDelegate.swift new file mode 100644 index 0000000..36f9f9b --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/AppDelegate.swift @@ -0,0 +1,154 @@ +// +// AppDelegate.swift +// Authorization-module +// +// Created by Kruperfone on 02.10.14. +// Copyright (c) 2014 Flatstack. All rights reserved. +// + +import UIKit +import CoreData + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool + { + self.setupProject() + + return true + } + + func applicationWillResignActive(application: UIApplication) + { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(application: UIApplication) + { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(application: UIApplication) + { + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(application: UIApplication) + { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(application: UIApplication) + { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + // Saves changes in the application's managed object context before the application terminates. + } + + func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { + + FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) + GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication, annotation: annotation) + return true + } + + //MARK: - Remote Notifications + + func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { + + let tokenChars = UnsafePointer(deviceToken.bytes) + var tokenString = "" + UIFont.systemFontOfSize(1, weight: 1) + for i in 0 ..< deviceToken.length { + let formatString = "%02.2hhx" + tokenString += String(format: formatString, arguments: [tokenChars[i]]) + } + + NSUserDefaults.standardUserDefaults().setObject(deviceToken, forKey: FSUserDefaultsKey.DeviceToken.Data) + NSUserDefaults.standardUserDefaults().setObject(tokenString, forKey: FSUserDefaultsKey.DeviceToken.String) + NSUserDefaults.standardUserDefaults().synchronize() + } + + func requestForRemoteNotifications () { + UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [UIUserNotificationType.Alert, UIUserNotificationType.Sound, UIUserNotificationType.Badge], categories: nil)) + UIApplication.sharedApplication().registerForRemoteNotifications() + } + +} + +extension AppDelegate { + + func setupProject() { + + self.printProjectSettings() + + self.setupProjectForTests() + + // setup AFNetwork + self.setupAFNetworking() + + // Magica Record +// self.setupMagicalRecord() + + //setup SDWebImage +// self.setupSDWebImage() + + //setup Crashlytics + Fabric.with([Crashlytics.self]) + + SVProgressHUD.setDefaultMaskType(.Gradient) + + } + + func setupProjectForTests() { + #if TEST + switch TestingMode() { + case .Unit: + print("Unit Tests") + self.window?.rootViewController = UIViewController() + return + + case .UI: + print("UI Tests") + } + #endif + } + + func printProjectSettings() { + #if DEBUG + // print documents directory and device ID + print("\n*******************************************\nDOCUMENTS:\n\(NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0])\n*******************************************\n") + print("\n*******************************************\nDEVICE ID:\n\((UIDevice.currentDevice().identifierForVendor?.UUIDString)!)\n*******************************************\n") + print("\n*******************************************\nBUNDLE ID:\n\((NSBundle.mainBundle().bundleIdentifier)!)\n*******************************************\n") + #endif + } + + func setupAFNetworking() { + AFNetworkReachabilityManager.sharedManager().startMonitoring() + AFNetworkActivityIndicatorManager.sharedManager().enabled = true + } + +// func setupMagicalRecord() { +// MagicalRecord.setShouldDeleteStoreOnModelMismatch(true) +// MagicalRecord.setupAutoMigratingCoreDataStack() +// MagicalRecord.setLoggingLevel(MagicalRecordLoggingLevel.Off) +// } + +// func setupSDWebImage() { +// let imageCache:SDImageCache = SDImageCache.sharedImageCache() +// imageCache.maxCacheSize = 1024*1024*100 // 100mb on disk +// imageCache.maxMemoryCost = 1024*1024*10 // 10mb in memory +// +// let imageDownloader:SDWebImageDownloader = SDWebImageDownloader.sharedDownloader() +// imageDownloader.downloadTimeout = 60.0 +// } + + func canOpenURL(url: NSURL) { + + } +} + diff --git a/Autorization:Registration Example/Authorization-module/Authorization.storyboard b/Autorization:Registration Example/Authorization-module/Authorization.storyboard new file mode 100755 index 0000000..b5092a1 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Authorization.storyboard @@ -0,0 +1,1078 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Autorization:Registration Example/Authorization-module/AuthorizationAPIManager.swift b/Autorization:Registration Example/Authorization-module/AuthorizationAPIManager.swift new file mode 100644 index 0000000..58de28d --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/AuthorizationAPIManager.swift @@ -0,0 +1,63 @@ +// +// AuthorizationAPIExtension.swift +// Authorization-module +// +// Created by Nikita Asabin on 14.06.16. +// Copyright © 2016 Flatstack. All rights reserved. +// + +import UIKit + +class AuthorizationAPIManager:APIManager { + + class var defaultAuthorization: AuthorizationAPIManager { + struct Static { + static var instance: AuthorizationAPIManager? + static var token: dispatch_once_t = 0 + } + + dispatch_once(&Static.token) { + Static.instance = AuthorizationAPIManager() + } + + return Static.instance! + } + + func signUpWithProvider(provider: String, token: String, success:APIManagerSuccessBlock?, failure:APIManagerFailureBlock?) { + let params = ["token":token, "provider":provider] + self.manager.API_POST("oauth_sessions", params: params, success: { (task, response) in + success?(task: task, response: response) + }, failure: { (task, error) in + failure?(task: task, error: error) + }) + } + + func signUpWithEmail(params:Dictionary, success:APIManagerSuccessBlock?, failure:APIManagerFailureBlock?) { + + self.manager.API_POST("users/sign_up", params: params, success: { (task, response) in + success?(task: task, response: response) + }, failure: { (task, error) in + failure?(task: task, error: error) + }) + } + + func signInWithEmail(email: String, password: String, success:APIManagerSuccessBlock?, failure:APIManagerFailureBlock?) { + let params = ["email":email, "password":password] + self.manager.API_POST("users/sign_in", params: params, success: { (task, response) in + success?(task: task, response: response) + }, failure: { (task, error) in + failure?(task: task, error: error) + }) + } + func resetPassword(email: String, success:APIManagerSuccessBlock?, failure:APIManagerFailureBlock?) { + let params = ["email":email] + self.manager.API_POST("users/password", params: params, success: { (task, response) in + success?(task: task, response: response) + }, failure: { (task, error) in + failure?(task: task, error: error) + }) + } + + + +} diff --git a/Autorization:Registration Example/Authorization-module/Base.lproj/Main_Storyboard.storyboard b/Autorization:Registration Example/Authorization-module/Base.lproj/Main_Storyboard.storyboard new file mode 100755 index 0000000..46774ea --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Base.lproj/Main_Storyboard.storyboard @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Autorization:Registration Example/Authorization-module/BridgeHeader.h b/Autorization:Registration Example/Authorization-module/BridgeHeader.h new file mode 100755 index 0000000..2796147 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/BridgeHeader.h @@ -0,0 +1,28 @@ +// +// BridgeHeader.h +// Authorization-module +// +// Created by Kruperfone on 02.10.14. +// Copyright (c) 2014 Flatstack. All rights reserved. +// + +// Helpers +@import FSHelpers_Swift; + +// Analytics +@import Fabric; +@import Crashlytics; + +// Libraries +@import AFNetworking; +//@import MagicalRecord; +//@import SDWebImage; + +// Authorization +#import +@import FBSDKCoreKit; +#import +@import IOSLinkedInAPI; + +@import SVProgressHUD; +//#import "ObjectiveC_Header.h" diff --git a/Autorization:Registration Example/Authorization-module/Constants.swift b/Autorization:Registration Example/Authorization-module/Constants.swift new file mode 100755 index 0000000..8989b3e --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Constants.swift @@ -0,0 +1,40 @@ +// +// Constants.swift +// Authorization-module +// +// Created by Kruperfone on 02.10.14. +// Copyright (c) 2014 Flatstack. All rights reserved. +// + +import UIKit + +/*--------------User Defaults keys-------------*/ +enum FSUserDefaultsKey { + + enum DeviceToken { + private static let Prefix = "FSDeviceToken" + + static let Data = GenerateKey(Prefix, key: "Data") + static let String = GenerateKey(Prefix, key: "String") + } +} + +/*----------Notifications---------*/ +enum FSNotificationKey { + + enum Example { + private static let Prefix = "Example" + + static let Key = GenerateKey(Prefix, key: "Key") + } +} + +/*----------Colors----------*/ +enum FSColors { + static let AppColor = UIColor.clearColor() +} + +/*----------Helpers----------*/ +private func GenerateKey (prefix: String, key: String) -> String { + return "__\(prefix)-\(key)__" +} diff --git a/Autorization:Registration Example/Authorization-module/CoreData/Authorization-module.xcdatamodeld/.xccurrentversion b/Autorization:Registration Example/Authorization-module/CoreData/Authorization-module.xcdatamodeld/.xccurrentversion new file mode 100755 index 0000000..e29c9f9 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/CoreData/Authorization-module.xcdatamodeld/.xccurrentversion @@ -0,0 +1,8 @@ + + + + + _XCCurrentVersionName + Authorization-module.xcdatamodel + + diff --git a/Autorization:Registration Example/Authorization-module/CoreData/Authorization-module.xcdatamodeld/Authorization-module.xcdatamodel/contents b/Autorization:Registration Example/Authorization-module/CoreData/Authorization-module.xcdatamodeld/Authorization-module.xcdatamodel/contents new file mode 100755 index 0000000..193f33c --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/CoreData/Authorization-module.xcdatamodeld/Authorization-module.xcdatamodel/contents @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Autorization:Registration Example/Authorization-module/Extensions.swift b/Autorization:Registration Example/Authorization-module/Extensions.swift new file mode 100644 index 0000000..45bbff1 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Extensions.swift @@ -0,0 +1,9 @@ +// +// Extensions.swift +// Authorization-module +// +// Created by Kruperfone on 19.11.15. +// Copyright © 2015 Flatstack. All rights reserved. +// + +import Foundation diff --git a/Autorization:Registration Example/Authorization-module/ForgotPasswordViewController.swift b/Autorization:Registration Example/Authorization-module/ForgotPasswordViewController.swift new file mode 100644 index 0000000..55809b3 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/ForgotPasswordViewController.swift @@ -0,0 +1,117 @@ +// +// ForgotPasswordViewController.swift +// Fuhwe +// +// Created by Nikita Asabin on 12.02.16. +// Copyright © 2016 Flatstack. All rights reserved. +// + +import UIKit + +protocol ForgotPasswordViewControllerDelegate { + func resetPasswordInstructionWasSended() +} + +class ForgotPasswordViewController: UIViewController, FSKeyboardScrollSupport { + + @IBOutlet weak var emailTextField: UITextField! + @IBOutlet weak var sendButton: UIButton! + @IBOutlet weak var scrollView: UIScrollView! + + var delegate: ForgotPasswordViewControllerDelegate? + + var fs_keyboardScrollSupportScrollView: UIScrollView? { + return self.scrollView + } + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + override func viewDidDisappear(animated: Bool) { + super.viewDidDisappear(animated) + self.fs_keyboardScrollSupportRemoveNotifications() + } + override func viewWillAppear(animated: Bool) { + super.viewDidAppear(animated) + self.fs_keyboardScrollSupportRegisterForNotifications() + } + + @IBAction func sendResetLink(sender: AnyObject) { + + if self.emailTextField.text?.fs_emailValidate() == false{ + ShowOKAlert("Email must be correct", onViewController: self) + } else { + SVProgressHUD.show() + AuthorizationAPIManager.defaultAuthorization.resetPassword(self.emailTextField.text!, success: { (response) -> Void in + + self.emailTextField.resignFirstResponder() + self.dismissViewControllerAnimated(false, completion:{ + SVProgressHUD.dismiss() + self.delegate?.resetPasswordInstructionWasSended() + }) + + }) { (task, error) -> Void in + SVProgressHUD.dismiss() + self.emailTextField.resignFirstResponder() + ShowOKAlert("Something went wrong", onViewController: self) + + } + + } + } + + @IBAction func backToSignIn(sender: AnyObject) { + self.dismissViewControllerAnimated(true, completion: nil) + } + +} +extension ForgotPasswordViewController { + + func fs_keyboardScrollSupportKeyboardWillShow (notif: NSNotification) { + + guard let scrollView = self.fs_keyboardScrollSupportScrollView else {return} + + guard let info = notif.userInfo else {return} + guard let value = info[UIKeyboardFrameEndUserInfoKey] as? NSValue else {return} + + let keyboardFrame = value.CGRectValue() + let contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardFrame.height, 0.0) + + scrollView.contentInset = contentInsets + scrollView.scrollIndicatorInsets = contentInsets + + // If active text field is hidden by keyboard, scroll it so it's visible + // Your app might not need or want this behavior. + guard let activeField = self.fs_keyboardScrollSupportActiveField else {return} + + // By default activeField must be subview of the scrollView + guard let superview = activeField.superview else {return} + guard superview == scrollView else {return} + + var viewRect = self.view.frame + viewRect.size.height -= keyboardFrame.height + + let convertedRect = superview.convertRect(activeField.frame, toView: self.view) + + if !CGRectContainsPoint(viewRect, convertedRect.origin) { + scrollView.scrollRectToVisible(activeField.frame, animated: true) + } + } + + func fs_keyboardScrollSupportKeyboardWillHide (notif: NSNotification) { + + guard let scrollView = self.fs_keyboardScrollSupportScrollView else {return} + + let contentInsets = UIEdgeInsetsZero + scrollView.contentInset = contentInsets + scrollView.scrollIndicatorInsets = contentInsets + } +} + + diff --git a/Autorization:Registration Example/Authorization-module/GVAligmentCollectionViewFlowLayout.h b/Autorization:Registration Example/Authorization-module/GVAligmentCollectionViewFlowLayout.h new file mode 100755 index 0000000..7d1c312 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/GVAligmentCollectionViewFlowLayout.h @@ -0,0 +1,30 @@ +// +// GVAligmentCollectionViewFlowLayout.h +// Authorization-module +// +// Created by Vladimir Goncharov on 05.12.14. +// Copyright (c) 2014 Flatstack. All rights reserved. +// + +#import + +typedef NS_ENUM(NSUInteger, GVAligmentCollectionViewFlowLayoutAligmentVertical) +{ + GVAligmentCollectionViewFlowLayoutAligmentVerticalTop, + GVAligmentCollectionViewFlowLayoutAligmentVerticalCenter, + GVAligmentCollectionViewFlowLayoutAligmentVerticalBottom +}; + +typedef NS_ENUM(NSUInteger, GVAligmentCollectionViewFlowLayoutAligmentHorizontal) +{ + GVAligmentCollectionViewFlowLayoutAligmentHorizontalLeft, + GVAligmentCollectionViewFlowLayoutAligmentHorizontalCenter, + GVAligmentCollectionViewFlowLayoutAligmentHorizontalRight +}; + +@interface GVAligmentCollectionViewFlowLayout : UICollectionViewFlowLayout + +@property (nonatomic, assign) GVAligmentCollectionViewFlowLayoutAligmentVertical verticalAligment; +@property (nonatomic, assign) GVAligmentCollectionViewFlowLayoutAligmentHorizontal horizontalAligment; + +@end diff --git a/Autorization:Registration Example/Authorization-module/GVAligmentCollectionViewFlowLayout.m b/Autorization:Registration Example/Authorization-module/GVAligmentCollectionViewFlowLayout.m new file mode 100755 index 0000000..ee89fde --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/GVAligmentCollectionViewFlowLayout.m @@ -0,0 +1,53 @@ +// +// GVAligmentCollectionViewFlowLayout.m +// Authorization-module +// +// Created by Vladimir Goncharov on 05.12.14. +// Copyright (c) 2014 Flatstack. All rights reserved. +// + +#import "GVAligmentCollectionViewFlowLayout.h" + +@implementation GVAligmentCollectionViewFlowLayout + +- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{ + NSArray* attributesToReturn = [super layoutAttributesForElementsInRect:rect]; + for (UICollectionViewLayoutAttributes* attributes in attributesToReturn) { + if (nil == attributes.representedElementKind) { + NSIndexPath* indexPath = attributes.indexPath; + attributes.frame = [self layoutAttributesForItemAtIndexPath:indexPath].frame; + } + } + return attributesToReturn; +} + +- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath { + UICollectionViewLayoutAttributes *currentItemAttributes = [super layoutAttributesForItemAtIndexPath:indexPath]; + +// switch (self.horizontalAligment) +// { +// case GVAligmentCollectionViewFlowLayoutAligmentHorizontalLeft: +// { +// return +// }; break; +// +// case GVAligmentCollectionViewFlowLayoutAligmentHorizontalCenter: +// { +// +// }; break; +// +// case GVAligmentCollectionViewFlowLayoutAligmentHorizontalRight: +// { +// +// }; break; +// +// default: +// break; +// } + currentItemAttributes.frame = CGRectOffset(currentItemAttributes.frame, 0, 0.5 * CGRectGetHeight(currentItemAttributes.frame)); + + return currentItemAttributes; +} + + +@end diff --git a/Autorization:Registration Example/Authorization-module/GoogleService-Info.plist b/Autorization:Registration Example/Authorization-module/GoogleService-Info.plist new file mode 100644 index 0000000..6874341 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/GoogleService-Info.plist @@ -0,0 +1,28 @@ + + + + + CLIENT_ID + 626403655533-qqdnnmtmassteereilt1acqc6d8ii20m.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.626403655533-qqdnnmtmassteereilt1acqc6d8ii20m + PLIST_VERSION + 1 + BUNDLE_ID + com.flatstack.Authorization-module + PROJECT_ID + test-signin-1342 + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:626403655533:ios:5a69e893f35df730 + + \ No newline at end of file diff --git a/Autorization:Registration Example/Authorization-module/Helpers.swift b/Autorization:Registration Example/Authorization-module/Helpers.swift new file mode 100644 index 0000000..1057b6f --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Helpers.swift @@ -0,0 +1,20 @@ +// +// Helpers.swift +// Authorization-module +// +// Created by Kruperfone on 19.11.15. +// Copyright © 2015 Flatstack. All rights reserved. +// + +import Foundation + +func ShowOKAlert (message: String, onViewController viewController: UIViewController?) { + let alertView = UIAlertController(title: nil, message: message, preferredStyle: UIAlertControllerStyle.Alert) + + let alertButton = UIAlertAction(title: "OK", style: .Default) { (alertAction: UIAlertAction) -> Void in + alertView.dismissViewControllerAnimated(true, completion: nil) + } + alertView.addAction(alertButton) + + viewController?.presentViewController(alertView, animated: true, completion: nil) +} \ No newline at end of file diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Contents.json b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Contents.json new file mode 100644 index 0000000..0914624 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Contents.json @@ -0,0 +1,44 @@ +{ + "images" : [ + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-Small@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-Small@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40@2x-1.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-40@2x-1.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-40@2x-1.png new file mode 100644 index 0000000..7baef82 Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-40@2x-1.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-40@3x.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-40@3x.png new file mode 100644 index 0000000..57e8bf5 Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-40@3x.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-60@2x.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-60@2x.png new file mode 100644 index 0000000..57e8bf5 Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-60@2x.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-60@3x.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-60@3x.png new file mode 100644 index 0000000..d5d185d Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-60@3x.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-Small@2x.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-Small@2x.png new file mode 100644 index 0000000..f203122 Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-Small@2x.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-Small@3x.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-Small@3x.png new file mode 100644 index 0000000..d25d8ab Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon-Staging.appiconset/Icon-Small@3x.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Contents.json b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100755 index 0000000..7b28cc5 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,44 @@ +{ + "images" : [ + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-Small@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-Small@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png new file mode 100644 index 0000000..cb65218 Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png new file mode 100644 index 0000000..6d6fd71 Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png new file mode 100644 index 0000000..6d6fd71 Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png new file mode 100644 index 0000000..bb4e123 Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png new file mode 100644 index 0000000..675e5c2 Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png new file mode 100644 index 0000000..722b0e3 Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/Contents.json b/Autorization:Registration Example/Authorization-module/Images.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/test.imageset/Artboard 1-1.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/test.imageset/Artboard 1-1.png new file mode 100644 index 0000000..0bb3463 Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/test.imageset/Artboard 1-1.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/test.imageset/Artboard 1-2.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/test.imageset/Artboard 1-2.png new file mode 100644 index 0000000..0bb3463 Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/test.imageset/Artboard 1-2.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/test.imageset/Artboard 1.png b/Autorization:Registration Example/Authorization-module/Images.xcassets/test.imageset/Artboard 1.png new file mode 100644 index 0000000..0bb3463 Binary files /dev/null and b/Autorization:Registration Example/Authorization-module/Images.xcassets/test.imageset/Artboard 1.png differ diff --git a/Autorization:Registration Example/Authorization-module/Images.xcassets/test.imageset/Contents.json b/Autorization:Registration Example/Authorization-module/Images.xcassets/test.imageset/Contents.json new file mode 100644 index 0000000..47fee9e --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Images.xcassets/test.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Artboard 1-1.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Artboard 1.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Artboard 1-2.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Autorization:Registration Example/Authorization-module/Info.plist b/Autorization:Registration Example/Authorization-module/Info.plist new file mode 100755 index 0000000..d81a16f --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Info.plist @@ -0,0 +1,120 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${BUNDLE_DISPLAY_NAME} + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(BUNDLE_ID) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleURLSchemes + + fb261000837589689 + + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.googleusercontent.apps.626403655533-qqdnnmtmassteereilt1acqc6d8ii20m + + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.flatstack.Authorization-module + + + + CFBundleVersion + 1 + Fabric + + APIKey + a58319df29eb3929f0ed864166f3c42deb476e66 + Kits + + + KitInfo + + KitName + Crashlytics + + + + FacebookAppID + 261000837589689 + FacebookDisplayName + Authorization example + LSApplicationQueriesSchemes + + fbapi + fb-messenger-api + fbauth2 + fbshareextension + + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSExceptionDomains + + httpbin.org + + NSIncludesSubdomains + + NSTemporaryExceptionAllowsInsecureHTTPLoads + + NSTemporaryExceptionMinimumTLSVersion + TLSv1.1 + + + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Authorization + UIMainStoryboardFile~ipad + Main_iPad + UIRequiredDeviceCapabilities + + armv7 + + UIStatusBarStyle + UIStatusBarStyleLightContent + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + URL_HOST + ${URL_HOST} + + diff --git a/Autorization:Registration Example/Authorization-module/LaunchScreen.storyboard b/Autorization:Registration Example/Authorization-module/LaunchScreen.storyboard new file mode 100644 index 0000000..c9b972a --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/LaunchScreen.storyboard @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Autorization:Registration Example/Authorization-module/Localization/Base.lproj/Localizable.strings b/Autorization:Registration Example/Authorization-module/Localization/Base.lproj/Localizable.strings new file mode 100755 index 0000000..6cbb103 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Localization/Base.lproj/Localizable.strings @@ -0,0 +1,18 @@ +/* Localized versions of Info.plist keys */ + +/*------------Common-----------*/ +"ERROR" = "Error"; +"NO" = "No"; +"YES" = "Yes"; +"OK" = "Ok"; + +"ORDER" = "Order"; + +/*-------------API-----------*/ +"API_VERSION_DEPRECATED" = "The current API version deprecated"; +"OPERATION_WAS_CANCELLED" = "Operation was cancelled"; +"NOT_FOUND" = "Not found"; +"UNKNOW_ERROR" = "Unknow error"; + +//"" = ""; +// /*-------------CATEGORY-----------*/ diff --git a/Autorization:Registration Example/Authorization-module/Localization/ru.lproj/Localizable.strings b/Autorization:Registration Example/Authorization-module/Localization/ru.lproj/Localizable.strings new file mode 100755 index 0000000..1c25617 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Localization/ru.lproj/Localizable.strings @@ -0,0 +1,18 @@ +/* Localized versions of Info.plist keys */ + +/*------------Common-----------*/ +"ERROR" = "Ошибка"; +"NO" = "Нет"; +"YES" = "Да"; +"OK" = "Ок"; + +"ORDER" = "Заказ"; + +/*-------------API-----------*/ +"API_VERSION_DEPRECATED" = "Текущая версия API устарела"; +"OPERATION_WAS_CANCELLED" = "Операция была отменена"; +"NOT_FOUND" = "Не найдено"; +"UNKNOW_ERROR" = "Неизвестная ошибка"; + +//"" = ""; +// /*-------------CATEGORY-----------*/ diff --git a/Autorization:Registration Example/Authorization-module/Protocols.swift b/Autorization:Registration Example/Authorization-module/Protocols.swift new file mode 100644 index 0000000..9c0d41e --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Protocols.swift @@ -0,0 +1,9 @@ +// +// Protocols.swift +// Authorization-module +// +// Created by Kruperfone on 19.11.15. +// Copyright © 2015 Flatstack. All rights reserved. +// + +import Foundation diff --git a/Autorization:Registration Example/Authorization-module/Scripts/build.sh b/Autorization:Registration Example/Authorization-module/Scripts/build.sh new file mode 100755 index 0000000..c28ff98 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Scripts/build.sh @@ -0,0 +1,2 @@ +#!/bin/sh +xcodebuild -workspace Authorization-module.xcworkspace -scheme Production -sdk iphoneos -configuration Release OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty -c && exit ${PIPESTATUS[0]} diff --git a/Autorization:Registration Example/Authorization-module/Scripts/mogend.sh b/Autorization:Registration Example/Authorization-module/Scripts/mogend.sh new file mode 100755 index 0000000..99554b2 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Scripts/mogend.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# mogend.sh +# +# Created by Jean-Denis Muys on 24/02/11. +# Modified by Ryan Rounkles on 15/5/11 to use correct model version and to account for spaces in file paths +# Modified by Vyacheslav Artemev on 7/12/11 to use separate folders for machine and human +# Modyfied by Danis Ziganshin on 14.02.14 for ARC compability + +# Check paths for generated files first! It can be different for every project +# If something wrong with paths on your machine - use absolute path for mogenerator script +# for enabling this script you should go to "Project target" -> "Build Rules" -> "Editor" -> "Add build Rule" -> select "Data model version files using Script" -> Process = "Data model version files" -> add custom script + #echo "Running mogend" + #"${SRCROOT}/ios-base/Scripts/mogend.sh" +# Set Output files = $(DERIVED_FILE_DIR)/${INPUT_FILE_BASE}.momd + +mogenerator --swift --model "${INPUT_FILE_PATH}/" --machine-dir "${PROJECT_DIR}/Authorization-module/CoreData/Private/" --human-dir "${PROJECT_DIR}/Authorization-module/CoreData/" --template-var arc=true + +${DEVELOPER_BIN_DIR}/momc -XD_MOMC_TARGET_VERSION=10.7 "${INPUT_FILE_PATH}" "${TARGET_BUILD_DIR}/${EXECUTABLE_FOLDER_PATH}/${INPUT_FILE_BASE}.momd" + +echo "Mogend.sh is done" \ No newline at end of file diff --git a/Autorization:Registration Example/Authorization-module/Scripts/test.sh b/Autorization:Registration Example/Authorization-module/Scripts/test.sh new file mode 100755 index 0000000..1006474 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/Scripts/test.sh @@ -0,0 +1,14 @@ +#!/bin/sh +xcodebuild -workspace Authorization-module.xcworkspace -scheme Staging -destination 'platform=iOS Simulator,name=iPhone 6,OS=8.1' test | xcpretty -c -t && exit ${PIPESTATUS[0]} + +#Available destinations for the "Staging" scheme: +#{ platform:iOS Simulator, id:9D4669A0-72AF-41A9-AB8A-14914D7A502F, OS:8.2, name:iPad 2 } +#{ platform:iOS Simulator, id:D1F3629A-4698-4DF4-813B-16E944D958C6, OS:8.2, name:iPad Air } +#{ platform:iOS Simulator, id:F16D6604-4C3C-46CF-B268-904093D42D28, OS:8.2, name:iPad Retina } +#{ platform:iOS Simulator, id:83BEC35E-D369-4CF5-BDB8-DB76DC1F1F1A, OS:8.2, name:iPhone 4s } +#{ platform:iOS Simulator, id:45F13142-6870-4DF5-AA02-DC5AB4549EDD, OS:8.2, name:iPhone 5 } +#{ platform:iOS Simulator, id:3A52861B-7E7A-43E8-9026-DFF899543071, OS:8.2, name:iPhone 5s } +#{ platform:iOS Simulator, id:2A8A340C-42BF-4045-B008-3868F8E082BA, OS:8.2, name:iPhone 6 Plus } +#{ platform:iOS Simulator, id:F651D749-67FD-4093-A9AE-C386E3858632, OS:8.2, name:iPhone 6 } +#{ platform:iOS Simulator, id:DB1FB84A-7F74-4042-B0E3-01B05B730FE7, OS:8.2, name:Resizable iPad } +#{ platform:iOS Simulator, id:90301A80-5A1B-4C4F-9433-D31A113FE314, OS:8.2, name:Resizable iPhone } diff --git a/Autorization:Registration Example/Authorization-module/SignUpViewController.swift b/Autorization:Registration Example/Authorization-module/SignUpViewController.swift new file mode 100644 index 0000000..c3e97cf --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/SignUpViewController.swift @@ -0,0 +1,304 @@ +// +// SignUpViewController.swift +// swift-base +// +// Created by Nikita Asabin on 01.02.16. +// Copyright © 2016 Flatstack. All rights reserved. +// + +import UIKit +import FBSDKLoginKit + +enum AutorizationMode { + case SignUp + case SignIn +} + +class SignUpViewController: UIViewController, FSKeyboardScrollSupport { + + @IBOutlet weak var fbLoginButton: UIButton! + @IBOutlet weak var googleLoginButton: UIButton! + @IBOutlet weak var linkedinLoginButton: UIButton! + @IBOutlet weak var emailLoginButton: UIButton! + + //sign in + @IBOutlet weak var emailTextField: UITextField! + @IBOutlet weak var passwordTextField: UITextField! + @IBOutlet weak var heightConstraint: NSLayoutConstraint! + @IBOutlet weak var scrollView: UIScrollView! + @IBOutlet weak var emailValidationErrorLabel: UILabel! + + var mode: AutorizationMode? + var fs_keyboardScrollSupportScrollView: UIScrollView? { + return self.scrollView + } + + override func viewDidLoad() { + super.viewDidLoad() + GIDSignIn.sharedInstance().clientID = "626403655533-qqdnnmtmassteereilt1acqc6d8ii20m.apps.googleusercontent.com" + GIDSignIn.sharedInstance().uiDelegate = self + GIDSignIn.sharedInstance().delegate = self + self.setupButtons() + if self.mode == .SignIn { + var h = self.view.fs_height - 580 + if h<10 { + h = 10 + } + self.heightConstraint.constant = h + self.heightConstraint.constant + self.emailValidationErrorLabel.hidden = true + } + + let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(SignUpViewController.dismissKeyboard)) + + view.addGestureRecognizer(tap) + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + override func viewDidDisappear(animated: Bool) { + super.viewDidDisappear(animated) + self.fs_keyboardScrollSupportRemoveNotifications() + } + override func viewWillAppear(animated: Bool) { + super.viewDidAppear(animated) + self.fs_keyboardScrollSupportRegisterForNotifications() + } + + func setupButtons() { + if self.mode == .SignUp { + self.emailLoginButton.setTitle("Sign up with email", forState: .Normal) + } else { + self.emailLoginButton.setTitle("Login with email", forState: .Normal) + } + } + + + var linkedInClient: LIALinkedInHttpClient { + let application = LIALinkedInApplication(redirectURL: "https://github.com/fs/ios-base-swift", clientId: "77fkkjhfvmg7wj", clientSecret: "BrsCWErZCp7gm45t", state: "DCEEFWF45453sdffef424", grantedAccess: ["r_emailaddress","r_basicprofile"]) + + return LIALinkedInHttpClient(forApplication: application, presentingViewController: self) + } + + + func dismissKeyboard() { + //Causes the view (or one of its embedded text fields) to resign the first responder status. + view.endEditing(true) + } + + func switchToViewController(viewController:UIViewController){ + guard let window = (UIApplication.sharedApplication().delegate as? AppDelegate)?.window else {fatalError("Can't get current app delegate window")} + + window.rootViewController = viewController + + UIView.transitionWithView(window, duration: 0.5, options: UIViewAnimationOptions.TransitionFlipFromTop, animations: { + window.rootViewController = viewController + }) { (finished) in + self.dismissViewControllerAnimated(false, completion: nil) + } + + } + + @IBAction func signUpSignInWithLinkedIn(sender: AnyObject) { + self.linkedInClient.getAuthorizationCode({ (code: String!) -> Void in + self.linkedInClient.getAccessToken(code, success: { (accessTokenData: [NSObject: AnyObject]!) -> Void in + let accessToken = accessTokenData["access_token"] as! String + SVProgressHUD.show() + AuthorizationAPIManager.defaultAuthorization.signUpWithProvider("linkedin", token: accessToken, success: { (response) -> Void in + FSDLog("Logged In") + SVProgressHUD.dismiss() + ShowOKAlert("Successfully logged in", onViewController: self) + }, failure: { (task, error) -> Void in + SVProgressHUD.dismiss() + ShowOKAlert("Something went wrong", onViewController: self) + }) + }, failure: { (error) -> Void in + NSLog("error getting linked in access token: \(error)") + }) + }, cancel: { () -> Void in + NSLog("LinkedIn authorization canceled") + }) { (error) -> Void in + NSLog("Error getting linkedin auth code: \(error)") + } + } + + @IBAction func signUpSignInWithGoogle(sender: AnyObject) { + + GIDSignIn.sharedInstance().signOut() + GIDSignIn.sharedInstance().signIn() + } + + @IBAction func signUpSignInWithFacebook(sender: AnyObject) { + + FBSDKLoginManager().logOut() + FBSDKLoginManager().logInWithReadPermissions(["public_profile", "email"], fromViewController: self) { (result, error) -> Void in + if error != nil { + ShowOKAlert(error.description, onViewController: self) + FSDLog(error.description) + } else if result.isCancelled == true { + FSDLog("Canceled") + } else { + SVProgressHUD.show() + AuthorizationAPIManager.defaultAuthorization.signUpWithProvider("facebook", token: result.token.tokenString, success: { (response) -> Void in + FSDLog("Logged In") + SVProgressHUD.dismiss() + ShowOKAlert("Successfully logged in", onViewController: self) + + }, failure: { (task, error) -> Void in + FSDLog("Logged In") + SVProgressHUD.dismiss() + ShowOKAlert("Something went wrong", onViewController: self) + }) + + } + + } + } + + @IBAction func signUpSignInWithEmail(sender: AnyObject) { + + if self.mode == .SignIn { + if self.emailTextField.text?.fs_emailValidate() == false{ + self.emailValidationErrorLabel.hidden = false + self.emailValidationErrorLabel.text = "Email is incorrect!" + } else { + self.emailValidationErrorLabel.hidden = true + self.view.endEditing(true) + SVProgressHUD.show() + AuthorizationAPIManager.defaultAuthorization.signInWithEmail(emailTextField.text!, password: passwordTextField.text!, success: { (response) -> Void in + SVProgressHUD.dismiss() + ShowOKAlert("Successfully logged in", onViewController: self) + }) { (task, error) -> Void in + SVProgressHUD.dismiss() + self.emailValidationErrorLabel.text = "Email or password is incorrect!" + self.emailValidationErrorLabel.hidden = false + } + + } + + } else { + guard let vc = self.storyboard?.instantiateViewControllerWithIdentifier("SignUpSignInEmail") as? SignUpWithEmailViewController else {return} + vc.mode = self.mode + self.presentViewController(vc, animated: true, completion: nil) + } + } + + + @IBAction func showSignIn(sender: AnyObject) { + guard let vc = self.storyboard?.instantiateViewControllerWithIdentifier("SignIn") as? SignUpViewController else {return} + vc.mode = .SignIn + self.switchToViewController(vc) + + } + + @IBAction func showSignUp(sender: AnyObject) { + guard let vc = self.storyboard?.instantiateViewControllerWithIdentifier("SignUp") as? SignUpViewController else {return} + vc.mode = .SignUp + self.switchToViewController(vc) + } + + @IBAction func showFargotPassword(sender: AnyObject) { + guard let vc = self.storyboard?.instantiateViewControllerWithIdentifier("ForgotPassword") as? ForgotPasswordViewController else {return} + vc.delegate = self + self.presentViewController(vc, animated: true, completion: nil) + } + +} + + +extension SignUpViewController: GIDSignInUIDelegate{ + + func signInWillDispatch(signIn: GIDSignIn!, error: NSError!) { + + } + + func signIn(signIn: GIDSignIn!, presentViewController viewController: UIViewController!) { + self.presentViewController(viewController, animated: true, completion: nil) + } + + func signIn(signIn: GIDSignIn!, dismissViewController viewController: UIViewController!) { + self.dismissViewControllerAnimated(true, completion: nil) + } + +} + +extension SignUpViewController: GIDSignInDelegate{ + func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) { + if (error == nil) { + SVProgressHUD.show() + AuthorizationAPIManager.defaultAuthorization.signUpWithProvider("google", token: user.authentication.accessToken, success: { (response) -> Void in + FSDLog("Logged In google") + SVProgressHUD.dismiss() + ShowOKAlert("Successfully logged in", onViewController: self) + }, failure: { (task, error) -> Void in + SVProgressHUD.dismiss() + ShowOKAlert("Something went wrong", onViewController: self) + }) + + } else { + FSDLog("\(error.localizedDescription)") + } + } +} + + +extension SignUpViewController { + + func fs_keyboardScrollSupportKeyboardWillShow (notif: NSNotification) { + + guard let scrollView = self.fs_keyboardScrollSupportScrollView else {return} + + guard let info = notif.userInfo else {return} + guard let value = info[UIKeyboardFrameEndUserInfoKey] as? NSValue else {return} + + let keyboardFrame = value.CGRectValue() + let contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardFrame.height, 0.0) + + scrollView.contentInset = contentInsets + scrollView.scrollIndicatorInsets = contentInsets + + // If active text field is hidden by keyboard, scroll it so it's visible + // Your app might not need or want this behavior. + guard let activeField = self.fs_keyboardScrollSupportActiveField else {return} + + // By default activeField must be subview of the scrollView + guard let superview = activeField.superview else {return} + guard superview == scrollView else {return} + + var viewRect = self.view.frame + viewRect.size.height -= keyboardFrame.height + + let convertedRect = superview.convertRect(activeField.frame, toView: self.view) + + if !CGRectContainsPoint(viewRect, convertedRect.origin) { + scrollView.scrollRectToVisible(activeField.frame, animated: true) + } + } + + func fs_keyboardScrollSupportKeyboardWillHide (notif: NSNotification) { + + guard let scrollView = self.fs_keyboardScrollSupportScrollView else {return} + + let contentInsets = UIEdgeInsetsZero + scrollView.contentInset = contentInsets + scrollView.scrollIndicatorInsets = contentInsets + } +} + +extension SignUpViewController: ForgotPasswordViewControllerDelegate { + func resetPasswordInstructionWasSended() { + let alertView = UIAlertController(title: nil, message: "Reset password instructions was sent to email", preferredStyle: UIAlertControllerStyle.Alert) + let alertButton = UIAlertAction(title: "OK", style: .Default) { (alertAction: UIAlertAction) -> Void in + alertView.dismissViewControllerAnimated(true, completion: nil) + } + + alertView.addAction(alertButton) + + self.presentViewController(alertView, animated: true, completion: nil) + } +} + + + diff --git a/Autorization:Registration Example/Authorization-module/SignUpWithEmailViewController.swift b/Autorization:Registration Example/Authorization-module/SignUpWithEmailViewController.swift new file mode 100644 index 0000000..cc6518c --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/SignUpWithEmailViewController.swift @@ -0,0 +1,169 @@ +// +// SignUpWithEmailViewController.swift +// swift-base +// +// Created by Nikita Asabin on 04.02.16. +// Copyright © 2016 Flatstack. All rights reserved. +// + +import UIKit + +class SignUpWithEmailViewController: UIViewController, FSKeyboardScrollSupport { + + @IBOutlet weak var emailTextField: UITextField! + @IBOutlet weak var passwordTextField: UITextField! + @IBOutlet weak var passwordConfiramtionTextField: UITextField! + @IBOutlet weak var signUpButton: UIButton! + @IBOutlet weak var firstNameTextField: UITextField! + @IBOutlet weak var lastNameTextField: UITextField! + @IBOutlet weak var scrollView: UIScrollView! + @IBOutlet weak var firstNameValidationErrorLabel: UILabel! + @IBOutlet weak var lastNameValidationErrorLabel: UILabel! + @IBOutlet weak var emailValidationErrorLabel: UILabel! + @IBOutlet weak var passwordValidationErrorLabel: UILabel! + @IBOutlet weak var passwordConfiramtionValidationErrorLabel: UILabel! + + var mode: AutorizationMode? + var fs_keyboardScrollSupportScrollView: UIScrollView? { + return self.scrollView + } + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + override func viewDidDisappear(animated: Bool) { + super.viewDidDisappear(animated) + self.fs_keyboardScrollSupportRemoveNotifications() + } + override func viewWillAppear(animated: Bool) { + super.viewDidAppear(animated) + self.fs_keyboardScrollSupportRegisterForNotifications() + } + + + @IBAction func signUpSignInWithEmail(sender: AnyObject) { + if self.validateTextFields() == true { + SVProgressHUD.show() + guard let lEmail = emailTextField.text, lPassword = passwordTextField.text, lFirstName = firstNameTextField.text, lLastName = lastNameTextField.text else {return} + let params = ["email":lEmail, "password":lPassword, "password_confirmation":lPassword,"first_name":lFirstName, "last_name": lLastName] + + self.view.endEditing(true) + AuthorizationAPIManager.defaultAuthorization.signUpWithEmail(params, success: { (response) -> Void in + SVProgressHUD.dismiss() + ShowOKAlert("Successfully logged in", onViewController: self) + }) { (task, error) -> Void in + SVProgressHUD.dismiss() + ShowOKAlert("Something went wrong", onViewController: self) + } + } + } + + func validateTextFields() -> Bool { + var validationState = true + self.firstNameValidationErrorLabel.hidden = true + self.lastNameValidationErrorLabel.hidden = true + self.emailValidationErrorLabel.hidden = true + self.passwordValidationErrorLabel.hidden = true + self.passwordConfiramtionValidationErrorLabel.hidden = true + + if self.firstNameTextField.text?.isEmpty == true { + self.firstNameValidationErrorLabel.hidden = false + self.firstNameValidationErrorLabel.text = "Please enter your First Name" + validationState = false + } + if self.lastNameTextField.text?.isEmpty == true { + self.lastNameValidationErrorLabel.hidden = false + self.lastNameValidationErrorLabel.text = "Please enter your Last Name" + validationState = false + } + + if self.passwordTextField.text?.isEmpty == true { + self.passwordValidationErrorLabel.hidden = false + self.passwordValidationErrorLabel.text = "Password is empty" + validationState = false + } + if self.passwordTextField.text != self.passwordConfiramtionTextField.text { + self.passwordConfiramtionValidationErrorLabel.hidden = false + self.passwordConfiramtionValidationErrorLabel.text = "Passwords must be equal" + validationState = false + } + if self.emailTextField.text?.fs_emailValidate() == false{ + self.emailValidationErrorLabel.hidden = false + self.emailValidationErrorLabel.text = "Email is incorrect" + validationState = false + } + if validationState == false { + self.scrollView.setContentOffset(CGPointMake(0, 0), animated: true) + } + + return validationState + } + + @IBAction func signUpWithFacebook(sender: AnyObject) { + self.dismissViewControllerAnimated(true, completion: nil) + } + + @IBAction func signUpWithGoogle(sender: AnyObject) { + self.dismissViewControllerAnimated(true, completion: nil) + } + + @IBAction func showSignIn(sender: AnyObject) { + let vc = self.storyboard?.instantiateViewControllerWithIdentifier("SignIn") as! SignUpViewController + vc.mode = .SignIn + self.presentViewController(vc, animated: true, completion: nil) + } + +} + +extension SignUpWithEmailViewController { + + + func fs_keyboardScrollSupportKeyboardWillShow (notif: NSNotification) { + + guard let scrollView = self.fs_keyboardScrollSupportScrollView else {return} + + guard let info = notif.userInfo else {return} + guard let value = info[UIKeyboardFrameEndUserInfoKey] as? NSValue else {return} + + let keyboardFrame = value.CGRectValue() + let contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardFrame.height, 0.0) + + scrollView.contentInset = contentInsets + scrollView.scrollIndicatorInsets = contentInsets + + // If active text field is hidden by keyboard, scroll it so it's visible + // Your app might not need or want this behavior. + guard let activeField = self.fs_keyboardScrollSupportActiveField else {return} + + // By default activeField must be subview of the scrollView + guard let superview = activeField.superview else {return} + guard superview == scrollView else {return} + + var viewRect = self.view.frame + viewRect.size.height -= keyboardFrame.height + + let convertedRect = superview.convertRect(activeField.frame, toView: self.view) + + if !CGRectContainsPoint(viewRect, convertedRect.origin) { + scrollView.scrollRectToVisible(activeField.frame, animated: true) + } + } + + func fs_keyboardScrollSupportKeyboardWillHide (notif: NSNotification) { + + guard let scrollView = self.fs_keyboardScrollSupportScrollView else {return} + + let contentInsets = UIEdgeInsetsZero + scrollView.contentInset = contentInsets + scrollView.scrollIndicatorInsets = contentInsets + } +} + diff --git a/Autorization:Registration Example/Authorization-module/StartViewController.swift b/Autorization:Registration Example/Authorization-module/StartViewController.swift new file mode 100644 index 0000000..7b2bb42 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/StartViewController.swift @@ -0,0 +1,47 @@ +// +// StartViewController.swift +// Fuhwe +// +// Created by Nikita Asabin on 08.02.16. +// Copyright © 2016 Flatstack. All rights reserved. +// + +import UIKit + +class StartViewController: UIViewController { + + @IBOutlet weak var signInButton: UIButton! + @IBOutlet weak var signUpButton: UIButton! + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + @IBAction func signUp(sender: AnyObject) { + guard let vc = self.storyboard?.instantiateViewControllerWithIdentifier("SignUp") as? SignUpViewController else {return} + vc.mode = .SignUp + self.presentViewController(vc, animated: true, completion: nil) + } + + @IBAction func signIn(sender: AnyObject) { + guard let vc = self.storyboard?.instantiateViewControllerWithIdentifier("SignIn") as? SignUpViewController else {return} + vc.mode = .SignIn + self.presentViewController(vc, animated: true, completion: nil) + } + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/Autorization:Registration Example/Authorization-module/ViewController.swift b/Autorization:Registration Example/Authorization-module/ViewController.swift new file mode 100644 index 0000000..ff4f923 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/ViewController.swift @@ -0,0 +1,26 @@ +// +// ViewController.swift +// Authorization-module +// +// Created by Kruperfone on 13.02.15. +// Copyright (c) 2015 Flatstack. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + @IBOutlet weak var label: UILabel! + + override func viewDidLoad() { + super.viewDidLoad() + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + } + + @IBAction func tapShowAlert(sender: AnyObject) { + UIAlertView(title: nil, message: "Press OK", delegate: nil, cancelButtonTitle: "OK").show() + } +} diff --git a/Autorization:Registration Example/Authorization-module/ru.lproj/Main_Storyboard.strings b/Autorization:Registration Example/Authorization-module/ru.lproj/Main_Storyboard.strings new file mode 100644 index 0000000..d2b4d22 --- /dev/null +++ b/Autorization:Registration Example/Authorization-module/ru.lproj/Main_Storyboard.strings @@ -0,0 +1,12 @@ +/*Use this to generate new strings files - + ibtool Base.lproj/Main.storyboard --generate-strings-file ~/Desktop/str.strings + */ + +/* Class = "UIButton"; normalTitle = "Tap to show alert"; ObjectID = "Eky-89-Wjw"; */ +"Eky-89-Wjw.normalTitle" = "Tap to show alert"; + +/* Class = "UILabel"; accessibilityLabel = "Hello World!"; ObjectID = "LaI-Mr-U2B"; */ +"LaI-Mr-U2B.accessibilityLabel" = "Hello World!"; + +/* Class = "UILabel"; text = "Hello World!"; ObjectID = "LaI-Mr-U2B"; */ +"LaI-Mr-U2B.text" = "Hello World!"; diff --git a/Autorization:Registration Example/Authorization-moduleTests/FSTestHelpers.swift b/Autorization:Registration Example/Authorization-moduleTests/FSTestHelpers.swift new file mode 100644 index 0000000..7441a23 --- /dev/null +++ b/Autorization:Registration Example/Authorization-moduleTests/FSTestHelpers.swift @@ -0,0 +1,42 @@ +// +// FSTestHelpers.swift +// Adme +// +// Created by Kruperfone on 21.09.15. +// Copyright © 2015 Flatstack. All rights reserved. +// + +import Foundation + +enum TestingMode: String { + case Unit = "Unit" + case UI = "UI" + + init () { + let environments = NSProcessInfo.processInfo().environment + guard let modeString = environments["Testing"] else { + fatalError("Testing mode not defined") + } + + switch modeString { + case TestingMode.Unit.rawValue: + self = .Unit + + case TestingMode.UI.rawValue: + self = .UI + + default: + fatalError("Testing mode is wrong") + } + } +} + +func HasLaunchArgument (argument: String) -> Bool { + let arguments = NSProcessInfo.processInfo().arguments + return arguments.contains(argument) +} + +func GetEnvironment (key: String) -> String? { + let environments = NSProcessInfo.processInfo().environment + return environments[key] +} diff --git a/Autorization:Registration Example/Authorization-moduleTests/Info.plist b/Autorization:Registration Example/Authorization-moduleTests/Info.plist new file mode 100644 index 0000000..ba72822 --- /dev/null +++ b/Autorization:Registration Example/Authorization-moduleTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Autorization:Registration Example/Authorization-moduleTests/Swift_BaseTests.swift b/Autorization:Registration Example/Authorization-moduleTests/Swift_BaseTests.swift new file mode 100644 index 0000000..cd02137 --- /dev/null +++ b/Autorization:Registration Example/Authorization-moduleTests/Swift_BaseTests.swift @@ -0,0 +1,36 @@ +// +// Swift_BaseTests.swift +// Authorization-moduleTests +// +// Created by Kruperfone on 22.09.15. +// Copyright © 2015 Flatstack. All rights reserved. +// + +import XCTest +@testable import Swift_Base + +class Swift_BaseTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +// func testPerformanceExample() { +// // This is an example of a performance test case. +// self.measureBlock { +// // Put the code you want to measure the time of here. +// } +// } + +} diff --git a/Autorization:Registration Example/Authorization-moduleUITests/Info.plist b/Autorization:Registration Example/Authorization-moduleUITests/Info.plist new file mode 100644 index 0000000..ba72822 --- /dev/null +++ b/Autorization:Registration Example/Authorization-moduleUITests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Autorization:Registration Example/Authorization-moduleUITests/Swift_BaseUITests.swift b/Autorization:Registration Example/Authorization-moduleUITests/Swift_BaseUITests.swift new file mode 100644 index 0000000..c8e51ae --- /dev/null +++ b/Autorization:Registration Example/Authorization-moduleUITests/Swift_BaseUITests.swift @@ -0,0 +1,45 @@ +// +// Swift_BaseUITests.swift +// Authorization-moduleUITests +// +// Created by Nikita Asabin on 12.01.16. +// Copyright © 2016 Flatstack. All rights reserved. +// + + +@testable import Swift_Base + +import XCTest + +class Swift_BaseUITests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + let app = XCUIApplication() + app.launchEnvironment = ["Testing":"UI"] + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + app.launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + + let app = XCUIApplication() + app.buttons["Tap to show alert"].tap() + app.alerts.collectionViews.buttons["OK"].tap() + + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/FBSDKCoreKit b/Autorization:Registration Example/FBSDKCoreKit.framework/FBSDKCoreKit new file mode 100644 index 0000000..e027637 Binary files /dev/null and b/Autorization:Registration Example/FBSDKCoreKit.framework/FBSDKCoreKit differ diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKAccessToken.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKAccessToken.h new file mode 100644 index 0000000..4ed0656 --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKAccessToken.h @@ -0,0 +1,166 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#import +#import +#import + +/*! + @abstract Notification indicating that the `currentAccessToken` has changed. + @discussion the userInfo dictionary of the notification will contain keys + `FBSDKAccessTokenChangeOldKey` and + `FBSDKAccessTokenChangeNewKey`. + */ +FBSDK_EXTERN NSString *const FBSDKAccessTokenDidChangeNotification; + +/*! + @abstract A key in the notification's userInfo that will be set + if and only if the user ID changed between the old and new tokens. + @discussion Token refreshes can occur automatically with the SDK + which do not change the user. If you're only interested in user + changes (such as logging out), you should check for the existence + of this key. The value is a NSNumber with a boolValue. + + On a fresh start of the app where the SDK reads in the cached value + of an access token, this key will also exist since the access token + is moving from a null state (no user) to a non-null state (user). + */ +FBSDK_EXTERN NSString *const FBSDKAccessTokenDidChangeUserID; + +/* + @abstract key in notification's userInfo object for getting the old token. + @discussion If there was no old token, the key will not be present. + */ +FBSDK_EXTERN NSString *const FBSDKAccessTokenChangeOldKey; + +/* + @abstract key in notification's userInfo object for getting the new token. + @discussion If there is no new token, the key will not be present. + */ +FBSDK_EXTERN NSString *const FBSDKAccessTokenChangeNewKey; + + +/*! + @class FBSDKAccessToken + @abstract Represents an immutable access token for using Facebook services. + */ +@interface FBSDKAccessToken : NSObject + +/*! + @abstract Returns the app ID. + */ +@property (readonly, copy, nonatomic) NSString *appID; + +/*! + @abstract Returns the known declined permissions. + */ +@property (readonly, copy, nonatomic) NSSet *declinedPermissions; + +/*! + @abstract Returns the expiration date. + */ +@property (readonly, copy, nonatomic) NSDate *expirationDate; + +/*! + @abstract Returns the known granted permissions. + */ +@property (readonly, copy, nonatomic) NSSet *permissions; + +/*! + @abstract Returns the date the token was last refreshed. +*/ +@property (readonly, copy, nonatomic) NSDate *refreshDate; + +/*! + @abstract Returns the opaque token string. + */ +@property (readonly, copy, nonatomic) NSString *tokenString; + +/*! + @abstract Returns the user ID. + */ +@property (readonly, copy, nonatomic) NSString *userID; + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/*! + @abstract Initializes a new instance. + @param tokenString the opaque token string. + @param permissions the granted permissions. Note this is converted to NSSet and is only + an NSArray for the convenience of literal syntax. + @param declinedPermissions the declined permissions. Note this is converted to NSSet and is only + an NSArray for the convenience of literal syntax. + @param appID the app ID. + @param userID the user ID. + @param expirationDate the optional expiration date (defaults to distantFuture). + @param refreshDate the optional date the token was last refreshed (defaults to today). + @discussion This initializer should only be used for advanced apps that + manage tokens explicitly. Typical login flows only need to use `FBSDKLoginManager` + along with `+currentAccessToken`. + */ +- (instancetype)initWithTokenString:(NSString *)tokenString + permissions:(NSArray *)permissions + declinedPermissions:(NSArray *)declinedPermissions + appID:(NSString *)appID + userID:(NSString *)userID + expirationDate:(NSDate *)expirationDate + refreshDate:(NSDate *)refreshDate +NS_DESIGNATED_INITIALIZER; + +/*! + @abstract Convenience getter to determine if a permission has been granted + @param permission The permission to check. + */ +- (BOOL)hasGranted:(NSString *)permission; + +/*! + @abstract Compares the receiver to another FBSDKAccessToken + @param token The other token + @return YES if the receiver's values are equal to the other token's values; otherwise NO + */ +- (BOOL)isEqualToAccessToken:(FBSDKAccessToken *)token; + +/*! + @abstract Returns the "global" access token that represents the currently logged in user. + @discussion The `currentAccessToken` is a convenient representation of the token of the + current user and is used by other SDK components (like `FBSDKLoginManager`). + */ ++ (FBSDKAccessToken *)currentAccessToken; + +/*! + @abstract Sets the "global" access token that represents the currently logged in user. + @param token The access token to set. + @discussion This will broadcast a notification and save the token to the app keychain. + */ ++ (void)setCurrentAccessToken:(FBSDKAccessToken *)token; + +/*! + @abstract Refresh the current access token's permission state and extend the token's expiration date, + if possible. + @param completionHandler an optional callback handler that can surface any errors related to permission refreshing. + @discussion On a successful refresh, the currentAccessToken will be updated so you typically only need to + observe the `FBSDKAccessTokenDidChangeNotification` notification. + + If a token is already expired, it cannot be refreshed. + */ ++ (void)refreshCurrentAccessToken:(FBSDKGraphRequestHandler)completionHandler; + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKAppEvents.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKAppEvents.h new file mode 100644 index 0000000..9b5baab --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKAppEvents.h @@ -0,0 +1,499 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#import "FBSDKMacros.h" + +@class FBSDKAccessToken; +@class FBSDKGraphRequest; + +/*! @abstract NSNotificationCenter name indicating a result of a failed log flush attempt. The posted object will be an NSError instance. */ +FBSDK_EXTERN NSString *const FBSDKAppEventsLoggingResultNotification; + +/*! @abstract optional plist key ("FacebookLoggingOverrideAppID") for setting `loggingOverrideAppID` */ +FBSDK_EXTERN NSString *const FBSDKAppEventsOverrideAppIDBundleKey; + +/*! + + @typedef NS_ENUM (NSUInteger, FBSDKAppEventsFlushBehavior) + + @abstract Specifies when `FBSDKAppEvents` sends log events to the server. + + */ +typedef NS_ENUM(NSUInteger, FBSDKAppEventsFlushBehavior) +{ + + /*! Flush automatically: periodically (once a minute or every 100 logged events) and always at app reactivation. */ + FBSDKAppEventsFlushBehaviorAuto = 0, + + /*! Only flush when the `flush` method is called. When an app is moved to background/terminated, the + events are persisted and re-established at activation, but they will only be written with an + explicit call to `flush`. */ + FBSDKAppEventsFlushBehaviorExplicitOnly, + +}; + +/*! + @methodgroup Predefined event names for logging events common to many apps. Logging occurs through the `logEvent` family of methods on `FBSDKAppEvents`. + Common event parameters are provided in the `FBSDKAppEventsParameterNames*` constants. + */ + +/*! Log this event when the user has achieved a level in the app. */ +FBSDK_EXTERN NSString *const FBSDKAppEventNameAchievedLevel; + +/*! Log this event when the user has entered their payment info. */ +FBSDK_EXTERN NSString *const FBSDKAppEventNameAddedPaymentInfo; + +/*! Log this event when the user has added an item to their cart. The valueToSum passed to logEvent should be the item's price. */ +FBSDK_EXTERN NSString *const FBSDKAppEventNameAddedToCart; + +/*! Log this event when the user has added an item to their wishlist. The valueToSum passed to logEvent should be the item's price. */ +FBSDK_EXTERN NSString *const FBSDKAppEventNameAddedToWishlist; + +/*! Log this event when a user has completed registration with the app. */ +FBSDK_EXTERN NSString *const FBSDKAppEventNameCompletedRegistration; + +/*! Log this event when the user has completed a tutorial in the app. */ +FBSDK_EXTERN NSString *const FBSDKAppEventNameCompletedTutorial; + +/*! Log this event when the user has entered the checkout process. The valueToSum passed to logEvent should be the total price in the cart. */ +FBSDK_EXTERN NSString *const FBSDKAppEventNameInitiatedCheckout; + +/*! Log this event when the user has rated an item in the app. The valueToSum passed to logEvent should be the numeric rating. */ +FBSDK_EXTERN NSString *const FBSDKAppEventNameRated; + +/*! Log this event when a user has performed a search within the app. */ +FBSDK_EXTERN NSString *const FBSDKAppEventNameSearched; + +/*! Log this event when the user has spent app credits. The valueToSum passed to logEvent should be the number of credits spent. */ +FBSDK_EXTERN NSString *const FBSDKAppEventNameSpentCredits; + +/*! Log this event when the user has unlocked an achievement in the app. */ +FBSDK_EXTERN NSString *const FBSDKAppEventNameUnlockedAchievement; + +/*! Log this event when a user has viewed a form of content in the app. */ +FBSDK_EXTERN NSString *const FBSDKAppEventNameViewedContent; + +/*! + @methodgroup Predefined event name parameters for common additional information to accompany events logged through the `logEvent` family + of methods on `FBSDKAppEvents`. Common event names are provided in the `FBAppEventName*` constants. + */ + +/*! Parameter key used to specify an ID for the specific piece of content being logged about. Could be an EAN, article identifier, etc., depending on the nature of the app. */ +FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameContentID; + +/*! Parameter key used to specify a generic content type/family for the logged event, e.g. "music", "photo", "video". Options to use will vary based upon what the app is all about. */ +FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameContentType; + +/*! Parameter key used to specify currency used with logged event. E.g. "USD", "EUR", "GBP". See ISO-4217 for specific values. One reference for these is . */ +FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameCurrency; + +/*! Parameter key used to specify a description appropriate to the event being logged. E.g., the name of the achievement unlocked in the `FBAppEventNameAchievementUnlocked` event. */ +FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameDescription; + +/*! Parameter key used to specify the level achieved in a `FBAppEventNameAchieved` event. */ +FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameLevel; + +/*! Parameter key used to specify the maximum rating available for the `FBAppEventNameRate` event. E.g., "5" or "10". */ +FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameMaxRatingValue; + +/*! Parameter key used to specify how many items are being processed for an `FBAppEventNameInitiatedCheckout` or `FBAppEventNamePurchased` event. */ +FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameNumItems; + +/*! Parameter key used to specify whether payment info is available for the `FBAppEventNameInitiatedCheckout` event. `FBSDKAppEventParameterValueYes` and `FBSDKAppEventParameterValueNo` are good canonical values to use for this parameter. */ +FBSDK_EXTERN NSString *const FBSDKAppEventParameterNamePaymentInfoAvailable; + +/*! Parameter key used to specify method user has used to register for the app, e.g., "Facebook", "email", "Twitter", etc */ +FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameRegistrationMethod; + +/*! Parameter key used to specify the string provided by the user for a search operation. */ +FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameSearchString; + +/*! Parameter key used to specify whether the activity being logged about was successful or not. `FBSDKAppEventParameterValueYes` and `FBSDKAppEventParameterValueNo` are good canonical values to use for this parameter. */ +FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameSuccess; + +/* + @methodgroup Predefined values to assign to event parameters that accompany events logged through the `logEvent` family + of methods on `FBSDKAppEvents`. Common event parameters are provided in the `FBSDKAppEventParameterName*` constants. + */ + +/*! Yes-valued parameter value to be used with parameter keys that need a Yes/No value */ +FBSDK_EXTERN NSString *const FBSDKAppEventParameterValueYes; + +/*! No-valued parameter value to be used with parameter keys that need a Yes/No value */ +FBSDK_EXTERN NSString *const FBSDKAppEventParameterValueNo; + + +/*! + + @class FBSDKAppEvents + + @abstract + Client-side event logging for specialized application analytics available through Facebook App Insights + and for use with Facebook Ads conversion tracking and optimization. + + @discussion + The `FBSDKAppEvents` static class has a few related roles: + + + Logging predefined and application-defined events to Facebook App Insights with a + numeric value to sum across a large number of events, and an optional set of key/value + parameters that define "segments" for this event (e.g., 'purchaserStatus' : 'frequent', or + 'gamerLevel' : 'intermediate') + + + Logging events to later be used for ads optimization around lifetime value. + + + Methods that control the way in which events are flushed out to the Facebook servers. + + Here are some important characteristics of the logging mechanism provided by `FBSDKAppEvents`: + + + Events are not sent immediately when logged. They're cached and flushed out to the Facebook servers + in a number of situations: + - when an event count threshold is passed (currently 100 logged events). + - when a time threshold is passed (currently 15 seconds). + - when an app has gone to background and is then brought back to the foreground. + + + Events will be accumulated when the app is in a disconnected state, and sent when the connection is + restored and one of the above 'flush' conditions are met. + + + The `FBSDKAppEvents` class is thread-safe in that events may be logged from any of the app's threads. + + + The developer can set the `flushBehavior` on `FBSDKAppEvents` to force the flushing of events to only + occur on an explicit call to the `flush` method. + + + The developer can turn on console debug output for event logging and flushing to the server by using + the `FBSDKLoggingBehaviorAppEvents` value in `[FBSettings setLoggingBehavior:]`. + + Some things to note when logging events: + + + There is a limit on the number of unique event names an app can use, on the order of 1000. + + There is a limit to the number of unique parameter names in the provided parameters that can + be used per event, on the order of 25. This is not just for an individual call, but for all + invocations for that eventName. + + Event names and parameter names (the keys in the NSDictionary) must be between 2 and 40 characters, and + must consist of alphanumeric characters, _, -, or spaces. + + The length of each parameter value can be no more than on the order of 100 characters. + + */ +@interface FBSDKAppEvents : NSObject + +/* + * Basic event logging + */ + +/*! + + @abstract + Log an event with just an eventName. + + @param eventName The name of the event to record. Limitations on number of events and name length + are given in the `FBSDKAppEvents` documentation. + + */ ++ (void)logEvent:(NSString *)eventName; + +/*! + + @abstract + Log an event with an eventName and a numeric value to be aggregated with other events of this name. + + @param eventName The name of the event to record. Limitations on number of events and name length + are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. + + @param valueToSum Amount to be aggregated into all events of this eventName, and App Insights will report + the cumulative and average value of this amount. + */ ++ (void)logEvent:(NSString *)eventName + valueToSum:(double)valueToSum; + + +/*! + + @abstract + Log an event with an eventName and a set of key/value pairs in the parameters dictionary. + Parameter limitations are described above. + + @param eventName The name of the event to record. Limitations on number of events and name construction + are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. + + @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must + be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of + parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names + are provided in `FBSDKAppEventParameterName*` constants. + */ ++ (void)logEvent:(NSString *)eventName + parameters:(NSDictionary *)parameters; + +/*! + + @abstract + Log an event with an eventName, a numeric value to be aggregated with other events of this name, + and a set of key/value pairs in the parameters dictionary. + + @param eventName The name of the event to record. Limitations on number of events and name construction + are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. + + @param valueToSum Amount to be aggregated into all events of this eventName, and App Insights will report + the cumulative and average value of this amount. + + @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must + be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of + parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names + are provided in `FBSDKAppEventParameterName*` constants. + + */ ++ (void)logEvent:(NSString *)eventName + valueToSum:(double)valueToSum + parameters:(NSDictionary *)parameters; + + +/*! + + @abstract + Log an event with an eventName, a numeric value to be aggregated with other events of this name, + and a set of key/value pairs in the parameters dictionary. Providing session lets the developer + target a particular . If nil is provided, then `[FBSession activeSession]` will be used. + + @param eventName The name of the event to record. Limitations on number of events and name construction + are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. + + @param valueToSum Amount to be aggregated into all events of this eventName, and App Insights will report + the cumulative and average value of this amount. Note that this is an NSNumber, and a value of `nil` denotes + that this event doesn't have a value associated with it for summation. + + @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must + be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of + parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names + are provided in `FBSDKAppEventParameterName*` constants. + + @param accessToken The optional access token to log the event as. + */ ++ (void)logEvent:(NSString *)eventName + valueToSum:(NSNumber *)valueToSum + parameters:(NSDictionary *)parameters + accessToken:(FBSDKAccessToken *)accessToken; + +/* + * Purchase logging + */ + +/*! + + @abstract + Log a purchase of the specified amount, in the specified currency. + + @param purchaseAmount Purchase amount to be logged, as expressed in the specified currency. This value + will be rounded to the thousandths place (e.g., 12.34567 becomes 12.346). + + @param currency Currency, is denoted as, e.g. "USD", "EUR", "GBP". See ISO-4217 for + specific values. One reference for these is . + + @discussion This event immediately triggers a flush of the `FBSDKAppEvents` event queue, unless the `flushBehavior` is set + to `FBSDKAppEventsFlushBehaviorExplicitOnly`. + + */ ++ (void)logPurchase:(double)purchaseAmount + currency:(NSString *)currency; + +/*! + + @abstract + Log a purchase of the specified amount, in the specified currency, also providing a set of + additional characteristics describing the purchase. + + @param purchaseAmount Purchase amount to be logged, as expressed in the specified currency.This value + will be rounded to the thousandths place (e.g., 12.34567 becomes 12.346). + + @param currency Currency, is denoted as, e.g. "USD", "EUR", "GBP". See ISO-4217 for + specific values. One reference for these is . + + @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must + be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of + parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names + are provided in `FBSDKAppEventParameterName*` constants. + + @discussion This event immediately triggers a flush of the `FBSDKAppEvents` event queue, unless the `flushBehavior` is set + to `FBSDKAppEventsFlushBehaviorExplicitOnly`. + + */ ++ (void)logPurchase:(double)purchaseAmount + currency:(NSString *)currency + parameters:(NSDictionary *)parameters; + +/*! + + @abstract + Log a purchase of the specified amount, in the specified currency, also providing a set of + additional characteristics describing the purchase, as well as an to log to. + + @param purchaseAmount Purchase amount to be logged, as expressed in the specified currency.This value + will be rounded to the thousandths place (e.g., 12.34567 becomes 12.346). + + @param currency Currency, is denoted as, e.g. "USD", "EUR", "GBP". See ISO-4217 for + specific values. One reference for these is . + + @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must + be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of + parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names + are provided in `FBSDKAppEventParameterName*` constants. + + @param accessToken The optional access token to log the event as. + + @discussion This event immediately triggers a flush of the `FBSDKAppEvents` event queue, unless the `flushBehavior` is set + to `FBSDKAppEventsFlushBehaviorExplicitOnly`. + + */ ++ (void)logPurchase:(double)purchaseAmount + currency:(NSString *)currency + parameters:(NSDictionary *)parameters + accessToken:(FBSDKAccessToken *)accessToken; + + +/* + * Push Notifications Logging + */ + +/*! + @abstract + Log an app event that tracks that the application was open via Push Notification. + + @param payload Notification payload received via `UIApplicationDelegate`. + */ ++ (void)logPushNotificationOpen:(NSDictionary *)payload; + +/*! + @abstract + Log an app event that tracks that a custom action was taken from a push notification. + + @param payload Notification payload received via `UIApplicationDelegate`. + @param action Name of the action that was taken. + */ ++ (void)logPushNotificationOpen:(NSDictionary *)payload action:(NSString *)action; + +/*! + + @abstract + Notifies the events system that the app has launched and, when appropriate, logs an "activated app" event. Should typically be placed in the + app delegates' `applicationDidBecomeActive:` method. + + This method also takes care of logging the event indicating the first time this app has been launched, which, among other things, is used to + track user acquisition and app install ads conversions. + + @discussion + `activateApp` will not log an event on every app launch, since launches happen every time the app is backgrounded and then foregrounded. + "activated app" events will be logged when the app has not been active for more than 60 seconds. This method also causes a "deactivated app" + event to be logged when sessions are "completed", and these events are logged with the session length, with an indication of how much + time has elapsed between sessions, and with the number of background/foreground interruptions that session had. This data + is all visible in your app's App Events Insights. + */ ++ (void)activateApp; + +/* + * Push Notifications Registration + */ + +/*! + @abstract + Sets a device token to register the current application installation for push notifications. + + @discussion + Sets a device token from `NSData` representation that you get from `UIApplicationDelegate.-application:didRegisterForRemoteNotificationsWithDeviceToken:`. + + @param deviceToken Device token data. + */ ++ (void)setPushNotificationsDeviceToken:(NSData *)deviceToken; + +/* + * Control over event batching/flushing + */ + +/*! + + @abstract + Get the current event flushing behavior specifying when events are sent back to Facebook servers. + */ ++ (FBSDKAppEventsFlushBehavior)flushBehavior; + +/*! + + @abstract + Set the current event flushing behavior specifying when events are sent back to Facebook servers. + + @param flushBehavior The desired `FBSDKAppEventsFlushBehavior` to be used. + */ ++ (void)setFlushBehavior:(FBSDKAppEventsFlushBehavior)flushBehavior; + +/*! + @abstract + Set the 'override' App ID for App Event logging. + + @discussion + In some cases, apps want to use one Facebook App ID for login and social presence and another + for App Event logging. (An example is if multiple apps from the same company share an app ID for login, but + want distinct logging.) By default, this value is `nil`, and defers to the `FBSDKAppEventsOverrideAppIDBundleKey` + plist value. If that's not set, it defaults to `[FBSDKSettings appID]`. + + This should be set before any other calls are made to `FBSDKAppEvents`. Thus, you should set it in your application + delegate's `application:didFinishLaunchingWithOptions:` delegate. + + @param appID The Facebook App ID to be used for App Event logging. + */ ++ (void)setLoggingOverrideAppID:(NSString *)appID; + +/*! + @abstract + Get the 'override' App ID for App Event logging. + + @see setLoggingOverrideAppID: + + */ ++ (NSString *)loggingOverrideAppID; + + +/*! + @abstract + Explicitly kick off flushing of events to Facebook. This is an asynchronous method, but it does initiate an immediate + kick off. Server failures will be reported through the NotificationCenter with notification ID `FBSDKAppEventsLoggingResultNotification`. + */ ++ (void)flush; + +/*! + @abstract + Creates a request representing the Graph API call to retrieve a Custom Audience "third party ID" for the app's Facebook user. + Callers will send this ID back to their own servers, collect up a set to create a Facebook Custom Audience with, + and then use the resultant Custom Audience to target ads. + + @param accessToken The access token to use to establish the user's identity for users logged into Facebook through this app. + If `nil`, then the `[FBSDKAccessToken currentAccessToken]` is used. + + @discussion + The JSON in the request's response will include an "custom_audience_third_party_id" key/value pair, with the value being the ID retrieved. + This ID is an encrypted encoding of the Facebook user's ID and the invoking Facebook app ID. + Multiple calls with the same user will return different IDs, thus these IDs cannot be used to correlate behavior + across devices or applications, and are only meaningful when sent back to Facebook for creating Custom Audiences. + + The ID retrieved represents the Facebook user identified in the following way: if the specified access token is valid, + the ID will represent the user associated with that token; otherwise the ID will represent the user logged into the + native Facebook app on the device. If there is no native Facebook app, no one is logged into it, or the user has opted out + at the iOS level from ad tracking, then a `nil` ID will be returned. + + This method returns `nil` if either the user has opted-out (via iOS) from Ad Tracking, the app itself has limited event usage + via the `[FBSDKSettings limitEventAndDataUsage]` flag, or a specific Facebook user cannot be identified. + */ ++ (FBSDKGraphRequest *)requestForCustomAudienceThirdPartyIDWithAccessToken:(FBSDKAccessToken *)accessToken; +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKAppLinkResolver.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKAppLinkResolver.h new file mode 100644 index 0000000..8e65e5b --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKAppLinkResolver.h @@ -0,0 +1,82 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +@class BFTask; + +// Check if Bolts.framework is available for import +#if __has_include() +// Import it if it's available +# import +#else +// Otherwise - redeclare BFAppLinkResolving protocol to resolve the problem of missing symbols +// Please note: Bolts.framework is still required for AppLink resolving to work, +// but this allows FBSDKCoreKit to weakly link Bolts.framework as well as this enables clang modulemaps to work. + +/*! + Implement this protocol to provide an alternate strategy for resolving + App Links that may include pre-fetching, caching, or querying for App Link + data from an index provided by a service provider. + */ +@protocol BFAppLinkResolving + +/*! + Asynchronously resolves App Link data for a given URL. + + @param url The URL to resolve into an App Link. + @returns A BFTask that will return a BFAppLink for the given URL. + */ +- (BFTask *)appLinkFromURLInBackground:(NSURL *)url; + +@end + +#endif + +/*! + @class FBSDKAppLinkResolver + + @abstract + Provides an implementation of the BFAppLinkResolving protocol that uses the Facebook App Link + Index API to resolve App Links given a URL. It also provides an additional helper method that can resolve + multiple App Links in a single call. + + @discussion + Usage of this type requires a client token. See `[FBSDKSettings setClientToken:]` and linking + Bolts.framework + */ +@interface FBSDKAppLinkResolver : NSObject + +/*! + @abstract Asynchronously resolves App Link data for multiple URLs. + + @param urls An array of NSURLs to resolve into App Links. + @returns A BFTask that will return dictionary mapping input NSURLs to their + corresponding BFAppLink. + + @discussion + You should set the client token before making this call. See `[FBSDKSettings setClientToken:]` + */ +- (BFTask *)appLinksFromURLsInBackground:(NSArray *)urls; + +/*! + @abstract Allocates and initializes a new instance of FBSDKAppLinkResolver. + */ ++ (instancetype)resolver; + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKAppLinkUtility.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKAppLinkUtility.h new file mode 100644 index 0000000..9892667 --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKAppLinkUtility.h @@ -0,0 +1,100 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +/*! + @abstract Describes the callback for fetchDeferredAppLink. + @param url the url representing the deferred App Link + @param error the error during the request, if any + + @discussion The url may also have a fb_click_time_utc query parameter that + represents when the click occurred that caused the deferred App Link to be created. + */ +typedef void (^FBSDKDeferredAppLinkHandler)(NSURL *url, NSError *error); + + +/*! + @abstract Describes the callback for fetchOrganicDeferredAppLink. + @param url the url representing the deferred App Link + */ +typedef void (^FBSDKDeferredAppInviteHandler)(NSURL *url); + + +/*! + @abstract Class containing App Links related utility methods. + */ +@interface FBSDKAppLinkUtility : NSObject + +/*! + @abstract + Call this method from the main thread to fetch deferred applink data if you use Mobile App + Engagement Ads (https://developers.facebook.com/docs/ads-for-apps/mobile-app-ads-engagement). + This may require a network round trip. If successful, the handler is invoked with the link + data (this will only return a valid URL once, and future calls will result in a nil URL + value in the callback). + + @param handler the handler to be invoked if there is deferred App Link data + + @discussion The handler may contain an NSError instance to capture any errors. In the + common case where there simply was no app link data, the NSError instance will be nil. + + This method should only be called from a location that occurs after any launching URL has + been processed (e.g., you should call this method from your application delegate's + applicationDidBecomeActive:). + */ ++ (void)fetchDeferredAppLink:(FBSDKDeferredAppLinkHandler)handler; + +/*! + @abstract Call this method from the main thread to fetch deferred deeplink for App Invites + Handler is called with deeplink url, if found, nil otherwise. + + @param handler Handler to be called when we fetch deeplink url. + + @return YES if async fetch process was started, NO if it failed to start. Note it returns NO + for versions < iOS 9. + + @discussion Call this method from the main thread to fetch deferred deeplink if you use App Invites. + This may require a network round trip. If successful, this will call the handler provided, with + deferred deeplink that was clicked by the user. If there is a error/timeout, handler will be called + with nil. + This method only works on iOS 9+ and returns NO otherwise. + This method should only be called from a location that occurs after any launching URL has + been processed (e.g., you should call this method from your application delegate's + didFinishLaunchingWithOptions:). + */ ++ (BOOL)fetchDeferredAppInvite:(FBSDKDeferredAppInviteHandler)handler; + +/* + @abstract Call this method to fetch promotion code from the url, if it's present. This function + requires Bolts framework. + + Note: This throws an exception if Bolts.framework is not linked. Add '[BFURL class]' in intialize method + of your AppDelegate. + + @param url App Link url that was passed to the app. + + @return Promotion code string. + + @discussion Call this method to fetch App Invite Promotion Code from applink if present. + This can be used to fetch the promotion code that was associated with the invite when it + was created. This method should be called with the url from the openURL method. +*/ ++ (NSString*)appInvitePromotionCodeFromURL:(NSURL*)url; + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKApplicationDelegate.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKApplicationDelegate.h new file mode 100644 index 0000000..857acd0 --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKApplicationDelegate.h @@ -0,0 +1,74 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +/*! + @class FBSDKApplicationDelegate + + @abstract + The FBSDKApplicationDelegate is designed to post process the results from Facebook Login + or Facebook Dialogs (or any action that requires switching over to the native Facebook + app or Safari). + + @discussion + The methods in this class are designed to mirror those in UIApplicationDelegate, and you + should call them in the respective methods in your AppDelegate implementation. + */ +@interface FBSDKApplicationDelegate : NSObject + +/*! + @abstract Gets the singleton instance. + */ ++ (instancetype)sharedInstance; + +/*! + @abstract + Call this method from the [UIApplicationDelegate application:openURL:sourceApplication:annotation:] method + of the AppDelegate for your app. It should be invoked for the proper processing of responses during interaction + with the native Facebook app or Safari as part of SSO authorization flow or Facebook dialogs. + + @param application The application as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. + + @param url The URL as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. + + @param sourceApplication The sourceApplication as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. + + @param annotation The annotation as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. + + @return YES if the url was intended for the Facebook SDK, NO if not. + */ +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation; + +/*! + @abstract + Call this method from the [UIApplicationDelegate application:didFinishLaunchingWithOptions:] method + of the AppDelegate for your app. It should be invoked for the proper use of the Facebook SDK. + + @param application The application as passed to [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. + + @param launchOptions The launchOptions as passed to [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. + + @return YES if the url was intended for the Facebook SDK, NO if not. + */ +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions; + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKButton.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKButton.h new file mode 100644 index 0000000..8132998 --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKButton.h @@ -0,0 +1,26 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +/*! + @abstract A base class for common SDK buttons. + */ +@interface FBSDKButton : UIButton + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKConstants.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKConstants.h new file mode 100644 index 0000000..8f4f157 --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKConstants.h @@ -0,0 +1,215 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#import + +/*! + @abstract The error domain for all errors from FBSDKCoreKit. + @discussion Error codes from the SDK in the range 0-99 are reserved for this domain. + */ +FBSDK_EXTERN NSString *const FBSDKErrorDomain; + +/*! + @typedef NS_ENUM(NSInteger, FBSDKErrorCode) + @abstract Error codes for FBSDKErrorDomain. + */ +typedef NS_ENUM(NSInteger, FBSDKErrorCode) +{ + /*! + @abstract Reserved. + */ + FBSDKReservedErrorCode = 0, + + /*! + @abstract The error code for errors from invalid encryption on incoming encryption URLs. + */ + FBSDKEncryptionErrorCode, + + /*! + @abstract The error code for errors from invalid arguments to SDK methods. + */ + FBSDKInvalidArgumentErrorCode, + + /*! + @abstract The error code for unknown errors. + */ + FBSDKUnknownErrorCode, + + /*! + @abstract A request failed due to a network error. Use NSUnderlyingErrorKey to retrieve + the error object from the NSURLConnection for more information. + */ + FBSDKNetworkErrorCode, + + /*! + @abstract The error code for errors encountered during an App Events flush. + */ + FBSDKAppEventsFlushErrorCode, + + /*! + @abstract An endpoint that returns a binary response was used with FBSDKGraphRequestConnection. + @discussion Endpoints that return image/jpg, etc. should be accessed using NSURLRequest + */ + FBSDKGraphRequestNonTextMimeTypeReturnedErrorCode, + + /*! + @abstract The operation failed because the server returned an unexpected response. + @discussion You can get this error if you are not using the most recent SDK, or you are accessing a version of the + Graph API incompatible with the current SDK. + */ + FBSDKGraphRequestProtocolMismatchErrorCode, + + /*! + @abstract The Graph API returned an error. + @discussion See below for useful userInfo keys (beginning with FBSDKGraphRequestError*) + */ + FBSDKGraphRequestGraphAPIErrorCode, + + /*! + @abstract The specified dialog configuration is not available. + @discussion This error may signify that the configuration for the dialogs has not yet been downloaded from the server + or that the dialog is unavailable. Subsequent attempts to use the dialog may succeed as the configuration is loaded. + */ + FBSDKDialogUnavailableErrorCode, + + /*! + @abstract Indicates an operation failed because a required access token was not found. + */ + FBSDKAccessTokenRequiredErrorCode, + + /*! + @abstract Indicates an app switch (typically for a dialog) failed because the destination app is out of date. + */ + FBSDKAppVersionUnsupportedErrorCode, + + /*! + @abstract Indicates an app switch to the browser (typically for a dialog) failed. + */ + FBSDKBrowserUnavailableErrorCode, + + /*! + @deprecated use FBSDKBrowserUnavailableErrorCode instead + */ + FBSDKBrowswerUnavailableErrorCode __attribute__ ((deprecated("use FBSDKBrowserUnavailableErrorCode instead"))) = FBSDKBrowserUnavailableErrorCode, +}; + +/*! + @typedef NS_ENUM(NSUInteger, FBSDKGraphRequestErrorCategory) + @abstract Describes the category of Facebook error. See `FBSDKGraphRequestErrorCategoryKey`. + */ +typedef NS_ENUM(NSUInteger, FBSDKGraphRequestErrorCategory) +{ + /*! The default error category that is not known to be recoverable. Check `FBSDKLocalizedErrorDescriptionKey` for a user facing message. */ + FBSDKGraphRequestErrorCategoryOther = 0, + /*! Indicates the error is temporary (such as server throttling). While a recoveryAttempter will be provided with the error instance, the attempt is guaranteed to succeed so you can simply retry the operation if you do not want to present an alert. */ + FBSDKGraphRequestErrorCategoryTransient = 1, + /*! Indicates the error can be recovered (such as requiring a login). A recoveryAttempter will be provided with the error instance that can take UI action. */ + FBSDKGraphRequestErrorCategoryRecoverable = 2 +}; + +/* + @methodgroup error userInfo keys + */ + +/*! + @abstract The userInfo key for the invalid collection for errors with FBSDKInvalidArgumentErrorCode. + @discussion If the invalid argument is a collection, the collection can be found with this key and the individual + invalid item can be found with FBSDKErrorArgumentValueKey. + */ +FBSDK_EXTERN NSString *const FBSDKErrorArgumentCollectionKey; + +/*! + @abstract The userInfo key for the invalid argument name for errors with FBSDKInvalidArgumentErrorCode. + */ +FBSDK_EXTERN NSString *const FBSDKErrorArgumentNameKey; + +/*! + @abstract The userInfo key for the invalid argument value for errors with FBSDKInvalidArgumentErrorCode. + */ +FBSDK_EXTERN NSString *const FBSDKErrorArgumentValueKey; + +/*! + @abstract The userInfo key for the message for developers in NSErrors that originate from the SDK. + @discussion The developer message will not be localized and is not intended to be presented within the app. + */ +FBSDK_EXTERN NSString *const FBSDKErrorDeveloperMessageKey; + +/*! + @abstract The userInfo key describing a localized description that can be presented to the user. + */ +FBSDK_EXTERN NSString *const FBSDKErrorLocalizedDescriptionKey; + +/*! + @abstract The userInfo key describing a localized title that can be presented to the user, used with `FBSDKLocalizedErrorDescriptionKey`. + */ +FBSDK_EXTERN NSString *const FBSDKErrorLocalizedTitleKey; + +/* + @methodgroup FBSDKGraphRequest error userInfo keys + */ + +/*! + @abstract The userInfo key describing the error category, for error recovery purposes. + @discussion See `FBSDKGraphErrorRecoveryProcessor` and `[FBSDKGraphRequest disableErrorRecovery]`. + */ +FBSDK_EXTERN NSString *const FBSDKGraphRequestErrorCategoryKey; + +/* + @abstract The userInfo key for the Graph API error code. + */ +FBSDK_EXTERN NSString *const FBSDKGraphRequestErrorGraphErrorCode; + +/* + @abstract The userInfo key for the Graph API error subcode. + */ +FBSDK_EXTERN NSString *const FBSDKGraphRequestErrorGraphErrorSubcode; + +/* + @abstract The userInfo key for the HTTP status code. + */ +FBSDK_EXTERN NSString *const FBSDKGraphRequestErrorHTTPStatusCodeKey; + +/* + @abstract The userInfo key for the raw JSON response. + */ +FBSDK_EXTERN NSString *const FBSDKGraphRequestErrorParsedJSONResponseKey; + +/*! + @abstract a formal protocol very similar to the informal protocol NSErrorRecoveryAttempting + */ +@protocol FBSDKErrorRecoveryAttempting + +/*! + @abstract attempt the recovery + @param error the error + @param recoveryOptionIndex the selected option index + @param delegate the delegate + @param didRecoverSelector the callback selector, see discussion. + @param contextInfo context info to pass back to callback selector, see discussion. + @discussion + Given that an error alert has been presented document-modally to the user, and the user has chosen one of the error's recovery options, attempt recovery from the error, and send the selected message to the specified delegate. The option index is an index into the error's array of localized recovery options. The method selected by didRecoverSelector must have the same signature as: + + - (void)didPresentErrorWithRecovery:(BOOL)didRecover contextInfo:(void *)contextInfo; + + The value passed for didRecover must be YES if error recovery was completely successful, NO otherwise. + */ +- (void)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo; + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKCopying.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKCopying.h new file mode 100644 index 0000000..f4ad767 --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKCopying.h @@ -0,0 +1,33 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +/*! + @abstract Extension protocol for NSCopying that adds the copy method, which is implemented on NSObject. + @discussion NSObject implicitly conforms to this protocol. + */ +@protocol FBSDKCopying + +/*! + @abstract Implemented by NSObject as a convenience to copyWithZone:. + @return A copy of the receiver. + */ +- (id)copy; + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKCoreKit.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKCoreKit.h new file mode 100644 index 0000000..523f85d --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKCoreKit.h @@ -0,0 +1,48 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#if !TARGET_OS_TV +#import +#import +#import +#import +#import +#import +#else +#import +#import +#endif + +#define FBSDK_VERSION_STRING @"4.12.0" +#define FBSDK_TARGET_PLATFORM_VERSION @"v2.6" diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKGraphErrorRecoveryProcessor.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKGraphErrorRecoveryProcessor.h new file mode 100644 index 0000000..7472fcc --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKGraphErrorRecoveryProcessor.h @@ -0,0 +1,97 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#import "FBSDKConstants.h" + +@class FBSDKGraphErrorRecoveryProcessor; +@class FBSDKGraphRequest; + +/*! + @abstract Defines a delegate for `FBSDKGraphErrorRecoveryProcessor`. + */ +@protocol FBSDKGraphErrorRecoveryProcessorDelegate + +/*! + @abstract Indicates the error recovery has been attempted. + @param processor the processor instance. + @param didRecover YES if the recovery was successful. + @param error the error that that was attempted to be recovered from. + */ +- (void)processorDidAttemptRecovery:(FBSDKGraphErrorRecoveryProcessor *)processor didRecover:(BOOL)didRecover error:(NSError *)error; + +@optional +/*! + @abstract Indicates the processor is about to process the error. + @param processor the processor instance. + @param error the error is about to be processed. + @discussion return NO if the processor should not process the error. For example, + if you want to prevent alerts of localized messages but otherwise perform retries and recoveries, + you could return NO for errors where userInfo[FBSDKGraphRequestErrorCategoryKey] equal to FBSDKGraphRequestErrorCategoryOther + */ +- (BOOL)processorWillProcessError:(FBSDKGraphErrorRecoveryProcessor *)processor error:(NSError *)error; + +@end + +/*! + @abstract Defines a type that can process Facebook NSErrors with best practices. + @discussion Facebook NSErrors can contain FBSDKErrorRecoveryAttempting instances to recover from errors, or + localized messages to present to the user. This class will process the instances as follows: + + 1. If the error is temporary as indicated by FBSDKGraphRequestErrorCategoryKey, assume the recovery succeeded and + notify the delegate. + 2. If a FBSDKErrorRecoveryAttempting instance is available, display an alert (dispatched to main thread) + with the recovery options and call the instance's [ attemptRecoveryFromError:optionIndex:...]. + 3. If a FBSDKErrorRecoveryAttempting is not available, check the userInfo for FBSDKLocalizedErrorDescriptionKey + and present that in an alert (dispatched to main thread). + + By default, FBSDKGraphRequests use this type to process errors and retry the request upon a successful + recovery. + + Note that Facebook recovery attempters can present UI or even cause app switches (such as to login). Any such + work is dispatched to the main thread (therefore your request handlers may then run on the main thread). + + Login recovery requires FBSDKLoginKit. Login will use FBSDKLoginBehaviorNative and will prompt the user + for all permissions last granted. If any are declined on the new request, the recovery is not successful but + the `[FBSDKAccessToken currentAccessToken]` might still have been updated. + . + */ +@interface FBSDKGraphErrorRecoveryProcessor : NSObject + +/*! + @abstract Gets the delegate. Note this is a strong reference, and is nil'ed out after recovery is complete. + */ +@property (nonatomic, strong, readonly) iddelegate; + +/*! + @abstract Attempts to process the error, return YES if the error can be processed. + @param error the error to process. + @param request the related request that may be reissued. + @param delegate the delegate that will be retained until recovery is complete. + */ +- (BOOL)processError:(NSError *)error request:(FBSDKGraphRequest *)request delegate:(id) delegate; + +/*! + @abstract The callback for FBSDKErrorRecoveryAttempting + @param didRecover if the recovery succeeded + @param contextInfo unused + */ +- (void)didPresentErrorWithRecovery:(BOOL)didRecover contextInfo:(void *)contextInfo; + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKGraphRequest.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKGraphRequest.h new file mode 100644 index 0000000..5ae03e2 --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKGraphRequest.h @@ -0,0 +1,120 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#import + +@class FBSDKAccessToken; + +/*! + @abstract Represents a request to the Facebook Graph API. + + @discussion `FBSDKGraphRequest` encapsulates the components of a request (the + Graph API path, the parameters, error recovery behavior) and should be + used in conjunction with `FBSDKGraphRequestConnection` to issue the request. + + Nearly all Graph APIs require an access token. Unless specified, the + `[FBSDKAccessToken currentAccessToken]` is used. Therefore, most requests + will require login first (see `FBSDKLoginManager` in FBSDKLoginKit.framework). + + A `- start` method is provided for convenience for single requests. + + By default, FBSDKGraphRequest will attempt to recover any errors returned from + Facebook. You can disable this via `disableErrorRecovery:`. + @see FBSDKGraphErrorRecoveryProcessor + */ +@interface FBSDKGraphRequest : NSObject + +/*! + @abstract Initializes a new instance that use use `[FBSDKAccessToken currentAccessToken]`. + @param graphPath the graph path (e.g., @"me"). + @param parameters the optional parameters dictionary. + */ +- (instancetype)initWithGraphPath:(NSString *)graphPath + parameters:(NSDictionary *)parameters; + +/*! + @abstract Initializes a new instance that use use `[FBSDKAccessToken currentAccessToken]`. + @param graphPath the graph path (e.g., @"me"). + @param parameters the optional parameters dictionary. + @param HTTPMethod the optional HTTP method. nil defaults to @"GET". + */ +- (instancetype)initWithGraphPath:(NSString *)graphPath + parameters:(NSDictionary *)parameters + HTTPMethod:(NSString *)HTTPMethod; + +/*! + @abstract Initializes a new instance. + @param graphPath the graph path (e.g., @"me"). + @param parameters the optional parameters dictionary. + @param tokenString the token string to use. Specifying nil will cause no token to be used. + @param version the optional Graph API version (e.g., @"v2.0"). nil defaults to FBSDK_TARGET_PLATFORM_VERSION. + @param HTTPMethod the optional HTTP method (e.g., @"POST"). nil defaults to @"GET". + */ +- (instancetype)initWithGraphPath:(NSString *)graphPath + parameters:(NSDictionary *)parameters + tokenString:(NSString *)tokenString + version:(NSString *)version + HTTPMethod:(NSString *)HTTPMethod +NS_DESIGNATED_INITIALIZER; + +/*! + @abstract The request parameters. + */ +@property (nonatomic, strong, readonly) NSMutableDictionary *parameters; + +/*! + @abstract The access token string used by the request. + */ +@property (nonatomic, copy, readonly) NSString *tokenString; + +/*! + @abstract The Graph API endpoint to use for the request, for example "me". + */ +@property (nonatomic, copy, readonly) NSString *graphPath; + +/*! + @abstract The HTTPMethod to use for the request, for example "GET" or "POST". + */ +@property (nonatomic, copy, readonly) NSString *HTTPMethod; + +/*! + @abstract The Graph API version to use (e.g., "v2.0") + */ +@property (nonatomic, copy, readonly) NSString *version; + +/*! + @abstract If set, disables the automatic error recovery mechanism. + @param disable whether to disable the automatic error recovery mechanism + @discussion By default, non-batched FBSDKGraphRequest instances will automatically try to recover + from errors by constructing a `FBSDKGraphErrorRecoveryProcessor` instance that + re-issues the request on successful recoveries. The re-issued request will call the same + handler as the receiver but may occur with a different `FBSDKGraphRequestConnection` instance. + + This will override [FBSDKSettings setGraphErrorRecoveryDisabled:]. + */ +- (void)setGraphErrorRecoveryDisabled:(BOOL)disable; + +/*! + @abstract Starts a connection to the Graph API. + @param handler The handler block to call when the request completes. + */ +- (FBSDKGraphRequestConnection *)startWithCompletionHandler:(FBSDKGraphRequestHandler)handler; + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKGraphRequestConnection.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKGraphRequestConnection.h new file mode 100644 index 0000000..17e6264 --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKGraphRequestConnection.h @@ -0,0 +1,325 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#import + +@class FBSDKGraphRequest; +@class FBSDKGraphRequestConnection; + +/*! + @typedef FBSDKGraphRequestHandler + + @abstract + A block that is passed to addRequest to register for a callback with the results of that + request once the connection completes. + + @discussion + Pass a block of this type when calling addRequest. This will be called once + the request completes. The call occurs on the UI thread. + + @param connection The `FBSDKGraphRequestConnection` that sent the request. + + @param result The result of the request. This is a translation of + JSON data to `NSDictionary` and `NSArray` objects. This + is nil if there was an error. + + @param error The `NSError` representing any error that occurred. + + */ +typedef void (^FBSDKGraphRequestHandler)(FBSDKGraphRequestConnection *connection, + id result, + NSError *error); + +/*! + @protocol + + @abstract + The `FBSDKGraphRequestConnectionDelegate` protocol defines the methods used to receive network + activity progress information from a . + */ +@protocol FBSDKGraphRequestConnectionDelegate + +@optional + +/*! + @method + + @abstract + Tells the delegate the request connection will begin loading + + @discussion + If the is created using one of the convenience factory methods prefixed with + start, the object returned from the convenience method has already begun loading and this method + will not be called when the delegate is set. + + @param connection The request connection that is starting a network request + */ +- (void)requestConnectionWillBeginLoading:(FBSDKGraphRequestConnection *)connection; + +/*! + @method + + @abstract + Tells the delegate the request connection finished loading + + @discussion + If the request connection completes without a network error occurring then this method is called. + Invocation of this method does not indicate success of every made, only that the + request connection has no further activity. Use the error argument passed to the FBSDKGraphRequestHandler + block to determine success or failure of each . + + This method is invoked after the completion handler for each . + + @param connection The request connection that successfully completed a network request + */ +- (void)requestConnectionDidFinishLoading:(FBSDKGraphRequestConnection *)connection; + +/*! + @method + + @abstract + Tells the delegate the request connection failed with an error + + @discussion + If the request connection fails with a network error then this method is called. The `error` + argument specifies why the network connection failed. The `NSError` object passed to the + FBSDKGraphRequestHandler block may contain additional information. + + @param connection The request connection that successfully completed a network request + @param error The `NSError` representing the network error that occurred, if any. May be nil + in some circumstances. Consult the `NSError` for the for reliable + failure information. + */ +- (void)requestConnection:(FBSDKGraphRequestConnection *)connection + didFailWithError:(NSError *)error; + +/*! + @method + + @abstract + Tells the delegate how much data has been sent and is planned to send to the remote host + + @discussion + The byte count arguments refer to the aggregated objects, not a particular . + + Like `NSURLConnection`, the values may change in unexpected ways if data needs to be resent. + + @param connection The request connection transmitting data to a remote host + @param bytesWritten The number of bytes sent in the last transmission + @param totalBytesWritten The total number of bytes sent to the remote host + @param totalBytesExpectedToWrite The total number of bytes expected to send to the remote host + */ +- (void)requestConnection:(FBSDKGraphRequestConnection *)connection + didSendBodyData:(NSInteger)bytesWritten + totalBytesWritten:(NSInteger)totalBytesWritten +totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite; + +@end + +/*! + @class FBSDKGraphRequestConnection + + @abstract + The `FBSDKGraphRequestConnection` represents a single connection to Facebook to service a request. + + @discussion + The request settings are encapsulated in a reusable object. The + `FBSDKGraphRequestConnection` object encapsulates the concerns of a single communication + e.g. starting a connection, canceling a connection, or batching requests. + + */ +@interface FBSDKGraphRequestConnection : NSObject + +/*! + @abstract + The delegate object that receives updates. + */ +@property (nonatomic, assign) id delegate; + +/*! + @abstract Gets or sets the timeout interval to wait for a response before giving up. + */ +@property (nonatomic) NSTimeInterval timeout; + +/*! + @abstract + The raw response that was returned from the server. (readonly) + + @discussion + This property can be used to inspect HTTP headers that were returned from + the server. + + The property is nil until the request completes. If there was a response + then this property will be non-nil during the FBSDKGraphRequestHandler callback. + */ +@property (nonatomic, retain, readonly) NSHTTPURLResponse *URLResponse; + +/*! + @methodgroup Class methods + */ + +/*! + @method + + @abstract + This method sets the default timeout on all FBSDKGraphRequestConnection instances. Defaults to 60 seconds. + + @param defaultConnectionTimeout The timeout interval. + */ ++ (void)setDefaultConnectionTimeout:(NSTimeInterval)defaultConnectionTimeout; + +/*! + @methodgroup Adding requests + */ + +/*! + @method + + @abstract + This method adds an object to this connection. + + @param request A request to be included in the round-trip when start is called. + @param handler A handler to call back when the round-trip completes or times out. + + @discussion + The completion handler is retained until the block is called upon the + completion or cancellation of the connection. + */ +- (void)addRequest:(FBSDKGraphRequest *)request + completionHandler:(FBSDKGraphRequestHandler)handler; + +/*! + @method + + @abstract + This method adds an object to this connection. + + @param request A request to be included in the round-trip when start is called. + + @param handler A handler to call back when the round-trip completes or times out. + The handler will be invoked on the main thread. + + @param name An optional name for this request. This can be used to feed + the results of one request to the input of another in the same + `FBSDKGraphRequestConnection` as described in + [Graph API Batch Requests]( https://developers.facebook.com/docs/reference/api/batch/ ). + + @discussion + The completion handler is retained until the block is called upon the + completion or cancellation of the connection. This request can be named + to allow for using the request's response in a subsequent request. + */ +- (void)addRequest:(FBSDKGraphRequest *)request + completionHandler:(FBSDKGraphRequestHandler)handler + batchEntryName:(NSString *)name; + +/*! + @method + + @abstract + This method adds an object to this connection. + + @param request A request to be included in the round-trip when start is called. + + @param handler A handler to call back when the round-trip completes or times out. + + @param batchParameters The optional dictionary of parameters to include for this request + as described in [Graph API Batch Requests]( https://developers.facebook.com/docs/reference/api/batch/ ). + Examples include "depends_on", "name", or "omit_response_on_success". + + @discussion + The completion handler is retained until the block is called upon the + completion or cancellation of the connection. This request can be named + to allow for using the request's response in a subsequent request. + */ +- (void)addRequest:(FBSDKGraphRequest *)request + completionHandler:(FBSDKGraphRequestHandler)handler + batchParameters:(NSDictionary *)batchParameters; + +/*! + @methodgroup Instance methods + */ + +/*! + @method + + @abstract + Signals that a connection should be logically terminated as the + application is no longer interested in a response. + + @discussion + Synchronously calls any handlers indicating the request was cancelled. Cancel + does not guarantee that the request-related processing will cease. It + does promise that all handlers will complete before the cancel returns. A call to + cancel prior to a start implies a cancellation of all requests associated + with the connection. + */ +- (void)cancel; + +/*! + @method + + @abstract + This method starts a connection with the server and is capable of handling all of the + requests that were added to the connection. + + @discussion By default, a connection is scheduled on the current thread in the default mode when it is created. + See `setDelegateQueue:` for other options. + + This method cannot be called twice for an `FBSDKGraphRequestConnection` instance. + */ +- (void)start; + +/*! + @abstract Determines the operation queue that is used to call methods on the connection's delegate. + @param queue The operation queue to use when calling delegate methods. + @discussion By default, a connection is scheduled on the current thread in the default mode when it is created. + You cannot reschedule a connection after it has started. + + This is very similar to `[NSURLConnection setDelegateQueue:]`. + */ +- (void)setDelegateQueue:(NSOperationQueue *)queue; + +/*! + @method + + @abstract + Overrides the default version for a batch request + + @discussion + The SDK automatically prepends a version part, such as "v2.0" to API paths in order to simplify API versioning + for applications. If you want to override the version part while using batch requests on the connection, call + this method to set the version for the batch request. + + @param version This is a string in the form @"v2.0" which will be used for the version part of an API path + */ +- (void)overrideVersionPartWith:(NSString *)version; + +@end + +/*! + @abstract The key in the result dictionary for requests to old versions of the Graph API + whose response is not a JSON object. + + @discussion When a request returns a non-JSON response (such as a "true" literal), that response + will be wrapped into a dictionary using this const as the key. This only applies for very few Graph API + prior to v2.1. + */ +FBSDK_EXTERN NSString *const FBSDKNonJSONResponseProperty; diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKGraphRequestDataAttachment.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKGraphRequestDataAttachment.h new file mode 100644 index 0000000..c179e29 --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKGraphRequestDataAttachment.h @@ -0,0 +1,52 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +/*! + @abstract A container class for data attachments so that additional metadata can be provided about the attachment. + */ +@interface FBSDKGraphRequestDataAttachment : NSObject + +/*! + @abstract Initializes the receiver with the attachment data and metadata. + @param data The attachment data (retained, not copied) + @param filename The filename for the attachment + @param contentType The content type for the attachment + */ +- (instancetype)initWithData:(NSData *)data + filename:(NSString *)filename + contentType:(NSString *)contentType +NS_DESIGNATED_INITIALIZER; + +/*! + @abstract The content type for the attachment. + */ +@property (nonatomic, copy, readonly) NSString *contentType; + +/*! + @abstract The attachment data. + */ +@property (nonatomic, strong, readonly) NSData *data; + +/*! + @abstract The filename for the attachment. + */ +@property (nonatomic, copy, readonly) NSString *filename; + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKMacros.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKMacros.h new file mode 100644 index 0000000..fd2e2ff --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKMacros.h @@ -0,0 +1,39 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#ifdef __cplusplus +#define FBSDK_EXTERN extern "C" __attribute__((visibility ("default"))) +#else +#define FBSDK_EXTERN extern __attribute__((visibility ("default"))) +#endif + +#define FBSDK_STATIC_INLINE static inline + +#define FBSDK_NO_DESIGNATED_INITIALIZER() \ +@throw [NSException exceptionWithName:NSInvalidArgumentException \ + reason:[NSString stringWithFormat:@"unrecognized selector sent to instance %p", self] \ + userInfo:nil] + +#define FBSDK_NOT_DESIGNATED_INITIALIZER(DESIGNATED_INITIALIZER) \ +@throw [NSException exceptionWithName:NSInvalidArgumentException \ + reason:[NSString stringWithFormat:@"Please use the designated initializer [%p %@]", \ + self, \ + NSStringFromSelector(@selector(DESIGNATED_INITIALIZER))] \ + userInfo:nil] diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKMutableCopying.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKMutableCopying.h new file mode 100644 index 0000000..621fac9 --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKMutableCopying.h @@ -0,0 +1,35 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#import + +/*! + @abstract Extension protocol for NSMutableCopying that adds the mutableCopy method, which is implemented on NSObject. + @discussion NSObject implicitly conforms to this protocol. + */ +@protocol FBSDKMutableCopying + +/*! + @abstract Implemented by NSObject as a convenience to mutableCopyWithZone:. + @return A mutable copy of the receiver. + */ +- (id)mutableCopy; + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKProfile.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKProfile.h new file mode 100644 index 0000000..0505ac5 --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKProfile.h @@ -0,0 +1,156 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import "FBSDKMacros.h" +#import "FBSDKProfilePictureView.h" + +/*! + @abstract Notification indicating that the `currentProfile` has changed. + @discussion the userInfo dictionary of the notification will contain keys + `FBSDKProfileChangeOldKey` and + `FBSDKProfileChangeNewKey`. + */ +FBSDK_EXTERN NSString *const FBSDKProfileDidChangeNotification; + +/* @abstract key in notification's userInfo object for getting the old profile. + @discussion If there was no old profile, the key will not be present. + */ +FBSDK_EXTERN NSString *const FBSDKProfileChangeOldKey; + +/* @abstract key in notification's userInfo object for getting the new profile. + @discussion If there is no new profile, the key will not be present. + */ +FBSDK_EXTERN NSString *const FBSDKProfileChangeNewKey; + +/*! + @abstract Represents an immutable Facebook profile + @discussion This class provides a global "currentProfile" instance to more easily + add social context to your application. When the profile changes, a notification is + posted so that you can update relevant parts of your UI and is persisted to NSUserDefaults. + + Typically, you will want to call `enableUpdatesOnAccessTokenChange:YES` so that + it automatically observes changes to the `[FBSDKAccessToken currentAccessToken]`. + + You can use this class to build your own `FBSDKProfilePictureView` or in place of typical requests to "/me". + */ +@interface FBSDKProfile : NSObject + +/*! + @abstract initializes a new instance. + @param userID the user ID + @param firstName the user's first name + @param middleName the user's middle name + @param lastName the user's last name + @param name the user's complete name + @param linkURL the link for this profile + @param refreshDate the optional date this profile was fetched. Defaults to [NSDate date]. + */ +- (instancetype)initWithUserID:(NSString *)userID + firstName:(NSString *)firstName + middleName:(NSString *)middleName + lastName:(NSString *)lastName + name:(NSString *)name + linkURL:(NSURL *)linkURL + refreshDate:(NSDate *)refreshDate NS_DESIGNATED_INITIALIZER; +/*! + @abstract The user id + */ +@property (nonatomic, readonly) NSString *userID; +/*! + @abstract The user's first name + */ +@property (nonatomic, readonly) NSString *firstName; +/*! + @abstract The user's middle name + */ +@property (nonatomic, readonly) NSString *middleName; +/*! + @abstract The user's last name + */ +@property (nonatomic, readonly) NSString *lastName; +/*! + @abstract The user's complete name + */ +@property (nonatomic, readonly) NSString *name; +/*! + @abstract A URL to the user's profile. + @discussion Consider using Bolts and `FBSDKAppLinkResolver` to resolve this + to an app link to link directly to the user's profile in the Facebook app. + */ +@property (nonatomic, readonly) NSURL *linkURL; + +/*! + @abstract The last time the profile data was fetched. + */ +@property (nonatomic, readonly) NSDate *refreshDate; + +/*! + @abstract Gets the current FBSDKProfile instance. + */ ++ (FBSDKProfile *)currentProfile; + +/*! + @abstract Sets the current instance and posts the appropriate notification if the profile parameter is different + than the receiver. + @param profile the profile to set + @discussion This persists the profile to NSUserDefaults. + */ ++ (void)setCurrentProfile:(FBSDKProfile *)profile; + +/*! + @abstract Indicates if `currentProfile` will automatically observe `FBSDKAccessTokenDidChangeNotification` notifications + @param enable YES is observing + @discussion If observing, this class will issue a graph request for public profile data when the current token's userID + differs from the current profile. You can observe `FBSDKProfileDidChangeNotification` for when the profile is updated. + + Note that if `[FBSDKAccessToken currentAccessToken]` is unset, the `currentProfile` instance remains. It's also possible + for `currentProfile` to return nil until the data is fetched. + */ ++ (void)enableUpdatesOnAccessTokenChange:(BOOL)enable; + +/*! + @abstract Loads the current profile and passes it to the completion block. + @param completion The block to be executed once the profile is loaded + @discussion If the profile is already loaded, this method will call the completion block synchronously, otherwise it + will begin a graph request to update `currentProfile` and then call the completion block when finished. + */ ++ (void)loadCurrentProfileWithCompletion:(void(^)(FBSDKProfile *profile, NSError *error))completion; + +/*! + @abstract A convenience method for returning a complete `NSURL` for retrieving the user's profile image. + @param mode The picture mode + @param size The height and width. This will be rounded to integer precision. + */ +- (NSURL *)imageURLForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size; + +/*! + @abstract A convenience method for returning a Graph API path for retrieving the user's profile image. + @deprecated use `imageURLForPictureMode:size:` instead + @discussion You can pass this to a `FBSDKGraphRequest` instance to download the image. + @param mode The picture mode + @param size The height and width. This will be rounded to integer precision. + */ +- (NSString *)imagePathForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size +__attribute__ ((deprecated("use imageURLForPictureMode:size: instead"))); + +/*! + @abstract Returns YES if the profile is equivalent to the receiver. + @param profile the profile to compare to. + */ +- (BOOL)isEqualToProfile:(FBSDKProfile *)profile; +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKProfilePictureView.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKProfilePictureView.h new file mode 100644 index 0000000..f1f64cb --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKProfilePictureView.h @@ -0,0 +1,59 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +/*! + @typedef FBSDKProfilePictureMode enum + @abstract Defines the aspect ratio mode for the source image of the profile picture. + */ +typedef NS_ENUM(NSUInteger, FBSDKProfilePictureMode) +{ + /*! + @abstract A square cropped version of the image will be included in the view. + */ + FBSDKProfilePictureModeSquare, + /*! + @abstract The original picture's aspect ratio will be used for the source image in the view. + */ + FBSDKProfilePictureModeNormal, +}; + +/*! + @abstract A view to display a profile picture. + */ +@interface FBSDKProfilePictureView : UIView + +/*! + @abstract The mode for the receiver to determine the aspect ratio of the source image. + */ +@property (nonatomic, assign) FBSDKProfilePictureMode pictureMode; + +/*! + @abstract The profile ID to show the picture for. + */ +@property (nonatomic, copy) NSString *profileID; + +/*! + @abstract Explicitly marks the receiver as needing to update the image. + @discussion This method is called whenever any properties that affect the source image are modified, but this can also + be used to trigger a manual update of the image if it needs to be re-downloaded. + */ +- (void)setNeedsImageUpdate; + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKSettings.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKSettings.h new file mode 100644 index 0000000..edc0040 --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKSettings.h @@ -0,0 +1,209 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#import + +/* + * Constants defining logging behavior. Use with <[FBSDKSettings setLoggingBehavior]>. + */ + +/*! Include access token in logging. */ +FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorAccessTokens; + +/*! Log performance characteristics */ +FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorPerformanceCharacteristics; + +/*! Log FBSDKAppEvents interactions */ +FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorAppEvents; + +/*! Log Informational occurrences */ +FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorInformational; + +/*! Log cache errors. */ +FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorCacheErrors; + +/*! Log errors from SDK UI controls */ +FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorUIControlErrors; + +/*! Log debug warnings from API response, i.e. when friends fields requested, but user_friends permission isn't granted. */ +FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorGraphAPIDebugWarning; + +/*! Log warnings from API response, i.e. when requested feature will be deprecated in next version of API. + Info is the lowest level of severity, using it will result in logging all previously mentioned levels. + */ +FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorGraphAPIDebugInfo; + +/*! Log errors from SDK network requests */ +FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorNetworkRequests; + +/*! Log errors likely to be preventable by the developer. This is in the default set of enabled logging behaviors. */ +FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorDeveloperErrors; + +@interface FBSDKSettings : NSObject + +/*! + @abstract Get the Facebook App ID used by the SDK. + @discussion If not explicitly set, the default will be read from the application's plist (FacebookAppID). + */ ++ (NSString *)appID; + +/*! + @abstract Set the Facebook App ID to be used by the SDK. + @param appID The Facebook App ID to be used by the SDK. + */ ++ (void)setAppID:(NSString *)appID; + +/*! + @abstract Get the default url scheme suffix used for sessions. + @discussion If not explicitly set, the default will be read from the application's plist (FacebookUrlSchemeSuffix). + */ ++ (NSString *)appURLSchemeSuffix; + +/*! + @abstract Set the app url scheme suffix used by the SDK. + @param appURLSchemeSuffix The url scheme suffix to be used by the SDK. + */ ++ (void)setAppURLSchemeSuffix:(NSString *)appURLSchemeSuffix; + +/*! + @abstract Retrieve the Client Token that has been set via [FBSDKSettings setClientToken]. + @discussion If not explicitly set, the default will be read from the application's plist (FacebookClientToken). + */ ++ (NSString *)clientToken; + +/*! + @abstract Sets the Client Token for the Facebook App. + @discussion This is needed for certain API calls when made anonymously, without a user-based access token. + @param clientToken The Facebook App's "client token", which, for a given appid can be found in the Security + section of the Advanced tab of the Facebook App settings found at + */ ++ (void)setClientToken:(NSString *)clientToken; + +/*! + @abstract A convenient way to toggle error recovery for all FBSDKGraphRequest instances created after this is set. + @param disableGraphErrorRecovery YES or NO. + */ ++ (void)setGraphErrorRecoveryDisabled:(BOOL)disableGraphErrorRecovery; + +/*! + @abstract Get the Facebook Display Name used by the SDK. + @discussion If not explicitly set, the default will be read from the application's plist (FacebookDisplayName). + */ ++ (NSString *)displayName; + +/*! + @abstract Set the default Facebook Display Name to be used by the SDK. + @discussion This should match the Display Name that has been set for the app with the corresponding Facebook App ID, + in the Facebook App Dashboard. + @param displayName The Facebook Display Name to be used by the SDK. + */ ++ (void)setDisplayName:(NSString *)displayName; + +/*! + @abstract Get the Facebook domain part. + @discussion If not explicitly set, the default will be read from the application's plist (FacebookDomainPart). + */ ++ (NSString *)facebookDomainPart; + +/*! + @abstract Set the subpart of the Facebook domain. + @discussion This can be used to change the Facebook domain (e.g. @"beta") so that requests will be sent to + graph.beta.facebook.com + @param facebookDomainPart The domain part to be inserted into facebook.com. + */ ++ (void)setFacebookDomainPart:(NSString *)facebookDomainPart; + +/*! + @abstract The quality of JPEG images sent to Facebook from the SDK. + @discussion If not explicitly set, the default is 0.9. + @see [UIImageJPEGRepresentation](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKitFunctionReference/#//apple_ref/c/func/UIImageJPEGRepresentation) */ ++ (CGFloat)JPEGCompressionQuality; + +/*! + @abstract Set the quality of JPEG images sent to Facebook from the SDK. + @param JPEGCompressionQuality The quality for JPEG images, expressed as a value from 0.0 to 1.0. + @see [UIImageJPEGRepresentation](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKitFunctionReference/#//apple_ref/c/func/UIImageJPEGRepresentation) */ ++ (void)setJPEGCompressionQuality:(CGFloat)JPEGCompressionQuality; + +/*! + @abstract + Gets whether data such as that generated through FBSDKAppEvents and sent to Facebook should be restricted from being used for other than analytics and conversions. Defaults to NO. This value is stored on the device and persists across app launches. + */ ++ (BOOL)limitEventAndDataUsage; + +/*! + @abstract + Sets whether data such as that generated through FBSDKAppEvents and sent to Facebook should be restricted from being used for other than analytics and conversions. Defaults to NO. This value is stored on the device and persists across app launches. + + @param limitEventAndDataUsage The desired value. + */ ++ (void)setLimitEventAndDataUsage:(BOOL)limitEventAndDataUsage; + +/*! + @abstract Retrieve the current iOS SDK version. + */ ++ (NSString *)sdkVersion; + +/*! + @abstract Retrieve the current Facebook SDK logging behavior. + */ ++ (NSSet *)loggingBehavior; + +/*! + @abstract Set the current Facebook SDK logging behavior. This should consist of strings defined as + constants with FBSDKLoggingBehavior*. + + @param loggingBehavior A set of strings indicating what information should be logged. If nil is provided, the logging + behavior is reset to the default set of enabled behaviors. Set to an empty set in order to disable all logging. + + @discussion You can also define this via an array in your app plist with key "FacebookLoggingBehavior" or add and remove individual values via enableLoggingBehavior: or disableLogginBehavior: + */ ++ (void)setLoggingBehavior:(NSSet *)loggingBehavior; + +/*! + @abstract Enable a particular Facebook SDK logging behavior. + + @param loggingBehavior The LoggingBehavior to enable. This should be a string defined as a constant with FBSDKLoggingBehavior*. + */ ++ (void)enableLoggingBehavior:(NSString *)loggingBehavior; + +/*! + @abstract Disable a particular Facebook SDK logging behavior. + + @param loggingBehavior The LoggingBehavior to disable. This should be a string defined as a constant with FBSDKLoggingBehavior*. + */ ++ (void)disableLoggingBehavior:(NSString *)loggingBehavior; + +/*! + @abstract Set the user defaults key used by legacy token caches. + + @param tokenInformationKeyName the key used by legacy token caches. + + @discussion Use this only if you customized FBSessionTokenCachingStrategy in v3.x of + the Facebook SDK for iOS. +*/ ++ (void)setLegacyUserDefaultTokenInformationKeyName:(NSString *)tokenInformationKeyName; + +/*! + @abstract Get the user defaults key used by legacy token caches. +*/ ++ (NSString *)legacyUserDefaultTokenInformationKeyName; + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKTestUsersManager.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKTestUsersManager.h new file mode 100644 index 0000000..7d2e0ac --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKTestUsersManager.h @@ -0,0 +1,102 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +@class FBSDKAccessToken; + +/*! + @typedef + + @abstract Callback block for returning an array of FBSDKAccessToken instances (and possibly `NSNull` instances); or an error. + */ +typedef void (^FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)(NSArray *tokens, NSError *error) ; + +/*! + @typedef + + @abstract Callback block for removing a test user. + */ +typedef void (^FBSDKTestUsersManagerRemoveTestAccountHandler)(NSError *error) ; + + +/*! + @class FBSDKTestUsersManager + @abstract Provides methods for managing test accounts for testing Facebook integration. + + @discussion Facebook allows developers to create test accounts for testing their applications' + Facebook integration (see https://developers.facebook.com/docs/test_users/). This class + simplifies use of these accounts for writing tests. It is not designed for use in + production application code. + + This class will make Graph API calls on behalf of your app to manage test accounts and requires + an app id and app secret. You will typically use this class to write unit or integration tests. + Make sure you NEVER include your app secret in your production app. + */ +@interface FBSDKTestUsersManager : NSObject + +/*! + @abstract construct or return the shared instance + @param appID the Facebook app id + @param appSecret the Facebook app secret + */ ++ (instancetype)sharedInstanceForAppID:(NSString *)appID appSecret:(NSString *)appSecret; + +/*! + @abstract retrieve FBSDKAccessToken instances for test accounts with the specific permissions. + @param arraysOfPermissions an array of permissions sets, such as @[ [NSSet setWithObject:@"email"], [NSSet setWithObject:@"user_birthday"]] + if you needed two test accounts with email and birthday permissions, respectively. You can pass in empty nested sets + if you need two arbitrary test accounts. For convenience, passing nil is treated as @[ [NSSet set] ] + for fetching a single test user. + @param createIfNotFound if YES, new test accounts are created if no test accounts existed that fit the permissions + requirement + @param handler the callback to invoke which will return an array of `FBAccessTokenData` instances or an `NSError`. + If param `createIfNotFound` is NO, the array may contain `[NSNull null]` instances. + + @discussion If you are requesting test accounts with differing number of permissions, try to order + `arrayOfPermissionsArrays` so that the most number of permissions come first to minimize creation of new + test accounts. + */ +- (void)requestTestAccountTokensWithArraysOfPermissions:(NSArray *)arraysOfPermissions + createIfNotFound:(BOOL)createIfNotFound + completionHandler:(FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)handler; + +/*! + @abstract add a test account with the specified permissions + @param permissions the set of permissions, e.g., [NSSet setWithObjects:@"email", @"user_friends"] + @param handler the callback handler + */ +- (void)addTestAccountWithPermissions:(NSSet *)permissions + completionHandler:(FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)handler; + +/*! + @abstract remove a test account for the given user id + @param userId the user id + @param handler the callback handler + */ +- (void)removeTestAccount:(NSString *)userId completionHandler:(FBSDKTestUsersManagerRemoveTestAccountHandler)handler; + +/*! + @abstract Make two test users friends with each other. + @param first the token of the first user + @param second the token of the second user + @param callback the callback handler + */ +- (void)makeFriendsWithFirst:(FBSDKAccessToken *)first second:(FBSDKAccessToken *)second callback:(void (^)(NSError *))callback; + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKUtility.h b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKUtility.h new file mode 100644 index 0000000..46c490b --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Headers/FBSDKUtility.h @@ -0,0 +1,55 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +/*! + @abstract Class to contain common utility methods. + */ +@interface FBSDKUtility : NSObject + +/*! + @abstract Parses a query string into a dictionary. + @param queryString The query string value. + @return A dictionary with the key/value pairs. + */ ++ (NSDictionary *)dictionaryWithQueryString:(NSString *)queryString; + +/*! + @abstract Constructs a query string from a dictionary. + @param dictionary The dictionary with key/value pairs for the query string. + @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. + @result Query string representation of the parameters. + */ ++ (NSString *)queryStringWithDictionary:(NSDictionary *)dictionary error:(NSError *__autoreleasing *)errorRef; + +/*! + @abstract Decodes a value from an URL. + @param value The value to decode. + @result The decoded value. + */ ++ (NSString *)URLDecode:(NSString *)value; + +/*! + @abstract Encodes a value for an URL. + @param value The value to encode. + @result The encoded value. + */ ++ (NSString *)URLEncode:(NSString *)value; + +@end diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Info.plist b/Autorization:Registration Example/FBSDKCoreKit.framework/Info.plist new file mode 100644 index 0000000..2a530ec Binary files /dev/null and b/Autorization:Registration Example/FBSDKCoreKit.framework/Info.plist differ diff --git a/Autorization:Registration Example/FBSDKCoreKit.framework/Modules/module.modulemap b/Autorization:Registration Example/FBSDKCoreKit.framework/Modules/module.modulemap new file mode 100644 index 0000000..bc59c1a --- /dev/null +++ b/Autorization:Registration Example/FBSDKCoreKit.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module FBSDKCoreKit { + umbrella header "FBSDKCoreKit.h" + + export * + module * { export * } +} diff --git a/Autorization:Registration Example/FBSDKLoginKit.framework/FBSDKLoginKit b/Autorization:Registration Example/FBSDKLoginKit.framework/FBSDKLoginKit new file mode 100644 index 0000000..9cbcbea Binary files /dev/null and b/Autorization:Registration Example/FBSDKLoginKit.framework/FBSDKLoginKit differ diff --git a/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginButton.h b/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginButton.h new file mode 100644 index 0000000..ef86b6c --- /dev/null +++ b/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginButton.h @@ -0,0 +1,128 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#import + +#import + +#import "FBSDKTooltipView.h" + +@protocol FBSDKLoginButtonDelegate; + +/*! + @typedef NS_ENUM(NSUInteger, FBSDKLoginButtonTooltipBehavior) + @abstract Indicates the desired login tooltip behavior. + */ +typedef NS_ENUM(NSUInteger, FBSDKLoginButtonTooltipBehavior) +{ + /*! The default behavior. The tooltip will only be displayed if + the app is eligible (determined by possible server round trip) */ + FBSDKLoginButtonTooltipBehaviorAutomatic = 0, + /*! Force display of the tooltip (typically for UI testing) */ + FBSDKLoginButtonTooltipBehaviorForceDisplay = 1, + /*! Force disable. In this case you can still exert more refined + control by manually constructing a `FBSDKLoginTooltipView` instance. */ + FBSDKLoginButtonTooltipBehaviorDisable = 2 +}; + +/*! + @abstract A button that initiates a log in or log out flow upon tapping. + @discussion `FBSDKLoginButton` works with `[FBSDKAccessToken currentAccessToken]` to + determine what to display, and automatically starts authentication when tapped (i.e., + you do not need to manually subscribe action targets). + + Like `FBSDKLoginManager`, you should make sure your app delegate is connected to + `FBSDKApplicationDelegate` in order for the button's delegate to receive messages. + + `FBSDKLoginButton` has a fixed height of @c 30 pixels, but you may change the width. `initWithFrame:CGRectZero` + will size the button to its minimum frame. +*/ +@interface FBSDKLoginButton : FBSDKButton + +/*! + @abstract The default audience to use, if publish permissions are requested at login time. + */ +@property (assign, nonatomic) FBSDKDefaultAudience defaultAudience; +/*! + @abstract Gets or sets the delegate. + */ +@property (weak, nonatomic) IBOutlet id delegate; +/*! + @abstract Gets or sets the login behavior to use + */ +@property (assign, nonatomic) FBSDKLoginBehavior loginBehavior; +/*! + @abstract The publish permissions to request. + + @discussion Use `defaultAudience` to specify the default audience to publish to. + Note this is converted to NSSet and is only + an NSArray for the convenience of literal syntax. + */ +@property (copy, nonatomic) NSArray *publishPermissions; +/*! + @abstract The read permissions to request. + + @discussion Note, that if read permissions are specified, then publish permissions should not be specified. This is converted to NSSet and is only + an NSArray for the convenience of literal syntax. + */ +@property (copy, nonatomic) NSArray *readPermissions; +/*! + @abstract Gets or sets the desired tooltip behavior. + */ +@property (assign, nonatomic) FBSDKLoginButtonTooltipBehavior tooltipBehavior; +/*! + @abstract Gets or sets the desired tooltip color style. + */ +@property (assign, nonatomic) FBSDKTooltipColorStyle tooltipColorStyle; + +@end + +/*! + @protocol + @abstract A delegate for `FBSDKLoginButton` + */ +@protocol FBSDKLoginButtonDelegate + +@required +/*! + @abstract Sent to the delegate when the button was used to login. + @param loginButton the sender + @param result The results of the login + @param error The error (if any) from the login + */ +- (void) loginButton:(FBSDKLoginButton *)loginButton +didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result + error:(NSError *)error; + +/*! + @abstract Sent to the delegate when the button was used to logout. + @param loginButton The button that was clicked. +*/ +- (void)loginButtonDidLogOut:(FBSDKLoginButton *)loginButton; + +@optional +/*! + @abstract Sent to the delegate when the button is about to login. + @param loginButton the sender + @return YES if the login should be allowed to proceed, NO otherwise + */ +- (BOOL) loginButtonWillLogin:(FBSDKLoginButton *)loginButton; + +@end diff --git a/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginConstants.h b/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginConstants.h new file mode 100644 index 0000000..100c09a --- /dev/null +++ b/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginConstants.h @@ -0,0 +1,75 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#import + +/*! + @abstract The error domain for all errors from FBSDKLoginKit + @discussion Error codes from the SDK in the range 300-399 are reserved for this domain. + */ +FBSDK_EXTERN NSString *const FBSDKLoginErrorDomain; + +/*! + @typedef NS_ENUM(NSInteger, FBSDKLoginErrorCode) + @abstract Error codes for FBSDKLoginErrorDomain. + */ +typedef NS_ENUM(NSInteger, FBSDKLoginErrorCode) +{ + /*! + @abstract Reserved. + */ + FBSDKLoginReservedErrorCode = 300, + /*! + @abstract The error code for unknown errors. + */ + FBSDKLoginUnknownErrorCode, + + /*! + @abstract The user's password has changed and must log in again + */ + FBSDKLoginPasswordChangedErrorCode, + /*! + @abstract The user must log in to their account on www.facebook.com to restore access + */ + FBSDKLoginUserCheckpointedErrorCode, + /*! + @abstract Indicates a failure to request new permissions because the user has changed. + */ + FBSDKLoginUserMismatchErrorCode, + /*! + @abstract The user must confirm their account with Facebook before logging in + */ + FBSDKLoginUnconfirmedUserErrorCode, + + /*! + @abstract The Accounts framework failed without returning an error, indicating the + app's slider in the iOS Facebook Settings (device Settings -> Facebook -> App Name) has + been disabled. + */ + FBSDKLoginSystemAccountAppDisabledErrorCode, + /*! + @abstract An error occurred related to Facebook system Account store + */ + FBSDKLoginSystemAccountUnavailableErrorCode, + /*! + @abstract The login response was missing a valid challenge string. + */ + FBSDKLoginBadChallengeString, +}; diff --git a/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginKit.h b/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginKit.h new file mode 100644 index 0000000..4723940 --- /dev/null +++ b/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginKit.h @@ -0,0 +1,25 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#import +#import +#import +#import +#import diff --git a/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginManager.h b/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginManager.h new file mode 100644 index 0000000..8555a7b --- /dev/null +++ b/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginManager.h @@ -0,0 +1,196 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import +#import +#import + +@class FBSDKLoginManagerLoginResult; + +/*! + @abstract Describes the call back to the FBSDKLoginManager + @param result the result of the authorization + @param error the authorization error, if any. + */ +typedef void (^FBSDKLoginManagerRequestTokenHandler)(FBSDKLoginManagerLoginResult *result, NSError *error); + + +/*! + @typedef FBSDKDefaultAudience enum + + @abstract + Passed to open to indicate which default audience to use for sessions that post data to Facebook. + + @discussion + Certain operations such as publishing a status or publishing a photo require an audience. When the user + grants an application permission to perform a publish operation, a default audience is selected as the + publication ceiling for the application. This enumerated value allows the application to select which + audience to ask the user to grant publish permission for. + */ +typedef NS_ENUM(NSUInteger, FBSDKDefaultAudience) +{ + /*! Indicates that the user's friends are able to see posts made by the application */ + FBSDKDefaultAudienceFriends = 0, + /*! Indicates that only the user is able to see posts made by the application */ + FBSDKDefaultAudienceOnlyMe, + /*! Indicates that all Facebook users are able to see posts made by the application */ + FBSDKDefaultAudienceEveryone, +}; + +/*! + @typedef FBSDKLoginBehavior enum + + @abstract + Passed to the \c FBSDKLoginManager to indicate how Facebook Login should be attempted. + + @discussion + Facebook Login authorizes the application to act on behalf of the user, using the user's + Facebook account. Usually a Facebook Login will rely on an account maintained outside of + the application, by the native Facebook application, the browser, or perhaps the device + itself. This avoids the need for a user to enter their username and password directly, and + provides the most secure and lowest friction way for a user to authorize the application to + interact with Facebook. + + The \c FBSDKLoginBehavior enum specifies which log-in methods may be used. The SDK + will determine the best behavior based on the current device (such as iOS version). + */ +typedef NS_ENUM(NSUInteger, FBSDKLoginBehavior) +{ + /*! + @abstract This is the default behavior, and indicates logging in through the native + Facebook app may be used. The SDK may still use Safari instead. + */ + FBSDKLoginBehaviorNative = 0, + /*! + @abstract Attempts log in through the Safari or SFSafariViewController, if available. + */ + FBSDKLoginBehaviorBrowser, + /*! + @abstract Attempts log in through the Facebook account currently signed in through + the device Settings. + @note If the account is not available to the app (either not configured by user or + as determined by the SDK) this behavior falls back to \c FBSDKLoginBehaviorNative. + */ + FBSDKLoginBehaviorSystemAccount, + /*! + @abstract Attempts log in through a modal \c UIWebView pop up + + @note This behavior is only available to certain types of apps. Please check the Facebook + Platform Policy to verify your app meets the restrictions. + */ + FBSDKLoginBehaviorWeb, +}; + +/*! + @abstract `FBSDKLoginManager` provides methods for logging the user in and out. + @discussion `FBSDKLoginManager` works directly with `[FBSDKAccessToken currentAccessToken]` and + sets the "currentAccessToken" upon successful authorizations (or sets `nil` in case of `logOut`). + + You should check `[FBSDKAccessToken currentAccessToken]` before calling logIn* to see if there is + a cached token available (typically in your viewDidLoad). + + If you are managing your own token instances outside of "currentAccessToken", you will need to set + "currentAccessToken" before calling logIn* to authorize further permissions on your tokens. + */ +@interface FBSDKLoginManager : NSObject + +/*! + @abstract the default audience. + @discussion you should set this if you intend to ask for publish permissions. + */ +@property (assign, nonatomic) FBSDKDefaultAudience defaultAudience; + +/*! + @abstract the login behavior + */ +@property (assign, nonatomic) FBSDKLoginBehavior loginBehavior; + +/*! + @deprecated use logInWithReadPermissions:fromViewController:handler: instead + */ +- (void)logInWithReadPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler +__attribute__ ((deprecated("use logInWithReadPermissions:fromViewController:handler: instead"))); + +/*! + @deprecated use logInWithPublishPermissions:fromViewController:handler: instead + */ +- (void)logInWithPublishPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler +__attribute__ ((deprecated("use logInWithPublishPermissions:fromViewController:handler: instead"))); + +/*! + @abstract Logs the user in or authorizes additional permissions. + @param permissions the optional array of permissions. Note this is converted to NSSet and is only + an NSArray for the convenience of literal syntax. + @param fromViewController the view controller to present from. If nil, the topmost view controller will be + automatically determined as best as possible. + @param handler the callback. + @discussion Use this method when asking for read permissions. You should only ask for permissions when they + are needed and explain the value to the user. You can inspect the result.declinedPermissions to also + provide more information to the user if they decline permissions. + + This method will present UI the user. You typically should check if `[FBSDKAccessToken currentAccessToken]` + already contains the permissions you need before asking to reduce unnecessary app switching. For example, + you could make that check at viewDidLoad. + */ +- (void)logInWithReadPermissions:(NSArray *)permissions + fromViewController:(UIViewController *)fromViewController + handler:(FBSDKLoginManagerRequestTokenHandler)handler; + +/*! + @abstract Logs the user in or authorizes additional permissions. + @param permissions the optional array of permissions. Note this is converted to NSSet and is only + an NSArray for the convenience of literal syntax. + @param fromViewController the view controller to present from. If nil, the topmost view controller will be + automatically determined as best as possible. + @param handler the callback. + @discussion Use this method when asking for publish permissions. You should only ask for permissions when they + are needed and explain the value to the user. You can inspect the result.declinedPermissions to also + provide more information to the user if they decline permissions. + + This method will present UI the user. You typically should check if `[FBSDKAccessToken currentAccessToken]` + already contains the permissions you need before asking to reduce unnecessary app switching. For example, + you could make that check at viewDidLoad. + */ +- (void)logInWithPublishPermissions:(NSArray *)permissions + fromViewController:(UIViewController *)fromViewController + handler:(FBSDKLoginManagerRequestTokenHandler)handler; + +/*! + @abstract Logs the user out + @discussion This calls [FBSDKAccessToken setCurrentAccessToken:nil] and [FBSDKProfile setCurrentProfile:nil]. + */ +- (void)logOut; + +/*! + @method + + @abstract Issues an asynchronous renewCredentialsForAccount call to the device's Facebook account store. + + @param handler The completion handler to call when the renewal is completed. This can be invoked on an arbitrary thread. + + @discussion This can be used to explicitly renew account credentials and is provided as a convenience wrapper around + `[ACAccountStore renewCredentialsForAccount:completion]`. Note the method will not issue the renewal call if the the + Facebook account has not been set on the device, or if access had not been granted to the account (though the handler + wil receive an error). + + If the `[FBSDKAccessToken currentAccessToken]` was from the account store, a succesful renewal will also set + a new "currentAccessToken". + */ ++ (void)renewSystemCredentials:(void (^)(ACAccountCredentialRenewResult result, NSError *error))handler; + +@end diff --git a/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginManagerLoginResult.h b/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginManagerLoginResult.h new file mode 100644 index 0000000..36a1af6 --- /dev/null +++ b/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginManagerLoginResult.h @@ -0,0 +1,62 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +@class FBSDKAccessToken; + +/*! + @abstract Describes the result of a login attempt. + */ +@interface FBSDKLoginManagerLoginResult : NSObject + +/*! + @abstract the access token. + */ +@property (copy, nonatomic) FBSDKAccessToken *token; + +/*! + @abstract whether the login was cancelled by the user. + */ +@property (readonly, nonatomic) BOOL isCancelled; + +/*! + @abstract the set of permissions granted by the user in the associated request. + @discussion inspect the token's permissions set for a complete list. + */ +@property (copy, nonatomic) NSSet *grantedPermissions; + +/*! + @abstract the set of permissions declined by the user in the associated request. + @discussion inspect the token's permissions set for a complete list. + */ +@property (copy, nonatomic) NSSet *declinedPermissions; + +/*! + @abstract Initializes a new instance. + @param token the access token + @param isCancelled whether the login was cancelled by the user + @param grantedPermissions the set of granted permissions + @param declinedPermissions the set of declined permissions + */ +- (instancetype)initWithToken:(FBSDKAccessToken *)token + isCancelled:(BOOL)isCancelled + grantedPermissions:(NSSet *)grantedPermissions + declinedPermissions:(NSSet *)declinedPermissions +NS_DESIGNATED_INITIALIZER; +@end diff --git a/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginTooltipView.h b/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginTooltipView.h new file mode 100644 index 0000000..e6a9411 --- /dev/null +++ b/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKLoginTooltipView.h @@ -0,0 +1,93 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#import + +@protocol FBSDKLoginTooltipViewDelegate; + +/*! + @class FBSDKLoginTooltipView + + @abstract Represents a tooltip to be displayed next to a Facebook login button + to highlight features for new users. + + @discussion The `FBSDKLoginButton` may display this view automatically. If you do + not use the `FBSDKLoginButton`, you can manually call one of the `present*` methods + as appropriate and customize behavior via `FBSDKLoginTooltipViewDelegate` delegate. + + By default, the `FBSDKLoginTooltipView` is not added to the superview until it is + determined the app has migrated to the new login experience. You can override this + (e.g., to test the UI layout) by implementing the delegate or setting `forceDisplay` to YES. + + */ +@interface FBSDKLoginTooltipView : FBSDKTooltipView + +/*! @abstract the delegate */ +@property (nonatomic, assign) id delegate; + +/*! @abstract if set to YES, the view will always be displayed and the delegate's + `loginTooltipView:shouldAppear:` will NOT be called. */ +@property (nonatomic, assign) BOOL forceDisplay; + +@end + +/*! + @protocol + + @abstract + The `FBSDKLoginTooltipViewDelegate` protocol defines the methods used to receive event + notifications from `FBSDKLoginTooltipView` objects. + */ +@protocol FBSDKLoginTooltipViewDelegate + +@optional + +/*! + @abstract + Asks the delegate if the tooltip view should appear + + @param view The tooltip view. + @param appIsEligible The value fetched from the server identifying if the app + is eligible for the new login experience. + + @discussion Use this method to customize display behavior. + */ +- (BOOL)loginTooltipView:(FBSDKLoginTooltipView *)view shouldAppear:(BOOL)appIsEligible; + +/*! + @abstract + Tells the delegate the tooltip view will appear, specifically after it's been + added to the super view but before the fade in animation. + + @param view The tooltip view. + */ +- (void)loginTooltipViewWillAppear:(FBSDKLoginTooltipView *)view; + +/*! + @abstract + Tells the delegate the tooltip view will not appear (i.e., was not + added to the super view). + + @param view The tooltip view. + */ +- (void)loginTooltipViewWillNotAppear:(FBSDKLoginTooltipView *)view; + + +@end diff --git a/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKTooltipView.h b/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKTooltipView.h new file mode 100644 index 0000000..aff1067 --- /dev/null +++ b/Autorization:Registration Example/FBSDKLoginKit.framework/Headers/FBSDKTooltipView.h @@ -0,0 +1,141 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +/*! + @typedef FBSDKTooltipViewArrowDirection enum + + @abstract + Passed on construction to determine arrow orientation. + */ +typedef NS_ENUM(NSUInteger, FBSDKTooltipViewArrowDirection) +{ + /*! View is located above given point, arrow is pointing down. */ + FBSDKTooltipViewArrowDirectionDown = 0, + /*! View is located below given point, arrow is pointing up. */ + FBSDKTooltipViewArrowDirectionUp = 1, +}; + +/*! + @typedef FBSDKTooltipColorStyle enum + + @abstract + Passed on construction to determine color styling. + */ +typedef NS_ENUM(NSUInteger, FBSDKTooltipColorStyle) +{ + /*! Light blue background, white text, faded blue close button. */ + FBSDKTooltipColorStyleFriendlyBlue = 0, + /*! Dark gray background, white text, light gray close button. */ + FBSDKTooltipColorStyleNeutralGray = 1, +}; + +/*! + @class FBSDKTooltipView + + @abstract + Tooltip bubble with text in it used to display tips for UI elements, + with a pointed arrow (to refer to the UI element). + + @discussion + The tooltip fades in and will automatically fade out. See `displayDuration`. + */ +@interface FBSDKTooltipView : UIView + +/*! + @abstract Gets or sets the amount of time in seconds the tooltip should be displayed. + + @discussion Set this to zero to make the display permanent until explicitly dismissed. + Defaults to six seconds. + */ +@property (nonatomic, assign) CFTimeInterval displayDuration; + +/*! + @abstract Gets or sets the color style after initialization. + + @discussion Defaults to value passed to -initWithTagline:message:colorStyle:. + */ +@property (nonatomic, assign) FBSDKTooltipColorStyle colorStyle; + +/*! + @abstract Gets or sets the message. + */ +@property (nonatomic, copy) NSString *message; + +/*! + @abstract Gets or sets the optional phrase that comprises the first part of the label (and is highlighted differently). + */ +@property (nonatomic, copy) NSString *tagline; + +/*! + @abstract + Designated initializer. + + @param tagline First part of the label, that will be highlighted with different color. Can be nil. + + @param message Main message to display. + + @param colorStyle Color style to use for tooltip. + + @discussion + If you need to show a tooltip for login, consider using the `FBSDKLoginTooltipView` view. + + @see FBSDKLoginTooltipView + */ +- (instancetype)initWithTagline:(NSString *)tagline message:(NSString *)message colorStyle:(FBSDKTooltipColorStyle)colorStyle; + +/*! + @abstract + Show tooltip at the top or at the bottom of given view. + Tooltip will be added to anchorView.window.rootViewController.view + + @param anchorView view to show at, must be already added to window view hierarchy, in order to decide + where tooltip will be shown. (If there's not enough space at the top of the anchorView in window bounds - + tooltip will be shown at the bottom of it) + + @discussion + Use this method to present the tooltip with automatic positioning or + use -presentInView:withArrowPosition:direction: for manual positioning + If anchorView is nil or has no window - this method does nothing. + */ +- (void)presentFromView:(UIView *)anchorView; + +/*! + @abstract + Adds tooltip to given view, with given position and arrow direction. + + @param view View to be used as superview. + + @param arrowPosition Point in view's cordinates, where arrow will be pointing + + @param arrowDirection whenever arrow should be pointing up (message bubble is below the arrow) or + down (message bubble is above the arrow). + */ +- (void)presentInView:(UIView *)view withArrowPosition:(CGPoint)arrowPosition direction:(FBSDKTooltipViewArrowDirection)arrowDirection; + +/*! + @abstract + Remove tooltip manually. + + @discussion + Calling this method isn't necessary - tooltip will dismiss itself automatically after the `displayDuration`. + */ +- (void)dismiss; + +@end diff --git a/Autorization:Registration Example/FBSDKLoginKit.framework/Info.plist b/Autorization:Registration Example/FBSDKLoginKit.framework/Info.plist new file mode 100644 index 0000000..f99cc75 Binary files /dev/null and b/Autorization:Registration Example/FBSDKLoginKit.framework/Info.plist differ diff --git a/Autorization:Registration Example/FBSDKLoginKit.framework/Modules/module.modulemap b/Autorization:Registration Example/FBSDKLoginKit.framework/Modules/module.modulemap new file mode 100644 index 0000000..4b1d57b --- /dev/null +++ b/Autorization:Registration Example/FBSDKLoginKit.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module FBSDKLoginKit { + umbrella header "FBSDKLoginKit.h" + + export * + module * { export * } +} diff --git a/Autorization:Registration Example/LICENSE b/Autorization:Registration Example/LICENSE new file mode 100644 index 0000000..3e36352 --- /dev/null +++ b/Autorization:Registration Example/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Flatstack + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/Autorization:Registration Example/Podfile b/Autorization:Registration Example/Podfile new file mode 100755 index 0000000..ea90141 --- /dev/null +++ b/Autorization:Registration Example/Podfile @@ -0,0 +1,42 @@ +platform :ios, '8.2' +source 'https://github.com/CocoaPods/Specs.git' +use_frameworks! + + +abstract_target 'Abstract' do + pod 'FSHelpers+Swift', :git => 'https://github.com/fs/FSHelper.git' + + # Analytics + pod 'Fabric' + pod 'Crashlytics' + + # Libraries + pod 'AFNetworking' + pod 'MagicalRecord' + + # Authorization + pod 'IOSLinkedInAPI', :git => 'https://github.com/jeyben/IOSLinkedInAPI.git', :branch => 'master' + pod 'Google/SignIn' + + # Helpers + pod 'SVProgressHUD' + + target 'Authorization-module' do + end + + target 'Authorization-moduleTests' do + end + + target 'Authorization-moduleUITests' do + end + +end + +# Helpers + +#pod 'SDWebImage' +#pod 'NSDate-Extensions' +#pod 'Reachability' + +#pod 'SSKeychain' +#pod 'MKStoreKit' diff --git a/Autorization:Registration Example/Podfile.lock b/Autorization:Registration Example/Podfile.lock new file mode 100644 index 0000000..2523fb7 --- /dev/null +++ b/Autorization:Registration Example/Podfile.lock @@ -0,0 +1,97 @@ +PODS: + - AFNetworking (3.1.0): + - AFNetworking/NSURLSession (= 3.1.0) + - AFNetworking/Reachability (= 3.1.0) + - AFNetworking/Security (= 3.1.0) + - AFNetworking/Serialization (= 3.1.0) + - AFNetworking/UIKit (= 3.1.0) + - AFNetworking/NSURLSession (3.1.0): + - AFNetworking/Reachability + - AFNetworking/Security + - AFNetworking/Serialization + - AFNetworking/Reachability (3.1.0) + - AFNetworking/Security (3.1.0) + - AFNetworking/Serialization (3.1.0) + - AFNetworking/UIKit (3.1.0): + - AFNetworking/NSURLSession + - Crashlytics (3.7.0): + - Fabric (~> 1.6.3) + - Fabric (1.6.7) + - FSHelpers+Swift (2.1) + - Google/Core (2.0.4): + - GoogleInterchangeUtilities (~> 1.0) + - GoogleNetworkingUtilities (~> 1.0) + - GoogleSymbolUtilities (~> 1.0) + - GoogleUtilities (~> 1.1) + - Google/SignIn (2.0.4): + - Google/Core + - GoogleSignIn (~> 3.0) + - GoogleAppUtilities (1.1.1): + - GoogleSymbolUtilities (~> 1.0) + - GoogleAuthUtilities (2.0.1): + - GoogleNetworkingUtilities (~> 1.0) + - GoogleSymbolUtilities (~> 1.0) + - GoogleInterchangeUtilities (1.2.1): + - GoogleSymbolUtilities (~> 1.0) + - GoogleNetworkingUtilities (1.2.1): + - GoogleSymbolUtilities (~> 1.0) + - GoogleSignIn (3.0.0): + - GoogleAppUtilities (~> 1.0) + - GoogleAuthUtilities (~> 2.0) + - GoogleNetworkingUtilities (~> 1.0) + - GoogleUtilities (~> 1.0) + - GoogleSymbolUtilities (1.1.1) + - GoogleUtilities (1.3.1): + - GoogleSymbolUtilities (~> 1.0) + - IOSLinkedInAPI (2.0.0): + - AFNetworking (>= 2.0.0) + - MagicalRecord (2.3.2): + - MagicalRecord/Core (= 2.3.2) + - MagicalRecord/Core (2.3.2) + - SVProgressHUD (2.0.3) + +DEPENDENCIES: + - AFNetworking + - Crashlytics + - Fabric + - FSHelpers+Swift (from `https://github.com/fs/FSHelper.git`) + - Google/SignIn + - IOSLinkedInAPI (from `https://github.com/jeyben/IOSLinkedInAPI.git`, branch `master`) + - MagicalRecord + - SVProgressHUD + +EXTERNAL SOURCES: + FSHelpers+Swift: + :git: https://github.com/fs/FSHelper.git + IOSLinkedInAPI: + :branch: master + :git: https://github.com/jeyben/IOSLinkedInAPI.git + +CHECKOUT OPTIONS: + FSHelpers+Swift: + :commit: 1c0e69208239116ae2444a259a223ef62482c504 + :git: https://github.com/fs/FSHelper.git + IOSLinkedInAPI: + :commit: 7b37caa1d42cccb5757d142b6f0b0b272671afbf + :git: https://github.com/jeyben/IOSLinkedInAPI.git + +SPEC CHECKSUMS: + AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67 + Crashlytics: c3a2333dea9e2733d2777f730910321fc9e25c0d + Fabric: caf7580c725e64db144f610ac65cd60956911dc7 + FSHelpers+Swift: 76ec63cb6a68ee7170c23d3d22cfc933c08d52e5 + Google: d0932824c5b97c96be489aa6f4e8cd6c294d637d + GoogleAppUtilities: f1730f91f67767b453c289577040dd3f425ffdc7 + GoogleAuthUtilities: d7a19615cd7627688afcf181737f1011ee8b5a23 + GoogleInterchangeUtilities: def8415a862effc67d549d5b5b0b9c7a2f97d4de + GoogleNetworkingUtilities: 3e83269048cfb498dc7ec83ab36813360965c74f + GoogleSignIn: 3d571172b8603be39dcb1705d8217146bb76fe62 + GoogleSymbolUtilities: 33117db1b5f290c6fbf259585e4885b4c84b98d7 + GoogleUtilities: 56c5ac05b7aa5dc417a1bb85221a9516e04d7032 + IOSLinkedInAPI: d0adc664472d471b0df9b2aad92a2d82de926c40 + MagicalRecord: 53bed74b4323b930992a725be713e53b37d19755 + SVProgressHUD: b0830714205bea1317ea1a2ebc71e5633af334d4 + +PODFILE CHECKSUM: 3e66716a13293753e85c7998ef90d39cedcd2b92 + +COCOAPODS: 1.0.0 diff --git a/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h new file mode 100644 index 0000000..5ce279a --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h @@ -0,0 +1,295 @@ +// AFHTTPSessionManager.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#if !TARGET_OS_WATCH +#import +#endif +#import + +#if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_TV +#import +#else +#import +#endif + +#import "AFURLSessionManager.h" + +/** + `AFHTTPSessionManager` is a subclass of `AFURLSessionManager` with convenience methods for making HTTP requests. When a `baseURL` is provided, requests made with the `GET` / `POST` / et al. convenience methods can be made with relative paths. + + ## Subclassing Notes + + Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application. + + For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect. + + ## Methods to Override + + To change the behavior of all data task operation construction, which is also used in the `GET` / `POST` / et al. convenience methods, override `dataTaskWithRequest:completionHandler:`. + + ## Serialization + + Requests created by an HTTP client will contain default headers and encode parameters according to the `requestSerializer` property, which is an object conforming to ``. + + Responses received from the server are automatically validated and serialized by the `responseSerializers` property, which is an object conforming to `` + + ## URL Construction Using Relative Paths + + For HTTP convenience methods, the request serializer constructs URLs from the path relative to the `-baseURL`, using `NSURL +URLWithString:relativeToURL:`, when provided. If `baseURL` is `nil`, `path` needs to resolve to a valid `NSURL` object using `NSURL +URLWithString:`. + + Below are a few examples of how `baseURL` and relative paths interact: + + NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"]; + [NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz + [NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo + [NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/ + [NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/ + + Also important to note is that a trailing slash will be added to any `baseURL` without one. This would otherwise cause unexpected behavior when constructing URLs using paths without a leading slash. + + @warning Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance. + */ + +NS_ASSUME_NONNULL_BEGIN + +@interface AFHTTPSessionManager : AFURLSessionManager + +/** + The URL used to construct requests from relative paths in methods like `requestWithMethod:URLString:parameters:`, and the `GET` / `POST` / et al. convenience methods. + */ +@property (readonly, nonatomic, strong, nullable) NSURL *baseURL; + +/** + Requests created with `requestWithMethod:URLString:parameters:` & `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:` are constructed with a set of default headers using a parameter serialization specified by this property. By default, this is set to an instance of `AFHTTPRequestSerializer`, which serializes query string parameters for `GET`, `HEAD`, and `DELETE` requests, or otherwise URL-form-encodes HTTP message bodies. + + @warning `requestSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPRequestSerializer * requestSerializer; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`. + + @warning `responseSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns an `AFHTTPSessionManager` object. + */ ++ (instancetype)manager; + +/** + Initializes an `AFHTTPSessionManager` object with the specified base URL. + + @param url The base URL for the HTTP client. + + @return The newly-initialized HTTP client + */ +- (instancetype)initWithBaseURL:(nullable NSURL *)url; + +/** + Initializes an `AFHTTPSessionManager` object with the specified base URL. + + This is the designated initializer. + + @param url The base URL for the HTTP client. + @param configuration The configuration used to create the managed session. + + @return The newly-initialized HTTP client + */ +- (instancetype)initWithBaseURL:(nullable NSURL *)url + sessionConfiguration:(nullable NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER; + +///--------------------------- +/// @name Making HTTP Requests +///--------------------------- + +/** + Creates and runs an `NSURLSessionDataTask` with a `GET` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; + + +/** + Creates and runs an `NSURLSessionDataTask` with a `GET` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param downloadProgress A block object to be executed when the download progress is updated. Note this block is called on the session queue, not the main queue. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler: + */ +- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString + parameters:(nullable id)parameters + progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgress + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `HEAD` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes a single arguments: the data task. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)HEAD:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; + +/** + Creates and runs an `NSURLSessionDataTask` with a `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param uploadProgress A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler: + */ +- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(nullable id)parameters + progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a multipart `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(nullable id)parameters + constructingBodyWithBlock:(nullable void (^)(id formData))block + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; + +/** + Creates and runs an `NSURLSessionDataTask` with a multipart `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param uploadProgress A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler: + */ +- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(nullable id)parameters + constructingBodyWithBlock:(nullable void (^)(id formData))block + progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `PUT` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)PUT:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `PATCH` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)PATCH:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `DELETE` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)DELETE:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m new file mode 100644 index 0000000..2591070 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m @@ -0,0 +1,361 @@ +// AFHTTPSessionManager.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFHTTPSessionManager.h" + +#import "AFURLRequestSerialization.h" +#import "AFURLResponseSerialization.h" + +#import +#import +#import + +#import +#import +#import +#import +#import + +#if TARGET_OS_IOS || TARGET_OS_TV +#import +#elif TARGET_OS_WATCH +#import +#endif + +@interface AFHTTPSessionManager () +@property (readwrite, nonatomic, strong) NSURL *baseURL; +@end + +@implementation AFHTTPSessionManager +@dynamic responseSerializer; + ++ (instancetype)manager { + return [[[self class] alloc] initWithBaseURL:nil]; +} + +- (instancetype)init { + return [self initWithBaseURL:nil]; +} + +- (instancetype)initWithBaseURL:(NSURL *)url { + return [self initWithBaseURL:url sessionConfiguration:nil]; +} + +- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration { + return [self initWithBaseURL:nil sessionConfiguration:configuration]; +} + +- (instancetype)initWithBaseURL:(NSURL *)url + sessionConfiguration:(NSURLSessionConfiguration *)configuration +{ + self = [super initWithSessionConfiguration:configuration]; + if (!self) { + return nil; + } + + // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected + if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) { + url = [url URLByAppendingPathComponent:@""]; + } + + self.baseURL = url; + + self.requestSerializer = [AFHTTPRequestSerializer serializer]; + self.responseSerializer = [AFJSONResponseSerializer serializer]; + + return self; +} + +#pragma mark - + +- (void)setRequestSerializer:(AFHTTPRequestSerializer *)requestSerializer { + NSParameterAssert(requestSerializer); + + _requestSerializer = requestSerializer; +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + NSParameterAssert(responseSerializer); + + [super setResponseSerializer:responseSerializer]; +} + +#pragma mark - + +- (NSURLSessionDataTask *)GET:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + + return [self GET:URLString parameters:parameters progress:nil success:success failure:failure]; +} + +- (NSURLSessionDataTask *)GET:(NSString *)URLString + parameters:(id)parameters + progress:(void (^)(NSProgress * _Nonnull))downloadProgress + success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success + failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure +{ + + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"GET" + URLString:URLString + parameters:parameters + uploadProgress:nil + downloadProgress:downloadProgress + success:success + failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)HEAD:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"HEAD" URLString:URLString parameters:parameters uploadProgress:nil downloadProgress:nil success:^(NSURLSessionDataTask *task, __unused id responseObject) { + if (success) { + success(task); + } + } failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + return [self POST:URLString parameters:parameters progress:nil success:success failure:failure]; +} + +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(id)parameters + progress:(void (^)(NSProgress * _Nonnull))uploadProgress + success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success + failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"POST" URLString:URLString parameters:parameters uploadProgress:uploadProgress downloadProgress:nil success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(nullable id)parameters + constructingBodyWithBlock:(nullable void (^)(id _Nonnull))block + success:(nullable void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure +{ + return [self POST:URLString parameters:parameters constructingBodyWithBlock:block progress:nil success:success failure:failure]; +} + +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(id)parameters + constructingBodyWithBlock:(void (^)(id formData))block + progress:(nullable void (^)(NSProgress * _Nonnull))uploadProgress + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError]; + if (serializationError) { + if (failure) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); +#pragma clang diagnostic pop + } + + return nil; + } + + __block NSURLSessionDataTask *task = [self uploadTaskWithStreamedRequest:request progress:uploadProgress completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { + if (error) { + if (failure) { + failure(task, error); + } + } else { + if (success) { + success(task, responseObject); + } + } + }]; + + [task resume]; + + return task; +} + +- (NSURLSessionDataTask *)PUT:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"PUT" URLString:URLString parameters:parameters uploadProgress:nil downloadProgress:nil success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)PATCH:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"PATCH" URLString:URLString parameters:parameters uploadProgress:nil downloadProgress:nil success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)DELETE:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"DELETE" URLString:URLString parameters:parameters uploadProgress:nil downloadProgress:nil success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters + uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgress + downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgress + success:(void (^)(NSURLSessionDataTask *, id))success + failure:(void (^)(NSURLSessionDataTask *, NSError *))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError]; + if (serializationError) { + if (failure) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); +#pragma clang diagnostic pop + } + + return nil; + } + + __block NSURLSessionDataTask *dataTask = nil; + dataTask = [self dataTaskWithRequest:request + uploadProgress:uploadProgress + downloadProgress:downloadProgress + completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { + if (error) { + if (failure) { + failure(dataTask, error); + } + } else { + if (success) { + success(dataTask, responseObject); + } + } + }]; + + return dataTask; +} + +#pragma mark - NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p, baseURL: %@, session: %@, operationQueue: %@>", NSStringFromClass([self class]), self, [self.baseURL absoluteString], self.session, self.operationQueue]; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + NSURL *baseURL = [decoder decodeObjectOfClass:[NSURL class] forKey:NSStringFromSelector(@selector(baseURL))]; + NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@"sessionConfiguration"]; + if (!configuration) { + NSString *configurationIdentifier = [decoder decodeObjectOfClass:[NSString class] forKey:@"identifier"]; + if (configurationIdentifier) { +#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1100) + configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:configurationIdentifier]; +#else + configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:configurationIdentifier]; +#endif + } + } + + self = [self initWithBaseURL:baseURL sessionConfiguration:configuration]; + if (!self) { + return nil; + } + + self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer class] forKey:NSStringFromSelector(@selector(requestSerializer))]; + self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; + AFSecurityPolicy *decodedPolicy = [decoder decodeObjectOfClass:[AFSecurityPolicy class] forKey:NSStringFromSelector(@selector(securityPolicy))]; + if (decodedPolicy) { + self.securityPolicy = decodedPolicy; + } + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:self.baseURL forKey:NSStringFromSelector(@selector(baseURL))]; + if ([self.session.configuration conformsToProtocol:@protocol(NSCoding)]) { + [coder encodeObject:self.session.configuration forKey:@"sessionConfiguration"]; + } else { + [coder encodeObject:self.session.configuration.identifier forKey:@"identifier"]; + } + [coder encodeObject:self.requestSerializer forKey:NSStringFromSelector(@selector(requestSerializer))]; + [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; + [coder encodeObject:self.securityPolicy forKey:NSStringFromSelector(@selector(securityPolicy))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFHTTPSessionManager *HTTPClient = [[[self class] allocWithZone:zone] initWithBaseURL:self.baseURL sessionConfiguration:self.session.configuration]; + + HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone]; + HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone]; + HTTPClient.securityPolicy = [self.securityPolicy copyWithZone:zone]; + return HTTPClient; +} + +@end diff --git a/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h new file mode 100644 index 0000000..0feb18d --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h @@ -0,0 +1,206 @@ +// AFNetworkReachabilityManager.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#if !TARGET_OS_WATCH +#import + +typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) { + AFNetworkReachabilityStatusUnknown = -1, + AFNetworkReachabilityStatusNotReachable = 0, + AFNetworkReachabilityStatusReachableViaWWAN = 1, + AFNetworkReachabilityStatusReachableViaWiFi = 2, +}; + +NS_ASSUME_NONNULL_BEGIN + +/** + `AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. + + Reachability can be used to determine background information about why a network operation failed, or to trigger a network operation retrying when a connection is established. It should not be used to prevent a user from initiating a network request, as it's possible that an initial request may be required to establish reachability. + + See Apple's Reachability Sample Code ( https://developer.apple.com/library/ios/samplecode/reachability/ ) + + @warning Instances of `AFNetworkReachabilityManager` must be started with `-startMonitoring` before reachability status can be determined. + */ +@interface AFNetworkReachabilityManager : NSObject + +/** + The current network reachability status. + */ +@property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; + +/** + Whether or not the network is currently reachable. + */ +@property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable; + +/** + Whether or not the network is currently reachable via WWAN. + */ +@property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN; + +/** + Whether or not the network is currently reachable via WiFi. + */ +@property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Returns the shared network reachability manager. + */ ++ (instancetype)sharedManager; + +/** + Creates and returns a network reachability manager with the default socket address. + + @return An initialized network reachability manager, actively monitoring the default socket address. + */ ++ (instancetype)manager; + +/** + Creates and returns a network reachability manager for the specified domain. + + @param domain The domain used to evaluate network reachability. + + @return An initialized network reachability manager, actively monitoring the specified domain. + */ ++ (instancetype)managerForDomain:(NSString *)domain; + +/** + Creates and returns a network reachability manager for the socket address. + + @param address The socket address (`sockaddr_in6`) used to evaluate network reachability. + + @return An initialized network reachability manager, actively monitoring the specified socket address. + */ ++ (instancetype)managerForAddress:(const void *)address; + +/** + Initializes an instance of a network reachability manager from the specified reachability object. + + @param reachability The reachability object to monitor. + + @return An initialized network reachability manager, actively monitoring the specified reachability. + */ +- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER; + +///-------------------------------------------------- +/// @name Starting & Stopping Reachability Monitoring +///-------------------------------------------------- + +/** + Starts monitoring for changes in network reachability status. + */ +- (void)startMonitoring; + +/** + Stops monitoring for changes in network reachability status. + */ +- (void)stopMonitoring; + +///------------------------------------------------- +/// @name Getting Localized Reachability Description +///------------------------------------------------- + +/** + Returns a localized string representation of the current network reachability status. + */ +- (NSString *)localizedNetworkReachabilityStatusString; + +///--------------------------------------------------- +/// @name Setting Network Reachability Change Callback +///--------------------------------------------------- + +/** + Sets a callback to be executed when the network availability of the `baseURL` host changes. + + @param block A block object to be executed when the network availability of the `baseURL` host changes.. This block has no return value and takes a single argument which represents the various reachability states from the device to the `baseURL`. + */ +- (void)setReachabilityStatusChangeBlock:(nullable void (^)(AFNetworkReachabilityStatus status))block; + +@end + +///---------------- +/// @name Constants +///---------------- + +/** + ## Network Reachability + + The following constants are provided by `AFNetworkReachabilityManager` as possible network reachability statuses. + + enum { + AFNetworkReachabilityStatusUnknown, + AFNetworkReachabilityStatusNotReachable, + AFNetworkReachabilityStatusReachableViaWWAN, + AFNetworkReachabilityStatusReachableViaWiFi, + } + + `AFNetworkReachabilityStatusUnknown` + The `baseURL` host reachability is not known. + + `AFNetworkReachabilityStatusNotReachable` + The `baseURL` host cannot be reached. + + `AFNetworkReachabilityStatusReachableViaWWAN` + The `baseURL` host can be reached via a cellular connection, such as EDGE or GPRS. + + `AFNetworkReachabilityStatusReachableViaWiFi` + The `baseURL` host can be reached via a Wi-Fi connection. + + ### Keys for Notification UserInfo Dictionary + + Strings that are used as keys in a `userInfo` dictionary in a network reachability status change notification. + + `AFNetworkingReachabilityNotificationStatusItem` + A key in the userInfo dictionary in a `AFNetworkingReachabilityDidChangeNotification` notification. + The corresponding value is an `NSNumber` object representing the `AFNetworkReachabilityStatus` value for the current reachability status. + */ + +///-------------------- +/// @name Notifications +///-------------------- + +/** + Posted when network reachability changes. + This notification assigns no notification object. The `userInfo` dictionary contains an `NSNumber` object under the `AFNetworkingReachabilityNotificationStatusItem` key, representing the `AFNetworkReachabilityStatus` value for the current network reachability. + + @warning In order for network reachability to be monitored, include the `SystemConfiguration` framework in the active target's "Link Binary With Library" build phase, and add `#import ` to the header prefix of the project (`Prefix.pch`). + */ +FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityDidChangeNotification; +FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityNotificationStatusItem; + +///-------------------- +/// @name Functions +///-------------------- + +/** + Returns a localized string representation of an `AFNetworkReachabilityStatus` value. + */ +FOUNDATION_EXPORT NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status); + +NS_ASSUME_NONNULL_END +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m new file mode 100644 index 0000000..d458364 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m @@ -0,0 +1,263 @@ +// AFNetworkReachabilityManager.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFNetworkReachabilityManager.h" +#if !TARGET_OS_WATCH + +#import +#import +#import +#import +#import + +NSString * const AFNetworkingReachabilityDidChangeNotification = @"com.alamofire.networking.reachability.change"; +NSString * const AFNetworkingReachabilityNotificationStatusItem = @"AFNetworkingReachabilityNotificationStatusItem"; + +typedef void (^AFNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus status); + +NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status) { + switch (status) { + case AFNetworkReachabilityStatusNotReachable: + return NSLocalizedStringFromTable(@"Not Reachable", @"AFNetworking", nil); + case AFNetworkReachabilityStatusReachableViaWWAN: + return NSLocalizedStringFromTable(@"Reachable via WWAN", @"AFNetworking", nil); + case AFNetworkReachabilityStatusReachableViaWiFi: + return NSLocalizedStringFromTable(@"Reachable via WiFi", @"AFNetworking", nil); + case AFNetworkReachabilityStatusUnknown: + default: + return NSLocalizedStringFromTable(@"Unknown", @"AFNetworking", nil); + } +} + +static AFNetworkReachabilityStatus AFNetworkReachabilityStatusForFlags(SCNetworkReachabilityFlags flags) { + BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0); + BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0); + BOOL canConnectionAutomatically = (((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || ((flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)); + BOOL canConnectWithoutUserInteraction = (canConnectionAutomatically && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0); + BOOL isNetworkReachable = (isReachable && (!needsConnection || canConnectWithoutUserInteraction)); + + AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusUnknown; + if (isNetworkReachable == NO) { + status = AFNetworkReachabilityStatusNotReachable; + } +#if TARGET_OS_IPHONE + else if ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0) { + status = AFNetworkReachabilityStatusReachableViaWWAN; + } +#endif + else { + status = AFNetworkReachabilityStatusReachableViaWiFi; + } + + return status; +} + +/** + * Queue a status change notification for the main thread. + * + * This is done to ensure that the notifications are received in the same order + * as they are sent. If notifications are sent directly, it is possible that + * a queued notification (for an earlier status condition) is processed after + * the later update, resulting in the listener being left in the wrong state. + */ +static void AFPostReachabilityStatusChange(SCNetworkReachabilityFlags flags, AFNetworkReachabilityStatusBlock block) { + AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags); + dispatch_async(dispatch_get_main_queue(), ^{ + if (block) { + block(status); + } + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + NSDictionary *userInfo = @{ AFNetworkingReachabilityNotificationStatusItem: @(status) }; + [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:userInfo]; + }); +} + +static void AFNetworkReachabilityCallback(SCNetworkReachabilityRef __unused target, SCNetworkReachabilityFlags flags, void *info) { + AFPostReachabilityStatusChange(flags, (__bridge AFNetworkReachabilityStatusBlock)info); +} + + +static const void * AFNetworkReachabilityRetainCallback(const void *info) { + return Block_copy(info); +} + +static void AFNetworkReachabilityReleaseCallback(const void *info) { + if (info) { + Block_release(info); + } +} + +@interface AFNetworkReachabilityManager () +@property (readonly, nonatomic, assign) SCNetworkReachabilityRef networkReachability; +@property (readwrite, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; +@property (readwrite, nonatomic, copy) AFNetworkReachabilityStatusBlock networkReachabilityStatusBlock; +@end + +@implementation AFNetworkReachabilityManager + ++ (instancetype)sharedManager { + static AFNetworkReachabilityManager *_sharedManager = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _sharedManager = [self manager]; + }); + + return _sharedManager; +} + ++ (instancetype)managerForDomain:(NSString *)domain { + SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [domain UTF8String]); + + AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; + + CFRelease(reachability); + + return manager; +} + ++ (instancetype)managerForAddress:(const void *)address { + SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)address); + AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; + + CFRelease(reachability); + + return manager; +} + ++ (instancetype)manager +{ +#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) + struct sockaddr_in6 address; + bzero(&address, sizeof(address)); + address.sin6_len = sizeof(address); + address.sin6_family = AF_INET6; +#else + struct sockaddr_in address; + bzero(&address, sizeof(address)); + address.sin_len = sizeof(address); + address.sin_family = AF_INET; +#endif + return [self managerForAddress:&address]; +} + +- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability { + self = [super init]; + if (!self) { + return nil; + } + + _networkReachability = CFRetain(reachability); + self.networkReachabilityStatus = AFNetworkReachabilityStatusUnknown; + + return self; +} + +- (instancetype)init NS_UNAVAILABLE +{ + return nil; +} + +- (void)dealloc { + [self stopMonitoring]; + + if (_networkReachability != NULL) { + CFRelease(_networkReachability); + } +} + +#pragma mark - + +- (BOOL)isReachable { + return [self isReachableViaWWAN] || [self isReachableViaWiFi]; +} + +- (BOOL)isReachableViaWWAN { + return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWWAN; +} + +- (BOOL)isReachableViaWiFi { + return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWiFi; +} + +#pragma mark - + +- (void)startMonitoring { + [self stopMonitoring]; + + if (!self.networkReachability) { + return; + } + + __weak __typeof(self)weakSelf = self; + AFNetworkReachabilityStatusBlock callback = ^(AFNetworkReachabilityStatus status) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + + strongSelf.networkReachabilityStatus = status; + if (strongSelf.networkReachabilityStatusBlock) { + strongSelf.networkReachabilityStatusBlock(status); + } + + }; + + SCNetworkReachabilityContext context = {0, (__bridge void *)callback, AFNetworkReachabilityRetainCallback, AFNetworkReachabilityReleaseCallback, NULL}; + SCNetworkReachabilitySetCallback(self.networkReachability, AFNetworkReachabilityCallback, &context); + SCNetworkReachabilityScheduleWithRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{ + SCNetworkReachabilityFlags flags; + if (SCNetworkReachabilityGetFlags(self.networkReachability, &flags)) { + AFPostReachabilityStatusChange(flags, callback); + } + }); +} + +- (void)stopMonitoring { + if (!self.networkReachability) { + return; + } + + SCNetworkReachabilityUnscheduleFromRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); +} + +#pragma mark - + +- (NSString *)localizedNetworkReachabilityStatusString { + return AFStringFromNetworkReachabilityStatus(self.networkReachabilityStatus); +} + +#pragma mark - + +- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block { + self.networkReachabilityStatusBlock = block; +} + +#pragma mark - NSKeyValueObserving + ++ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key { + if ([key isEqualToString:@"reachable"] || [key isEqualToString:@"reachableViaWWAN"] || [key isEqualToString:@"reachableViaWiFi"]) { + return [NSSet setWithObject:@"networkReachabilityStatus"]; + } + + return [super keyPathsForValuesAffectingValueForKey:key]; +} + +@end +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFNetworking.h b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFNetworking.h new file mode 100644 index 0000000..e2fb2f4 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFNetworking.h @@ -0,0 +1,41 @@ +// AFNetworking.h +// +// Copyright (c) 2013 AFNetworking (http://afnetworking.com/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import +#import + +#ifndef _AFNETWORKING_ + #define _AFNETWORKING_ + + #import "AFURLRequestSerialization.h" + #import "AFURLResponseSerialization.h" + #import "AFSecurityPolicy.h" + +#if !TARGET_OS_WATCH + #import "AFNetworkReachabilityManager.h" +#endif + + #import "AFURLSessionManager.h" + #import "AFHTTPSessionManager.h" + +#endif /* _AFNETWORKING_ */ diff --git a/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h new file mode 100644 index 0000000..c005efa --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h @@ -0,0 +1,154 @@ +// AFSecurityPolicy.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import + +typedef NS_ENUM(NSUInteger, AFSSLPinningMode) { + AFSSLPinningModeNone, + AFSSLPinningModePublicKey, + AFSSLPinningModeCertificate, +}; + +/** + `AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections. + + Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. + */ + +NS_ASSUME_NONNULL_BEGIN + +@interface AFSecurityPolicy : NSObject + +/** + The criteria by which server trust should be evaluated against the pinned SSL certificates. Defaults to `AFSSLPinningModeNone`. + */ +@property (readonly, nonatomic, assign) AFSSLPinningMode SSLPinningMode; + +/** + The certificates used to evaluate server trust according to the SSL pinning mode. + + By default, this property is set to any (`.cer`) certificates included in the target compiling AFNetworking. Note that if you are using AFNetworking as embedded framework, no certificates will be pinned by default. Use `certificatesInBundle` to load certificates from your target, and then create a new policy by calling `policyWithPinningMode:withPinnedCertificates`. + + Note that if pinning is enabled, `evaluateServerTrust:forDomain:` will return true if any pinned certificate matches. + */ +@property (nonatomic, strong, nullable) NSSet *pinnedCertificates; + +/** + Whether or not to trust servers with an invalid or expired SSL certificates. Defaults to `NO`. + */ +@property (nonatomic, assign) BOOL allowInvalidCertificates; + +/** + Whether or not to validate the domain name in the certificate's CN field. Defaults to `YES`. + */ +@property (nonatomic, assign) BOOL validatesDomainName; + +///----------------------------------------- +/// @name Getting Certificates from the Bundle +///----------------------------------------- + +/** + Returns any certificates included in the bundle. If you are using AFNetworking as an embedded framework, you must use this method to find the certificates you have included in your app bundle, and use them when creating your security policy by calling `policyWithPinningMode:withPinnedCertificates`. + + @return The certificates included in the given bundle. + */ ++ (NSSet *)certificatesInBundle:(NSBundle *)bundle; + +///----------------------------------------- +/// @name Getting Specific Security Policies +///----------------------------------------- + +/** + Returns the shared default security policy, which does not allow invalid certificates, validates domain name, and does not validate against pinned certificates or public keys. + + @return The default security policy. + */ ++ (instancetype)defaultPolicy; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns a security policy with the specified pinning mode. + + @param pinningMode The SSL pinning mode. + + @return A new security policy. + */ ++ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode; + +/** + Creates and returns a security policy with the specified pinning mode. + + @param pinningMode The SSL pinning mode. + @param pinnedCertificates The certificates to pin against. + + @return A new security policy. + */ ++ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode withPinnedCertificates:(NSSet *)pinnedCertificates; + +///------------------------------ +/// @name Evaluating Server Trust +///------------------------------ + +/** + Whether or not the specified server trust should be accepted, based on the security policy. + + This method should be used when responding to an authentication challenge from a server. + + @param serverTrust The X.509 certificate trust of the server. + @param domain The domain of serverTrust. If `nil`, the domain will not be validated. + + @return Whether or not to trust the server. + */ +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust + forDomain:(nullable NSString *)domain; + +@end + +NS_ASSUME_NONNULL_END + +///---------------- +/// @name Constants +///---------------- + +/** + ## SSL Pinning Modes + + The following constants are provided by `AFSSLPinningMode` as possible SSL pinning modes. + + enum { + AFSSLPinningModeNone, + AFSSLPinningModePublicKey, + AFSSLPinningModeCertificate, + } + + `AFSSLPinningModeNone` + Do not used pinned certificates to validate servers. + + `AFSSLPinningModePublicKey` + Validate host certificates against public keys of pinned certificates. + + `AFSSLPinningModeCertificate` + Validate host certificates against pinned certificates. +*/ diff --git a/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m new file mode 100644 index 0000000..ec81d37 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m @@ -0,0 +1,353 @@ +// AFSecurityPolicy.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFSecurityPolicy.h" + +#import + +#if !TARGET_OS_IOS && !TARGET_OS_WATCH && !TARGET_OS_TV +static NSData * AFSecKeyGetData(SecKeyRef key) { + CFDataRef data = NULL; + + __Require_noErr_Quiet(SecItemExport(key, kSecFormatUnknown, kSecItemPemArmour, NULL, &data), _out); + + return (__bridge_transfer NSData *)data; + +_out: + if (data) { + CFRelease(data); + } + + return nil; +} +#endif + +static BOOL AFSecKeyIsEqualToKey(SecKeyRef key1, SecKeyRef key2) { +#if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_TV + return [(__bridge id)key1 isEqual:(__bridge id)key2]; +#else + return [AFSecKeyGetData(key1) isEqual:AFSecKeyGetData(key2)]; +#endif +} + +static id AFPublicKeyForCertificate(NSData *certificate) { + id allowedPublicKey = nil; + SecCertificateRef allowedCertificate; + SecCertificateRef allowedCertificates[1]; + CFArrayRef tempCertificates = nil; + SecPolicyRef policy = nil; + SecTrustRef allowedTrust = nil; + SecTrustResultType result; + + allowedCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificate); + __Require_Quiet(allowedCertificate != NULL, _out); + + allowedCertificates[0] = allowedCertificate; + tempCertificates = CFArrayCreate(NULL, (const void **)allowedCertificates, 1, NULL); + + policy = SecPolicyCreateBasicX509(); + __Require_noErr_Quiet(SecTrustCreateWithCertificates(tempCertificates, policy, &allowedTrust), _out); + __Require_noErr_Quiet(SecTrustEvaluate(allowedTrust, &result), _out); + + allowedPublicKey = (__bridge_transfer id)SecTrustCopyPublicKey(allowedTrust); + +_out: + if (allowedTrust) { + CFRelease(allowedTrust); + } + + if (policy) { + CFRelease(policy); + } + + if (tempCertificates) { + CFRelease(tempCertificates); + } + + if (allowedCertificate) { + CFRelease(allowedCertificate); + } + + return allowedPublicKey; +} + +static BOOL AFServerTrustIsValid(SecTrustRef serverTrust) { + BOOL isValid = NO; + SecTrustResultType result; + __Require_noErr_Quiet(SecTrustEvaluate(serverTrust, &result), _out); + + isValid = (result == kSecTrustResultUnspecified || result == kSecTrustResultProceed); + +_out: + return isValid; +} + +static NSArray * AFCertificateTrustChainForServerTrust(SecTrustRef serverTrust) { + CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); + NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; + + for (CFIndex i = 0; i < certificateCount; i++) { + SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); + [trustChain addObject:(__bridge_transfer NSData *)SecCertificateCopyData(certificate)]; + } + + return [NSArray arrayWithArray:trustChain]; +} + +static NSArray * AFPublicKeyTrustChainForServerTrust(SecTrustRef serverTrust) { + SecPolicyRef policy = SecPolicyCreateBasicX509(); + CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); + NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; + for (CFIndex i = 0; i < certificateCount; i++) { + SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); + + SecCertificateRef someCertificates[] = {certificate}; + CFArrayRef certificates = CFArrayCreate(NULL, (const void **)someCertificates, 1, NULL); + + SecTrustRef trust; + __Require_noErr_Quiet(SecTrustCreateWithCertificates(certificates, policy, &trust), _out); + + SecTrustResultType result; + __Require_noErr_Quiet(SecTrustEvaluate(trust, &result), _out); + + [trustChain addObject:(__bridge_transfer id)SecTrustCopyPublicKey(trust)]; + + _out: + if (trust) { + CFRelease(trust); + } + + if (certificates) { + CFRelease(certificates); + } + + continue; + } + CFRelease(policy); + + return [NSArray arrayWithArray:trustChain]; +} + +#pragma mark - + +@interface AFSecurityPolicy() +@property (readwrite, nonatomic, assign) AFSSLPinningMode SSLPinningMode; +@property (readwrite, nonatomic, strong) NSSet *pinnedPublicKeys; +@end + +@implementation AFSecurityPolicy + ++ (NSSet *)certificatesInBundle:(NSBundle *)bundle { + NSArray *paths = [bundle pathsForResourcesOfType:@"cer" inDirectory:@"."]; + + NSMutableSet *certificates = [NSMutableSet setWithCapacity:[paths count]]; + for (NSString *path in paths) { + NSData *certificateData = [NSData dataWithContentsOfFile:path]; + [certificates addObject:certificateData]; + } + + return [NSSet setWithSet:certificates]; +} + ++ (NSSet *)defaultPinnedCertificates { + static NSSet *_defaultPinnedCertificates = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + _defaultPinnedCertificates = [self certificatesInBundle:bundle]; + }); + + return _defaultPinnedCertificates; +} + ++ (instancetype)defaultPolicy { + AFSecurityPolicy *securityPolicy = [[self alloc] init]; + securityPolicy.SSLPinningMode = AFSSLPinningModeNone; + + return securityPolicy; +} + ++ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode { + return [self policyWithPinningMode:pinningMode withPinnedCertificates:[self defaultPinnedCertificates]]; +} + ++ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode withPinnedCertificates:(NSSet *)pinnedCertificates { + AFSecurityPolicy *securityPolicy = [[self alloc] init]; + securityPolicy.SSLPinningMode = pinningMode; + + [securityPolicy setPinnedCertificates:pinnedCertificates]; + + return securityPolicy; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.validatesDomainName = YES; + + return self; +} + +- (void)setPinnedCertificates:(NSSet *)pinnedCertificates { + _pinnedCertificates = pinnedCertificates; + + if (self.pinnedCertificates) { + NSMutableSet *mutablePinnedPublicKeys = [NSMutableSet setWithCapacity:[self.pinnedCertificates count]]; + for (NSData *certificate in self.pinnedCertificates) { + id publicKey = AFPublicKeyForCertificate(certificate); + if (!publicKey) { + continue; + } + [mutablePinnedPublicKeys addObject:publicKey]; + } + self.pinnedPublicKeys = [NSSet setWithSet:mutablePinnedPublicKeys]; + } else { + self.pinnedPublicKeys = nil; + } +} + +#pragma mark - + +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust + forDomain:(NSString *)domain +{ + if (domain && self.allowInvalidCertificates && self.validatesDomainName && (self.SSLPinningMode == AFSSLPinningModeNone || [self.pinnedCertificates count] == 0)) { + // https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/OverridingSSLChainValidationCorrectly.html + // According to the docs, you should only trust your provided certs for evaluation. + // Pinned certificates are added to the trust. Without pinned certificates, + // there is nothing to evaluate against. + // + // From Apple Docs: + // "Do not implicitly trust self-signed certificates as anchors (kSecTrustOptionImplicitAnchors). + // Instead, add your own (self-signed) CA certificate to the list of trusted anchors." + NSLog(@"In order to validate a domain name for self signed certificates, you MUST use pinning."); + return NO; + } + + NSMutableArray *policies = [NSMutableArray array]; + if (self.validatesDomainName) { + [policies addObject:(__bridge_transfer id)SecPolicyCreateSSL(true, (__bridge CFStringRef)domain)]; + } else { + [policies addObject:(__bridge_transfer id)SecPolicyCreateBasicX509()]; + } + + SecTrustSetPolicies(serverTrust, (__bridge CFArrayRef)policies); + + if (self.SSLPinningMode == AFSSLPinningModeNone) { + return self.allowInvalidCertificates || AFServerTrustIsValid(serverTrust); + } else if (!AFServerTrustIsValid(serverTrust) && !self.allowInvalidCertificates) { + return NO; + } + + switch (self.SSLPinningMode) { + case AFSSLPinningModeNone: + default: + return NO; + case AFSSLPinningModeCertificate: { + NSMutableArray *pinnedCertificates = [NSMutableArray array]; + for (NSData *certificateData in self.pinnedCertificates) { + [pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)]; + } + SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)pinnedCertificates); + + if (!AFServerTrustIsValid(serverTrust)) { + return NO; + } + + // obtain the chain after being validated, which *should* contain the pinned certificate in the last position (if it's the Root CA) + NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust); + + for (NSData *trustChainCertificate in [serverCertificates reverseObjectEnumerator]) { + if ([self.pinnedCertificates containsObject:trustChainCertificate]) { + return YES; + } + } + + return NO; + } + case AFSSLPinningModePublicKey: { + NSUInteger trustedPublicKeyCount = 0; + NSArray *publicKeys = AFPublicKeyTrustChainForServerTrust(serverTrust); + + for (id trustChainPublicKey in publicKeys) { + for (id pinnedPublicKey in self.pinnedPublicKeys) { + if (AFSecKeyIsEqualToKey((__bridge SecKeyRef)trustChainPublicKey, (__bridge SecKeyRef)pinnedPublicKey)) { + trustedPublicKeyCount += 1; + } + } + } + return trustedPublicKeyCount > 0; + } + } + + return NO; +} + +#pragma mark - NSKeyValueObserving + ++ (NSSet *)keyPathsForValuesAffectingPinnedPublicKeys { + return [NSSet setWithObject:@"pinnedCertificates"]; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + + self = [self init]; + if (!self) { + return nil; + } + + self.SSLPinningMode = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(SSLPinningMode))] unsignedIntegerValue]; + self.allowInvalidCertificates = [decoder decodeBoolForKey:NSStringFromSelector(@selector(allowInvalidCertificates))]; + self.validatesDomainName = [decoder decodeBoolForKey:NSStringFromSelector(@selector(validatesDomainName))]; + self.pinnedCertificates = [decoder decodeObjectOfClass:[NSArray class] forKey:NSStringFromSelector(@selector(pinnedCertificates))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:[NSNumber numberWithUnsignedInteger:self.SSLPinningMode] forKey:NSStringFromSelector(@selector(SSLPinningMode))]; + [coder encodeBool:self.allowInvalidCertificates forKey:NSStringFromSelector(@selector(allowInvalidCertificates))]; + [coder encodeBool:self.validatesDomainName forKey:NSStringFromSelector(@selector(validatesDomainName))]; + [coder encodeObject:self.pinnedCertificates forKey:NSStringFromSelector(@selector(pinnedCertificates))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFSecurityPolicy *securityPolicy = [[[self class] allocWithZone:zone] init]; + securityPolicy.SSLPinningMode = self.SSLPinningMode; + securityPolicy.allowInvalidCertificates = self.allowInvalidCertificates; + securityPolicy.validatesDomainName = self.validatesDomainName; + securityPolicy.pinnedCertificates = [self.pinnedCertificates copyWithZone:zone]; + + return securityPolicy; +} + +@end diff --git a/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h new file mode 100644 index 0000000..694696b --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h @@ -0,0 +1,479 @@ +// AFURLRequestSerialization.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import + +#if TARGET_OS_IOS || TARGET_OS_TV +#import +#elif TARGET_OS_WATCH +#import +#endif + +NS_ASSUME_NONNULL_BEGIN + +/** + Returns a percent-escaped string following RFC 3986 for a query string key or value. + RFC 3986 states that the following characters are "reserved" characters. + - General Delimiters: ":", "#", "[", "]", "@", "?", "/" + - Sub-Delimiters: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "=" + + In RFC 3986 - Section 3.4, it states that the "?" and "/" characters should not be escaped to allow + query strings to include a URL. Therefore, all "reserved" characters with the exception of "?" and "/" + should be percent-escaped in the query string. + + @param string The string to be percent-escaped. + + @return The percent-escaped string. + */ +FOUNDATION_EXPORT NSString * AFPercentEscapedStringFromString(NSString *string); + +/** + A helper method to generate encoded url query parameters for appending to the end of a URL. + + @param parameters A dictionary of key/values to be encoded. + + @return A url encoded query string + */ +FOUNDATION_EXPORT NSString * AFQueryStringFromParameters(NSDictionary *parameters); + +/** + The `AFURLRequestSerialization` protocol is adopted by an object that encodes parameters for a specified HTTP requests. Request serializers may encode parameters as query strings, HTTP bodies, setting the appropriate HTTP header fields as necessary. + + For example, a JSON request serializer may set the HTTP body of the request to a JSON representation, and set the `Content-Type` HTTP header field value to `application/json`. + */ +@protocol AFURLRequestSerialization + +/** + Returns a request with the specified parameters encoded into a copy of the original request. + + @param request The original request. + @param parameters The parameters to be encoded. + @param error The error that occurred while attempting to encode the request parameters. + + @return A serialized request. + */ +- (nullable NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(nullable id)parameters + error:(NSError * _Nullable __autoreleasing *)error NS_SWIFT_NOTHROW; + +@end + +#pragma mark - + +/** + + */ +typedef NS_ENUM(NSUInteger, AFHTTPRequestQueryStringSerializationStyle) { + AFHTTPRequestQueryStringDefaultStyle = 0, +}; + +@protocol AFMultipartFormData; + +/** + `AFHTTPRequestSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. + + Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPRequestSerializer` in order to ensure consistent default behavior. + */ +@interface AFHTTPRequestSerializer : NSObject + +/** + The string encoding used to serialize parameters. `NSUTF8StringEncoding` by default. + */ +@property (nonatomic, assign) NSStringEncoding stringEncoding; + +/** + Whether created requests can use the device’s cellular radio (if present). `YES` by default. + + @see NSMutableURLRequest -setAllowsCellularAccess: + */ +@property (nonatomic, assign) BOOL allowsCellularAccess; + +/** + The cache policy of created requests. `NSURLRequestUseProtocolCachePolicy` by default. + + @see NSMutableURLRequest -setCachePolicy: + */ +@property (nonatomic, assign) NSURLRequestCachePolicy cachePolicy; + +/** + Whether created requests should use the default cookie handling. `YES` by default. + + @see NSMutableURLRequest -setHTTPShouldHandleCookies: + */ +@property (nonatomic, assign) BOOL HTTPShouldHandleCookies; + +/** + Whether created requests can continue transmitting data before receiving a response from an earlier transmission. `NO` by default + + @see NSMutableURLRequest -setHTTPShouldUsePipelining: + */ +@property (nonatomic, assign) BOOL HTTPShouldUsePipelining; + +/** + The network service type for created requests. `NSURLNetworkServiceTypeDefault` by default. + + @see NSMutableURLRequest -setNetworkServiceType: + */ +@property (nonatomic, assign) NSURLRequestNetworkServiceType networkServiceType; + +/** + The timeout interval, in seconds, for created requests. The default timeout interval is 60 seconds. + + @see NSMutableURLRequest -setTimeoutInterval: + */ +@property (nonatomic, assign) NSTimeInterval timeoutInterval; + +///--------------------------------------- +/// @name Configuring HTTP Request Headers +///--------------------------------------- + +/** + Default HTTP header field values to be applied to serialized requests. By default, these include the following: + + - `Accept-Language` with the contents of `NSLocale +preferredLanguages` + - `User-Agent` with the contents of various bundle identifiers and OS designations + + @discussion To add or remove default request headers, use `setValue:forHTTPHeaderField:`. + */ +@property (readonly, nonatomic, strong) NSDictionary *HTTPRequestHeaders; + +/** + Creates and returns a serializer with default configuration. + */ ++ (instancetype)serializer; + +/** + Sets the value for the HTTP headers set in request objects made by the HTTP client. If `nil`, removes the existing value for that header. + + @param field The HTTP header to set a default value for + @param value The value set as default for the specified header, or `nil` + */ +- (void)setValue:(nullable NSString *)value +forHTTPHeaderField:(NSString *)field; + +/** + Returns the value for the HTTP headers set in the request serializer. + + @param field The HTTP header to retrieve the default value for + + @return The value set as default for the specified header, or `nil` + */ +- (nullable NSString *)valueForHTTPHeaderField:(NSString *)field; + +/** + Sets the "Authorization" HTTP header set in request objects made by the HTTP client to a basic authentication value with Base64-encoded username and password. This overwrites any existing value for this header. + + @param username The HTTP basic auth username + @param password The HTTP basic auth password + */ +- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username + password:(NSString *)password; + +/** + Clears any existing value for the "Authorization" HTTP header. + */ +- (void)clearAuthorizationHeader; + +///------------------------------------------------------- +/// @name Configuring Query String Parameter Serialization +///------------------------------------------------------- + +/** + HTTP methods for which serialized requests will encode parameters as a query string. `GET`, `HEAD`, and `DELETE` by default. + */ +@property (nonatomic, strong) NSSet *HTTPMethodsEncodingParametersInURI; + +/** + Set the method of query string serialization according to one of the pre-defined styles. + + @param style The serialization style. + + @see AFHTTPRequestQueryStringSerializationStyle + */ +- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style; + +/** + Set the a custom method of query string serialization according to the specified block. + + @param block A block that defines a process of encoding parameters into a query string. This block returns the query string and takes three arguments: the request, the parameters to encode, and the error that occurred when attempting to encode parameters for the given request. + */ +- (void)setQueryStringSerializationWithBlock:(nullable NSString * (^)(NSURLRequest *request, id parameters, NSError * __autoreleasing *error))block; + +///------------------------------- +/// @name Creating Request Objects +///------------------------------- + +/** + Creates an `NSMutableURLRequest` object with the specified HTTP method and URL string. + + If the HTTP method is `GET`, `HEAD`, or `DELETE`, the parameters will be used to construct a url-encoded query string that is appended to the request's URL. Otherwise, the parameters will be encoded according to the value of the `parameterEncoding` property, and set as the request body. + + @param method The HTTP method for the request, such as `GET`, `POST`, `PUT`, or `DELETE`. This parameter must not be `nil`. + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be either set as a query string for `GET` requests, or the request HTTP body. + @param error The error that occurred while constructing the request. + + @return An `NSMutableURLRequest` object. + */ +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(nullable id)parameters + error:(NSError * _Nullable __autoreleasing *)error; + +/** + Creates an `NSMutableURLRequest` object with the specified HTTP method and URLString, and constructs a `multipart/form-data` HTTP body, using the specified parameters and multipart form data block. See http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2 + + Multipart form requests are automatically streamed, reading files directly from disk along with in-memory data in a single HTTP body. The resulting `NSMutableURLRequest` object has an `HTTPBodyStream` property, so refrain from setting `HTTPBodyStream` or `HTTPBody` on this request object, as it will clear out the multipart form body stream. + + @param method The HTTP method for the request. This parameter must not be `GET` or `HEAD`, or `nil`. + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded and set in the request HTTP body. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param error The error that occurred while constructing the request. + + @return An `NSMutableURLRequest` object + */ +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(nullable NSDictionary *)parameters + constructingBodyWithBlock:(nullable void (^)(id formData))block + error:(NSError * _Nullable __autoreleasing *)error; + +/** + Creates an `NSMutableURLRequest` by removing the `HTTPBodyStream` from a request, and asynchronously writing its contents into the specified file, invoking the completion handler when finished. + + @param request The multipart form request. The `HTTPBodyStream` property of `request` must not be `nil`. + @param fileURL The file URL to write multipart form contents to. + @param handler A handler block to execute. + + @discussion There is a bug in `NSURLSessionTask` that causes requests to not send a `Content-Length` header when streaming contents from an HTTP body, which is notably problematic when interacting with the Amazon S3 webservice. As a workaround, this method takes a request constructed with `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:`, or any other request with an `HTTPBodyStream`, writes the contents to the specified file and returns a copy of the original request with the `HTTPBodyStream` property set to `nil`. From here, the file can either be passed to `AFURLSessionManager -uploadTaskWithRequest:fromFile:progress:completionHandler:`, or have its contents read into an `NSData` that's assigned to the `HTTPBody` property of the request. + + @see https://github.com/AFNetworking/AFNetworking/issues/1398 + */ +- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request + writingStreamContentsToFile:(NSURL *)fileURL + completionHandler:(nullable void (^)(NSError * _Nullable error))handler; + +@end + +#pragma mark - + +/** + The `AFMultipartFormData` protocol defines the methods supported by the parameter in the block argument of `AFHTTPRequestSerializer -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:`. + */ +@protocol AFMultipartFormData + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{generated filename}; name=#{name}"` and `Content-Type: #{generated mimeType}`, followed by the encoded file data and the multipart form boundary. + + The filename and MIME type for this data in the form will be automatically generated, using the last path component of the `fileURL` and system associated MIME type for the `fileURL` extension, respectively. + + @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param error If an error occurs, upon return contains an `NSError` object that describes the problem. + + @return `YES` if the file data was successfully appended, otherwise `NO`. + */ +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + error:(NSError * _Nullable __autoreleasing *)error; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. + + @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param fileName The file name to be used in the `Content-Disposition` header. This parameter must not be `nil`. + @param mimeType The declared MIME type of the file data. This parameter must not be `nil`. + @param error If an error occurs, upon return contains an `NSError` object that describes the problem. + + @return `YES` if the file data was successfully appended otherwise `NO`. + */ +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + error:(NSError * _Nullable __autoreleasing *)error; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the data from the input stream and the multipart form boundary. + + @param inputStream The input stream to be appended to the form data + @param name The name to be associated with the specified input stream. This parameter must not be `nil`. + @param fileName The filename to be associated with the specified input stream. This parameter must not be `nil`. + @param length The length of the specified input stream in bytes. + @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. + */ +- (void)appendPartWithInputStream:(nullable NSInputStream *)inputStream + name:(NSString *)name + fileName:(NSString *)fileName + length:(int64_t)length + mimeType:(NSString *)mimeType; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. + + @param data The data to be encoded and appended to the form data. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param fileName The filename to be associated with the specified data. This parameter must not be `nil`. + @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. + */ +- (void)appendPartWithFileData:(NSData *)data + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType; + +/** + Appends the HTTP headers `Content-Disposition: form-data; name=#{name}"`, followed by the encoded data and the multipart form boundary. + + @param data The data to be encoded and appended to the form data. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + */ + +- (void)appendPartWithFormData:(NSData *)data + name:(NSString *)name; + + +/** + Appends HTTP headers, followed by the encoded data and the multipart form boundary. + + @param headers The HTTP headers to be appended to the form data. + @param body The data to be encoded and appended to the form data. This parameter must not be `nil`. + */ +- (void)appendPartWithHeaders:(nullable NSDictionary *)headers + body:(NSData *)body; + +/** + Throttles request bandwidth by limiting the packet size and adding a delay for each chunk read from the upload stream. + + When uploading over a 3G or EDGE connection, requests may fail with "request body stream exhausted". Setting a maximum packet size and delay according to the recommended values (`kAFUploadStream3GSuggestedPacketSize` and `kAFUploadStream3GSuggestedDelay`) lowers the risk of the input stream exceeding its allocated bandwidth. Unfortunately, there is no definite way to distinguish between a 3G, EDGE, or LTE connection over `NSURLConnection`. As such, it is not recommended that you throttle bandwidth based solely on network reachability. Instead, you should consider checking for the "request body stream exhausted" in a failure block, and then retrying the request with throttled bandwidth. + + @param numberOfBytes Maximum packet size, in number of bytes. The default packet size for an input stream is 16kb. + @param delay Duration of delay each time a packet is read. By default, no delay is set. + */ +- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes + delay:(NSTimeInterval)delay; + +@end + +#pragma mark - + +/** + `AFJSONRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSJSONSerialization`, setting the `Content-Type` of the encoded request to `application/json`. + */ +@interface AFJSONRequestSerializer : AFHTTPRequestSerializer + +/** + Options for writing the request JSON data from Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONWritingOptions". `0` by default. + */ +@property (nonatomic, assign) NSJSONWritingOptions writingOptions; + +/** + Creates and returns a JSON serializer with specified reading and writing options. + + @param writingOptions The specified JSON writing options. + */ ++ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions; + +@end + +#pragma mark - + +/** + `AFPropertyListRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSPropertyListSerializer`, setting the `Content-Type` of the encoded request to `application/x-plist`. + */ +@interface AFPropertyListRequestSerializer : AFHTTPRequestSerializer + +/** + The property list format. Possible values are described in "NSPropertyListFormat". + */ +@property (nonatomic, assign) NSPropertyListFormat format; + +/** + @warning The `writeOptions` property is currently unused. + */ +@property (nonatomic, assign) NSPropertyListWriteOptions writeOptions; + +/** + Creates and returns a property list serializer with a specified format, read options, and write options. + + @param format The property list format. + @param writeOptions The property list write options. + + @warning The `writeOptions` property is currently unused. + */ ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + writeOptions:(NSPropertyListWriteOptions)writeOptions; + +@end + +#pragma mark - + +///---------------- +/// @name Constants +///---------------- + +/** + ## Error Domains + + The following error domain is predefined. + + - `NSString * const AFURLRequestSerializationErrorDomain` + + ### Constants + + `AFURLRequestSerializationErrorDomain` + AFURLRequestSerializer errors. Error codes for `AFURLRequestSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`. + */ +FOUNDATION_EXPORT NSString * const AFURLRequestSerializationErrorDomain; + +/** + ## User info dictionary keys + + These keys may exist in the user info dictionary, in addition to those defined for NSError. + + - `NSString * const AFNetworkingOperationFailingURLRequestErrorKey` + + ### Constants + + `AFNetworkingOperationFailingURLRequestErrorKey` + The corresponding value is an `NSURLRequest` containing the request of the operation associated with an error. This key is only present in the `AFURLRequestSerializationErrorDomain`. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingOperationFailingURLRequestErrorKey; + +/** + ## Throttling Bandwidth for HTTP Request Input Streams + + @see -throttleBandwidthWithPacketSize:delay: + + ### Constants + + `kAFUploadStream3GSuggestedPacketSize` + Maximum packet size, in number of bytes. Equal to 16kb. + + `kAFUploadStream3GSuggestedDelay` + Duration of delay each time a packet is read. Equal to 0.2 seconds. + */ +FOUNDATION_EXPORT NSUInteger const kAFUploadStream3GSuggestedPacketSize; +FOUNDATION_EXPORT NSTimeInterval const kAFUploadStream3GSuggestedDelay; + +NS_ASSUME_NONNULL_END diff --git a/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m new file mode 100644 index 0000000..9a2ac98 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m @@ -0,0 +1,1376 @@ +// AFURLRequestSerialization.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFURLRequestSerialization.h" + +#if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_TV +#import +#else +#import +#endif + +NSString * const AFURLRequestSerializationErrorDomain = @"com.alamofire.error.serialization.request"; +NSString * const AFNetworkingOperationFailingURLRequestErrorKey = @"com.alamofire.serialization.request.error.response"; + +typedef NSString * (^AFQueryStringSerializationBlock)(NSURLRequest *request, id parameters, NSError *__autoreleasing *error); + +/** + Returns a percent-escaped string following RFC 3986 for a query string key or value. + RFC 3986 states that the following characters are "reserved" characters. + - General Delimiters: ":", "#", "[", "]", "@", "?", "/" + - Sub-Delimiters: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "=" + + In RFC 3986 - Section 3.4, it states that the "?" and "/" characters should not be escaped to allow + query strings to include a URL. Therefore, all "reserved" characters with the exception of "?" and "/" + should be percent-escaped in the query string. + - parameter string: The string to be percent-escaped. + - returns: The percent-escaped string. + */ +NSString * AFPercentEscapedStringFromString(NSString *string) { + static NSString * const kAFCharactersGeneralDelimitersToEncode = @":#[]@"; // does not include "?" or "/" due to RFC 3986 - Section 3.4 + static NSString * const kAFCharactersSubDelimitersToEncode = @"!$&'()*+,;="; + + NSMutableCharacterSet * allowedCharacterSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy]; + [allowedCharacterSet removeCharactersInString:[kAFCharactersGeneralDelimitersToEncode stringByAppendingString:kAFCharactersSubDelimitersToEncode]]; + + // FIXME: https://github.com/AFNetworking/AFNetworking/pull/3028 + // return [string stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet]; + + static NSUInteger const batchSize = 50; + + NSUInteger index = 0; + NSMutableString *escaped = @"".mutableCopy; + + while (index < string.length) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wgnu" + NSUInteger length = MIN(string.length - index, batchSize); +#pragma GCC diagnostic pop + NSRange range = NSMakeRange(index, length); + + // To avoid breaking up character sequences such as 👴🏻👮🏽 + range = [string rangeOfComposedCharacterSequencesForRange:range]; + + NSString *substring = [string substringWithRange:range]; + NSString *encoded = [substring stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet]; + [escaped appendString:encoded]; + + index += range.length; + } + + return escaped; +} + +#pragma mark - + +@interface AFQueryStringPair : NSObject +@property (readwrite, nonatomic, strong) id field; +@property (readwrite, nonatomic, strong) id value; + +- (instancetype)initWithField:(id)field value:(id)value; + +- (NSString *)URLEncodedStringValue; +@end + +@implementation AFQueryStringPair + +- (instancetype)initWithField:(id)field value:(id)value { + self = [super init]; + if (!self) { + return nil; + } + + self.field = field; + self.value = value; + + return self; +} + +- (NSString *)URLEncodedStringValue { + if (!self.value || [self.value isEqual:[NSNull null]]) { + return AFPercentEscapedStringFromString([self.field description]); + } else { + return [NSString stringWithFormat:@"%@=%@", AFPercentEscapedStringFromString([self.field description]), AFPercentEscapedStringFromString([self.value description])]; + } +} + +@end + +#pragma mark - + +FOUNDATION_EXPORT NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary); +FOUNDATION_EXPORT NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value); + +NSString * AFQueryStringFromParameters(NSDictionary *parameters) { + NSMutableArray *mutablePairs = [NSMutableArray array]; + for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) { + [mutablePairs addObject:[pair URLEncodedStringValue]]; + } + + return [mutablePairs componentsJoinedByString:@"&"]; +} + +NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary) { + return AFQueryStringPairsFromKeyAndValue(nil, dictionary); +} + +NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value) { + NSMutableArray *mutableQueryStringComponents = [NSMutableArray array]; + + NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES selector:@selector(compare:)]; + + if ([value isKindOfClass:[NSDictionary class]]) { + NSDictionary *dictionary = value; + // Sort dictionary keys to ensure consistent ordering in query string, which is important when deserializing potentially ambiguous sequences, such as an array of dictionaries + for (id nestedKey in [dictionary.allKeys sortedArrayUsingDescriptors:@[ sortDescriptor ]]) { + id nestedValue = dictionary[nestedKey]; + if (nestedValue) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue((key ? [NSString stringWithFormat:@"%@[%@]", key, nestedKey] : nestedKey), nestedValue)]; + } + } + } else if ([value isKindOfClass:[NSArray class]]) { + NSArray *array = value; + for (id nestedValue in array) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue([NSString stringWithFormat:@"%@[]", key], nestedValue)]; + } + } else if ([value isKindOfClass:[NSSet class]]) { + NSSet *set = value; + for (id obj in [set sortedArrayUsingDescriptors:@[ sortDescriptor ]]) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue(key, obj)]; + } + } else { + [mutableQueryStringComponents addObject:[[AFQueryStringPair alloc] initWithField:key value:value]]; + } + + return mutableQueryStringComponents; +} + +#pragma mark - + +@interface AFStreamingMultipartFormData : NSObject +- (instancetype)initWithURLRequest:(NSMutableURLRequest *)urlRequest + stringEncoding:(NSStringEncoding)encoding; + +- (NSMutableURLRequest *)requestByFinalizingMultipartFormData; +@end + +#pragma mark - + +static NSArray * AFHTTPRequestSerializerObservedKeyPaths() { + static NSArray *_AFHTTPRequestSerializerObservedKeyPaths = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _AFHTTPRequestSerializerObservedKeyPaths = @[NSStringFromSelector(@selector(allowsCellularAccess)), NSStringFromSelector(@selector(cachePolicy)), NSStringFromSelector(@selector(HTTPShouldHandleCookies)), NSStringFromSelector(@selector(HTTPShouldUsePipelining)), NSStringFromSelector(@selector(networkServiceType)), NSStringFromSelector(@selector(timeoutInterval))]; + }); + + return _AFHTTPRequestSerializerObservedKeyPaths; +} + +static void *AFHTTPRequestSerializerObserverContext = &AFHTTPRequestSerializerObserverContext; + +@interface AFHTTPRequestSerializer () +@property (readwrite, nonatomic, strong) NSMutableSet *mutableObservedChangedKeyPaths; +@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableHTTPRequestHeaders; +@property (readwrite, nonatomic, assign) AFHTTPRequestQueryStringSerializationStyle queryStringSerializationStyle; +@property (readwrite, nonatomic, copy) AFQueryStringSerializationBlock queryStringSerialization; +@end + +@implementation AFHTTPRequestSerializer + ++ (instancetype)serializer { + return [[self alloc] init]; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = NSUTF8StringEncoding; + + self.mutableHTTPRequestHeaders = [NSMutableDictionary dictionary]; + + // Accept-Language HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4 + NSMutableArray *acceptLanguagesComponents = [NSMutableArray array]; + [[NSLocale preferredLanguages] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + float q = 1.0f - (idx * 0.1f); + [acceptLanguagesComponents addObject:[NSString stringWithFormat:@"%@;q=%0.1g", obj, q]]; + *stop = q <= 0.5f; + }]; + [self setValue:[acceptLanguagesComponents componentsJoinedByString:@", "] forHTTPHeaderField:@"Accept-Language"]; + + NSString *userAgent = nil; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" +#if TARGET_OS_IOS + // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 + userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], [[UIScreen mainScreen] scale]]; +#elif TARGET_OS_WATCH + // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 + userAgent = [NSString stringWithFormat:@"%@/%@ (%@; watchOS %@; Scale/%0.2f)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[WKInterfaceDevice currentDevice] model], [[WKInterfaceDevice currentDevice] systemVersion], [[WKInterfaceDevice currentDevice] screenScale]]; +#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) + userAgent = [NSString stringWithFormat:@"%@/%@ (Mac OS X %@)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[NSProcessInfo processInfo] operatingSystemVersionString]]; +#endif +#pragma clang diagnostic pop + if (userAgent) { + if (![userAgent canBeConvertedToEncoding:NSASCIIStringEncoding]) { + NSMutableString *mutableUserAgent = [userAgent mutableCopy]; + if (CFStringTransform((__bridge CFMutableStringRef)(mutableUserAgent), NULL, (__bridge CFStringRef)@"Any-Latin; Latin-ASCII; [:^ASCII:] Remove", false)) { + userAgent = mutableUserAgent; + } + } + [self setValue:userAgent forHTTPHeaderField:@"User-Agent"]; + } + + // HTTP Method Definitions; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html + self.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", @"DELETE", nil]; + + self.mutableObservedChangedKeyPaths = [NSMutableSet set]; + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self respondsToSelector:NSSelectorFromString(keyPath)]) { + [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:AFHTTPRequestSerializerObserverContext]; + } + } + + return self; +} + +- (void)dealloc { + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self respondsToSelector:NSSelectorFromString(keyPath)]) { + [self removeObserver:self forKeyPath:keyPath context:AFHTTPRequestSerializerObserverContext]; + } + } +} + +#pragma mark - + +// Workarounds for crashing behavior using Key-Value Observing with XCTest +// See https://github.com/AFNetworking/AFNetworking/issues/2523 + +- (void)setAllowsCellularAccess:(BOOL)allowsCellularAccess { + [self willChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))]; + _allowsCellularAccess = allowsCellularAccess; + [self didChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))]; +} + +- (void)setCachePolicy:(NSURLRequestCachePolicy)cachePolicy { + [self willChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))]; + _cachePolicy = cachePolicy; + [self didChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))]; +} + +- (void)setHTTPShouldHandleCookies:(BOOL)HTTPShouldHandleCookies { + [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))]; + _HTTPShouldHandleCookies = HTTPShouldHandleCookies; + [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))]; +} + +- (void)setHTTPShouldUsePipelining:(BOOL)HTTPShouldUsePipelining { + [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))]; + _HTTPShouldUsePipelining = HTTPShouldUsePipelining; + [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))]; +} + +- (void)setNetworkServiceType:(NSURLRequestNetworkServiceType)networkServiceType { + [self willChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))]; + _networkServiceType = networkServiceType; + [self didChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))]; +} + +- (void)setTimeoutInterval:(NSTimeInterval)timeoutInterval { + [self willChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))]; + _timeoutInterval = timeoutInterval; + [self didChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))]; +} + +#pragma mark - + +- (NSDictionary *)HTTPRequestHeaders { + return [NSDictionary dictionaryWithDictionary:self.mutableHTTPRequestHeaders]; +} + +- (void)setValue:(NSString *)value +forHTTPHeaderField:(NSString *)field +{ + [self.mutableHTTPRequestHeaders setValue:value forKey:field]; +} + +- (NSString *)valueForHTTPHeaderField:(NSString *)field { + return [self.mutableHTTPRequestHeaders valueForKey:field]; +} + +- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username + password:(NSString *)password +{ + NSData *basicAuthCredentials = [[NSString stringWithFormat:@"%@:%@", username, password] dataUsingEncoding:NSUTF8StringEncoding]; + NSString *base64AuthCredentials = [basicAuthCredentials base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)0]; + [self setValue:[NSString stringWithFormat:@"Basic %@", base64AuthCredentials] forHTTPHeaderField:@"Authorization"]; +} + +- (void)clearAuthorizationHeader { + [self.mutableHTTPRequestHeaders removeObjectForKey:@"Authorization"]; +} + +#pragma mark - + +- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style { + self.queryStringSerializationStyle = style; + self.queryStringSerialization = nil; +} + +- (void)setQueryStringSerializationWithBlock:(NSString *(^)(NSURLRequest *, id, NSError *__autoreleasing *))block { + self.queryStringSerialization = block; +} + +#pragma mark - + +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(method); + NSParameterAssert(URLString); + + NSURL *url = [NSURL URLWithString:URLString]; + + NSParameterAssert(url); + + NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:url]; + mutableRequest.HTTPMethod = method; + + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self.mutableObservedChangedKeyPaths containsObject:keyPath]) { + [mutableRequest setValue:[self valueForKeyPath:keyPath] forKey:keyPath]; + } + } + + mutableRequest = [[self requestBySerializingRequest:mutableRequest withParameters:parameters error:error] mutableCopy]; + + return mutableRequest; +} + +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(NSDictionary *)parameters + constructingBodyWithBlock:(void (^)(id formData))block + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(method); + NSParameterAssert(![method isEqualToString:@"GET"] && ![method isEqualToString:@"HEAD"]); + + NSMutableURLRequest *mutableRequest = [self requestWithMethod:method URLString:URLString parameters:nil error:error]; + + __block AFStreamingMultipartFormData *formData = [[AFStreamingMultipartFormData alloc] initWithURLRequest:mutableRequest stringEncoding:NSUTF8StringEncoding]; + + if (parameters) { + for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) { + NSData *data = nil; + if ([pair.value isKindOfClass:[NSData class]]) { + data = pair.value; + } else if ([pair.value isEqual:[NSNull null]]) { + data = [NSData data]; + } else { + data = [[pair.value description] dataUsingEncoding:self.stringEncoding]; + } + + if (data) { + [formData appendPartWithFormData:data name:[pair.field description]]; + } + } + } + + if (block) { + block(formData); + } + + return [formData requestByFinalizingMultipartFormData]; +} + +- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request + writingStreamContentsToFile:(NSURL *)fileURL + completionHandler:(void (^)(NSError *error))handler +{ + NSParameterAssert(request.HTTPBodyStream); + NSParameterAssert([fileURL isFileURL]); + + NSInputStream *inputStream = request.HTTPBodyStream; + NSOutputStream *outputStream = [[NSOutputStream alloc] initWithURL:fileURL append:NO]; + __block NSError *error = nil; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + + [inputStream open]; + [outputStream open]; + + while ([inputStream hasBytesAvailable] && [outputStream hasSpaceAvailable]) { + uint8_t buffer[1024]; + + NSInteger bytesRead = [inputStream read:buffer maxLength:1024]; + if (inputStream.streamError || bytesRead < 0) { + error = inputStream.streamError; + break; + } + + NSInteger bytesWritten = [outputStream write:buffer maxLength:(NSUInteger)bytesRead]; + if (outputStream.streamError || bytesWritten < 0) { + error = outputStream.streamError; + break; + } + + if (bytesRead == 0 && bytesWritten == 0) { + break; + } + } + + [outputStream close]; + [inputStream close]; + + if (handler) { + dispatch_async(dispatch_get_main_queue(), ^{ + handler(error); + }); + } + }); + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + mutableRequest.HTTPBodyStream = nil; + + return mutableRequest; +} + +#pragma mark - AFURLRequestSerialization + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + NSString *query = nil; + if (parameters) { + if (self.queryStringSerialization) { + NSError *serializationError; + query = self.queryStringSerialization(request, parameters, &serializationError); + + if (serializationError) { + if (error) { + *error = serializationError; + } + + return nil; + } + } else { + switch (self.queryStringSerializationStyle) { + case AFHTTPRequestQueryStringDefaultStyle: + query = AFQueryStringFromParameters(parameters); + break; + } + } + } + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + if (query && query.length > 0) { + mutableRequest.URL = [NSURL URLWithString:[[mutableRequest.URL absoluteString] stringByAppendingFormat:mutableRequest.URL.query ? @"&%@" : @"?%@", query]]; + } + } else { + // #2864: an empty string is a valid x-www-form-urlencoded payload + if (!query) { + query = @""; + } + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; + } + [mutableRequest setHTTPBody:[query dataUsingEncoding:self.stringEncoding]]; + } + + return mutableRequest; +} + +#pragma mark - NSKeyValueObserving + ++ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key { + if ([AFHTTPRequestSerializerObservedKeyPaths() containsObject:key]) { + return NO; + } + + return [super automaticallyNotifiesObserversForKey:key]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(__unused id)object + change:(NSDictionary *)change + context:(void *)context +{ + if (context == AFHTTPRequestSerializerObserverContext) { + if ([change[NSKeyValueChangeNewKey] isEqual:[NSNull null]]) { + [self.mutableObservedChangedKeyPaths removeObject:keyPath]; + } else { + [self.mutableObservedChangedKeyPaths addObject:keyPath]; + } + } +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [self init]; + if (!self) { + return nil; + } + + self.mutableHTTPRequestHeaders = [[decoder decodeObjectOfClass:[NSDictionary class] forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))] mutableCopy]; + self.queryStringSerializationStyle = (AFHTTPRequestQueryStringSerializationStyle)[[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.mutableHTTPRequestHeaders forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))]; + [coder encodeInteger:self.queryStringSerializationStyle forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFHTTPRequestSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.mutableHTTPRequestHeaders = [self.mutableHTTPRequestHeaders mutableCopyWithZone:zone]; + serializer.queryStringSerializationStyle = self.queryStringSerializationStyle; + serializer.queryStringSerialization = self.queryStringSerialization; + + return serializer; +} + +@end + +#pragma mark - + +static NSString * AFCreateMultipartFormBoundary() { + return [NSString stringWithFormat:@"Boundary+%08X%08X", arc4random(), arc4random()]; +} + +static NSString * const kAFMultipartFormCRLF = @"\r\n"; + +static inline NSString * AFMultipartFormInitialBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"--%@%@", boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFMultipartFormEncapsulationBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"%@--%@%@", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFMultipartFormFinalBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"%@--%@--%@", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFContentTypeForPathExtension(NSString *extension) { + NSString *UTI = (__bridge_transfer NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)extension, NULL); + NSString *contentType = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)UTI, kUTTagClassMIMEType); + if (!contentType) { + return @"application/octet-stream"; + } else { + return contentType; + } +} + +NSUInteger const kAFUploadStream3GSuggestedPacketSize = 1024 * 16; +NSTimeInterval const kAFUploadStream3GSuggestedDelay = 0.2; + +@interface AFHTTPBodyPart : NSObject +@property (nonatomic, assign) NSStringEncoding stringEncoding; +@property (nonatomic, strong) NSDictionary *headers; +@property (nonatomic, copy) NSString *boundary; +@property (nonatomic, strong) id body; +@property (nonatomic, assign) unsigned long long bodyContentLength; +@property (nonatomic, strong) NSInputStream *inputStream; + +@property (nonatomic, assign) BOOL hasInitialBoundary; +@property (nonatomic, assign) BOOL hasFinalBoundary; + +@property (readonly, nonatomic, assign, getter = hasBytesAvailable) BOOL bytesAvailable; +@property (readonly, nonatomic, assign) unsigned long long contentLength; + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length; +@end + +@interface AFMultipartBodyStream : NSInputStream +@property (nonatomic, assign) NSUInteger numberOfBytesInPacket; +@property (nonatomic, assign) NSTimeInterval delay; +@property (nonatomic, strong) NSInputStream *inputStream; +@property (readonly, nonatomic, assign) unsigned long long contentLength; +@property (readonly, nonatomic, assign, getter = isEmpty) BOOL empty; + +- (instancetype)initWithStringEncoding:(NSStringEncoding)encoding; +- (void)setInitialAndFinalBoundaries; +- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart; +@end + +#pragma mark - + +@interface AFStreamingMultipartFormData () +@property (readwrite, nonatomic, copy) NSMutableURLRequest *request; +@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding; +@property (readwrite, nonatomic, copy) NSString *boundary; +@property (readwrite, nonatomic, strong) AFMultipartBodyStream *bodyStream; +@end + +@implementation AFStreamingMultipartFormData + +- (instancetype)initWithURLRequest:(NSMutableURLRequest *)urlRequest + stringEncoding:(NSStringEncoding)encoding +{ + self = [super init]; + if (!self) { + return nil; + } + + self.request = urlRequest; + self.stringEncoding = encoding; + self.boundary = AFCreateMultipartFormBoundary(); + self.bodyStream = [[AFMultipartBodyStream alloc] initWithStringEncoding:encoding]; + + return self; +} + +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + error:(NSError * __autoreleasing *)error +{ + NSParameterAssert(fileURL); + NSParameterAssert(name); + + NSString *fileName = [fileURL lastPathComponent]; + NSString *mimeType = AFContentTypeForPathExtension([fileURL pathExtension]); + + return [self appendPartWithFileURL:fileURL name:name fileName:fileName mimeType:mimeType error:error]; +} + +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + error:(NSError * __autoreleasing *)error +{ + NSParameterAssert(fileURL); + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + if (![fileURL isFileURL]) { + NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@"Expected URL to be a file URL", @"AFNetworking", nil)}; + if (error) { + *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo]; + } + + return NO; + } else if ([fileURL checkResourceIsReachableAndReturnError:error] == NO) { + NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@"File URL not reachable.", @"AFNetworking", nil)}; + if (error) { + *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo]; + } + + return NO; + } + + NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[fileURL path] error:error]; + if (!fileAttributes) { + return NO; + } + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = mutableHeaders; + bodyPart.boundary = self.boundary; + bodyPart.body = fileURL; + bodyPart.bodyContentLength = [fileAttributes[NSFileSize] unsignedLongLongValue]; + [self.bodyStream appendHTTPBodyPart:bodyPart]; + + return YES; +} + +- (void)appendPartWithInputStream:(NSInputStream *)inputStream + name:(NSString *)name + fileName:(NSString *)fileName + length:(int64_t)length + mimeType:(NSString *)mimeType +{ + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = mutableHeaders; + bodyPart.boundary = self.boundary; + bodyPart.body = inputStream; + + bodyPart.bodyContentLength = (unsigned long long)length; + + [self.bodyStream appendHTTPBodyPart:bodyPart]; +} + +- (void)appendPartWithFileData:(NSData *)data + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType +{ + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + [self appendPartWithHeaders:mutableHeaders body:data]; +} + +- (void)appendPartWithFormData:(NSData *)data + name:(NSString *)name +{ + NSParameterAssert(name); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"", name] forKey:@"Content-Disposition"]; + + [self appendPartWithHeaders:mutableHeaders body:data]; +} + +- (void)appendPartWithHeaders:(NSDictionary *)headers + body:(NSData *)body +{ + NSParameterAssert(body); + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = headers; + bodyPart.boundary = self.boundary; + bodyPart.bodyContentLength = [body length]; + bodyPart.body = body; + + [self.bodyStream appendHTTPBodyPart:bodyPart]; +} + +- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes + delay:(NSTimeInterval)delay +{ + self.bodyStream.numberOfBytesInPacket = numberOfBytes; + self.bodyStream.delay = delay; +} + +- (NSMutableURLRequest *)requestByFinalizingMultipartFormData { + if ([self.bodyStream isEmpty]) { + return self.request; + } + + // Reset the initial and final boundaries to ensure correct Content-Length + [self.bodyStream setInitialAndFinalBoundaries]; + [self.request setHTTPBodyStream:self.bodyStream]; + + [self.request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", self.boundary] forHTTPHeaderField:@"Content-Type"]; + [self.request setValue:[NSString stringWithFormat:@"%llu", [self.bodyStream contentLength]] forHTTPHeaderField:@"Content-Length"]; + + return self.request; +} + +@end + +#pragma mark - + +@interface NSStream () +@property (readwrite) NSStreamStatus streamStatus; +@property (readwrite, copy) NSError *streamError; +@end + +@interface AFMultipartBodyStream () +@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding; +@property (readwrite, nonatomic, strong) NSMutableArray *HTTPBodyParts; +@property (readwrite, nonatomic, strong) NSEnumerator *HTTPBodyPartEnumerator; +@property (readwrite, nonatomic, strong) AFHTTPBodyPart *currentHTTPBodyPart; +@property (readwrite, nonatomic, strong) NSOutputStream *outputStream; +@property (readwrite, nonatomic, strong) NSMutableData *buffer; +@end + +@implementation AFMultipartBodyStream +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wimplicit-atomic-properties" +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1100) +@synthesize delegate; +#endif +@synthesize streamStatus; +@synthesize streamError; +#pragma clang diagnostic pop + +- (instancetype)initWithStringEncoding:(NSStringEncoding)encoding { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = encoding; + self.HTTPBodyParts = [NSMutableArray array]; + self.numberOfBytesInPacket = NSIntegerMax; + + return self; +} + +- (void)setInitialAndFinalBoundaries { + if ([self.HTTPBodyParts count] > 0) { + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + bodyPart.hasInitialBoundary = NO; + bodyPart.hasFinalBoundary = NO; + } + + [[self.HTTPBodyParts firstObject] setHasInitialBoundary:YES]; + [[self.HTTPBodyParts lastObject] setHasFinalBoundary:YES]; + } +} + +- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart { + [self.HTTPBodyParts addObject:bodyPart]; +} + +- (BOOL)isEmpty { + return [self.HTTPBodyParts count] == 0; +} + +#pragma mark - NSInputStream + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ + if ([self streamStatus] == NSStreamStatusClosed) { + return 0; + } + + NSInteger totalNumberOfBytesRead = 0; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + while ((NSUInteger)totalNumberOfBytesRead < MIN(length, self.numberOfBytesInPacket)) { + if (!self.currentHTTPBodyPart || ![self.currentHTTPBodyPart hasBytesAvailable]) { + if (!(self.currentHTTPBodyPart = [self.HTTPBodyPartEnumerator nextObject])) { + break; + } + } else { + NSUInteger maxLength = MIN(length, self.numberOfBytesInPacket) - (NSUInteger)totalNumberOfBytesRead; + NSInteger numberOfBytesRead = [self.currentHTTPBodyPart read:&buffer[totalNumberOfBytesRead] maxLength:maxLength]; + if (numberOfBytesRead == -1) { + self.streamError = self.currentHTTPBodyPart.inputStream.streamError; + break; + } else { + totalNumberOfBytesRead += numberOfBytesRead; + + if (self.delay > 0.0f) { + [NSThread sleepForTimeInterval:self.delay]; + } + } + } + } +#pragma clang diagnostic pop + + return totalNumberOfBytesRead; +} + +- (BOOL)getBuffer:(__unused uint8_t **)buffer + length:(__unused NSUInteger *)len +{ + return NO; +} + +- (BOOL)hasBytesAvailable { + return [self streamStatus] == NSStreamStatusOpen; +} + +#pragma mark - NSStream + +- (void)open { + if (self.streamStatus == NSStreamStatusOpen) { + return; + } + + self.streamStatus = NSStreamStatusOpen; + + [self setInitialAndFinalBoundaries]; + self.HTTPBodyPartEnumerator = [self.HTTPBodyParts objectEnumerator]; +} + +- (void)close { + self.streamStatus = NSStreamStatusClosed; +} + +- (id)propertyForKey:(__unused NSString *)key { + return nil; +} + +- (BOOL)setProperty:(__unused id)property + forKey:(__unused NSString *)key +{ + return NO; +} + +- (void)scheduleInRunLoop:(__unused NSRunLoop *)aRunLoop + forMode:(__unused NSString *)mode +{} + +- (void)removeFromRunLoop:(__unused NSRunLoop *)aRunLoop + forMode:(__unused NSString *)mode +{} + +- (unsigned long long)contentLength { + unsigned long long length = 0; + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + length += [bodyPart contentLength]; + } + + return length; +} + +#pragma mark - Undocumented CFReadStream Bridged Methods + +- (void)_scheduleInCFRunLoop:(__unused CFRunLoopRef)aRunLoop + forMode:(__unused CFStringRef)aMode +{} + +- (void)_unscheduleFromCFRunLoop:(__unused CFRunLoopRef)aRunLoop + forMode:(__unused CFStringRef)aMode +{} + +- (BOOL)_setCFClientFlags:(__unused CFOptionFlags)inFlags + callback:(__unused CFReadStreamClientCallBack)inCallback + context:(__unused CFStreamClientContext *)inContext { + return NO; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFMultipartBodyStream *bodyStreamCopy = [[[self class] allocWithZone:zone] initWithStringEncoding:self.stringEncoding]; + + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + [bodyStreamCopy appendHTTPBodyPart:[bodyPart copy]]; + } + + [bodyStreamCopy setInitialAndFinalBoundaries]; + + return bodyStreamCopy; +} + +@end + +#pragma mark - + +typedef enum { + AFEncapsulationBoundaryPhase = 1, + AFHeaderPhase = 2, + AFBodyPhase = 3, + AFFinalBoundaryPhase = 4, +} AFHTTPBodyPartReadPhase; + +@interface AFHTTPBodyPart () { + AFHTTPBodyPartReadPhase _phase; + NSInputStream *_inputStream; + unsigned long long _phaseReadOffset; +} + +- (BOOL)transitionToNextPhase; +- (NSInteger)readData:(NSData *)data + intoBuffer:(uint8_t *)buffer + maxLength:(NSUInteger)length; +@end + +@implementation AFHTTPBodyPart + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + [self transitionToNextPhase]; + + return self; +} + +- (void)dealloc { + if (_inputStream) { + [_inputStream close]; + _inputStream = nil; + } +} + +- (NSInputStream *)inputStream { + if (!_inputStream) { + if ([self.body isKindOfClass:[NSData class]]) { + _inputStream = [NSInputStream inputStreamWithData:self.body]; + } else if ([self.body isKindOfClass:[NSURL class]]) { + _inputStream = [NSInputStream inputStreamWithURL:self.body]; + } else if ([self.body isKindOfClass:[NSInputStream class]]) { + _inputStream = self.body; + } else { + _inputStream = [NSInputStream inputStreamWithData:[NSData data]]; + } + } + + return _inputStream; +} + +- (NSString *)stringForHeaders { + NSMutableString *headerString = [NSMutableString string]; + for (NSString *field in [self.headers allKeys]) { + [headerString appendString:[NSString stringWithFormat:@"%@: %@%@", field, [self.headers valueForKey:field], kAFMultipartFormCRLF]]; + } + [headerString appendString:kAFMultipartFormCRLF]; + + return [NSString stringWithString:headerString]; +} + +- (unsigned long long)contentLength { + unsigned long long length = 0; + + NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding]; + length += [encapsulationBoundaryData length]; + + NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding]; + length += [headersData length]; + + length += _bodyContentLength; + + NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]); + length += [closingBoundaryData length]; + + return length; +} + +- (BOOL)hasBytesAvailable { + // Allows `read:maxLength:` to be called again if `AFMultipartFormFinalBoundary` doesn't fit into the available buffer + if (_phase == AFFinalBoundaryPhase) { + return YES; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcovered-switch-default" + switch (self.inputStream.streamStatus) { + case NSStreamStatusNotOpen: + case NSStreamStatusOpening: + case NSStreamStatusOpen: + case NSStreamStatusReading: + case NSStreamStatusWriting: + return YES; + case NSStreamStatusAtEnd: + case NSStreamStatusClosed: + case NSStreamStatusError: + default: + return NO; + } +#pragma clang diagnostic pop +} + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ + NSInteger totalNumberOfBytesRead = 0; + + if (_phase == AFEncapsulationBoundaryPhase) { + NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding]; + totalNumberOfBytesRead += [self readData:encapsulationBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + if (_phase == AFHeaderPhase) { + NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding]; + totalNumberOfBytesRead += [self readData:headersData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + if (_phase == AFBodyPhase) { + NSInteger numberOfBytesRead = 0; + + numberOfBytesRead = [self.inputStream read:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + if (numberOfBytesRead == -1) { + return -1; + } else { + totalNumberOfBytesRead += numberOfBytesRead; + + if ([self.inputStream streamStatus] >= NSStreamStatusAtEnd) { + [self transitionToNextPhase]; + } + } + } + + if (_phase == AFFinalBoundaryPhase) { + NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]); + totalNumberOfBytesRead += [self readData:closingBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + return totalNumberOfBytesRead; +} + +- (NSInteger)readData:(NSData *)data + intoBuffer:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + NSRange range = NSMakeRange((NSUInteger)_phaseReadOffset, MIN([data length] - ((NSUInteger)_phaseReadOffset), length)); + [data getBytes:buffer range:range]; +#pragma clang diagnostic pop + + _phaseReadOffset += range.length; + + if (((NSUInteger)_phaseReadOffset) >= [data length]) { + [self transitionToNextPhase]; + } + + return (NSInteger)range.length; +} + +- (BOOL)transitionToNextPhase { + if (![[NSThread currentThread] isMainThread]) { + dispatch_sync(dispatch_get_main_queue(), ^{ + [self transitionToNextPhase]; + }); + return YES; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcovered-switch-default" + switch (_phase) { + case AFEncapsulationBoundaryPhase: + _phase = AFHeaderPhase; + break; + case AFHeaderPhase: + [self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; + [self.inputStream open]; + _phase = AFBodyPhase; + break; + case AFBodyPhase: + [self.inputStream close]; + _phase = AFFinalBoundaryPhase; + break; + case AFFinalBoundaryPhase: + default: + _phase = AFEncapsulationBoundaryPhase; + break; + } + _phaseReadOffset = 0; +#pragma clang diagnostic pop + + return YES; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFHTTPBodyPart *bodyPart = [[[self class] allocWithZone:zone] init]; + + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = self.headers; + bodyPart.bodyContentLength = self.bodyContentLength; + bodyPart.body = self.body; + bodyPart.boundary = self.boundary; + + return bodyPart; +} + +@end + +#pragma mark - + +@implementation AFJSONRequestSerializer + ++ (instancetype)serializer { + return [self serializerWithWritingOptions:(NSJSONWritingOptions)0]; +} + ++ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions +{ + AFJSONRequestSerializer *serializer = [[self alloc] init]; + serializer.writingOptions = writingOptions; + + return serializer; +} + +#pragma mark - AFURLRequestSerialization + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + return [super requestBySerializingRequest:request withParameters:parameters error:error]; + } + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + if (parameters) { + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + } + + [mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]]; + } + + return mutableRequest; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.writingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writingOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeInteger:self.writingOptions forKey:NSStringFromSelector(@selector(writingOptions))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFJSONRequestSerializer *serializer = [super copyWithZone:zone]; + serializer.writingOptions = self.writingOptions; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFPropertyListRequestSerializer + ++ (instancetype)serializer { + return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 writeOptions:0]; +} + ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + writeOptions:(NSPropertyListWriteOptions)writeOptions +{ + AFPropertyListRequestSerializer *serializer = [[self alloc] init]; + serializer.format = format; + serializer.writeOptions = writeOptions; + + return serializer; +} + +#pragma mark - AFURLRequestSerializer + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + return [super requestBySerializingRequest:request withParameters:parameters error:error]; + } + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + if (parameters) { + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/x-plist" forHTTPHeaderField:@"Content-Type"]; + } + + [mutableRequest setHTTPBody:[NSPropertyListSerialization dataWithPropertyList:parameters format:self.format options:self.writeOptions error:error]]; + } + + return mutableRequest; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.format = (NSPropertyListFormat)[[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue]; + self.writeOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writeOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeInteger:self.format forKey:NSStringFromSelector(@selector(format))]; + [coder encodeObject:@(self.writeOptions) forKey:NSStringFromSelector(@selector(writeOptions))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFPropertyListRequestSerializer *serializer = [super copyWithZone:zone]; + serializer.format = self.format; + serializer.writeOptions = self.writeOptions; + + return serializer; +} + +@end diff --git a/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h new file mode 100644 index 0000000..a9430ad --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h @@ -0,0 +1,311 @@ +// AFURLResponseSerialization.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + The `AFURLResponseSerialization` protocol is adopted by an object that decodes data into a more useful object representation, according to details in the server response. Response serializers may additionally perform validation on the incoming response and data. + + For example, a JSON response serializer may check for an acceptable status code (`2XX` range) and content type (`application/json`), decoding a valid JSON response into an object. + */ +@protocol AFURLResponseSerialization + +/** + The response object decoded from the data associated with a specified response. + + @param response The response to be processed. + @param data The response data to be decoded. + @param error The error that occurred while attempting to decode the response data. + + @return The object decoded from the specified response data. + */ +- (nullable id)responseObjectForResponse:(nullable NSURLResponse *)response + data:(nullable NSData *)data + error:(NSError * _Nullable __autoreleasing *)error NS_SWIFT_NOTHROW; + +@end + +#pragma mark - + +/** + `AFHTTPResponseSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. + + Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPResponseSerializer` in order to ensure consistent default behavior. + */ +@interface AFHTTPResponseSerializer : NSObject + +- (instancetype)init; + +/** + The string encoding used to serialize data received from the server, when no string encoding is specified by the response. `NSUTF8StringEncoding` by default. + */ +@property (nonatomic, assign) NSStringEncoding stringEncoding; + +/** + Creates and returns a serializer with default configuration. + */ ++ (instancetype)serializer; + +///----------------------------------------- +/// @name Configuring Response Serialization +///----------------------------------------- + +/** + The acceptable HTTP status codes for responses. When non-`nil`, responses with status codes not contained by the set will result in an error during validation. + + See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html + */ +@property (nonatomic, copy, nullable) NSIndexSet *acceptableStatusCodes; + +/** + The acceptable MIME types for responses. When non-`nil`, responses with a `Content-Type` with MIME types that do not intersect with the set will result in an error during validation. + */ +@property (nonatomic, copy, nullable) NSSet *acceptableContentTypes; + +/** + Validates the specified response and data. + + In its base implementation, this method checks for an acceptable status code and content type. Subclasses may wish to add other domain-specific checks. + + @param response The response to be validated. + @param data The data associated with the response. + @param error The error that occurred while attempting to validate the response. + + @return `YES` if the response is valid, otherwise `NO`. + */ +- (BOOL)validateResponse:(nullable NSHTTPURLResponse *)response + data:(nullable NSData *)data + error:(NSError * _Nullable __autoreleasing *)error; + +@end + +#pragma mark - + + +/** + `AFJSONResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes JSON responses. + + By default, `AFJSONResponseSerializer` accepts the following MIME types, which includes the official standard, `application/json`, as well as other commonly-used types: + + - `application/json` + - `text/json` + - `text/javascript` + */ +@interface AFJSONResponseSerializer : AFHTTPResponseSerializer + +- (instancetype)init; + +/** + Options for reading the response JSON data and creating the Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default. + */ +@property (nonatomic, assign) NSJSONReadingOptions readingOptions; + +/** + Whether to remove keys with `NSNull` values from response JSON. Defaults to `NO`. + */ +@property (nonatomic, assign) BOOL removesKeysWithNullValues; + +/** + Creates and returns a JSON serializer with specified reading and writing options. + + @param readingOptions The specified JSON reading options. + */ ++ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions; + +@end + +#pragma mark - + +/** + `AFXMLParserResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLParser` objects. + + By default, `AFXMLParserResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types: + + - `application/xml` + - `text/xml` + */ +@interface AFXMLParserResponseSerializer : AFHTTPResponseSerializer + +@end + +#pragma mark - + +#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED + +/** + `AFXMLDocumentResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects. + + By default, `AFXMLDocumentResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types: + + - `application/xml` + - `text/xml` + */ +@interface AFXMLDocumentResponseSerializer : AFHTTPResponseSerializer + +- (instancetype)init; + +/** + Input and output options specifically intended for `NSXMLDocument` objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default. + */ +@property (nonatomic, assign) NSUInteger options; + +/** + Creates and returns an XML document serializer with the specified options. + + @param mask The XML document options. + */ ++ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask; + +@end + +#endif + +#pragma mark - + +/** + `AFPropertyListResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects. + + By default, `AFPropertyListResponseSerializer` accepts the following MIME types: + + - `application/x-plist` + */ +@interface AFPropertyListResponseSerializer : AFHTTPResponseSerializer + +- (instancetype)init; + +/** + The property list format. Possible values are described in "NSPropertyListFormat". + */ +@property (nonatomic, assign) NSPropertyListFormat format; + +/** + The property list reading options. Possible values are described in "NSPropertyListMutabilityOptions." + */ +@property (nonatomic, assign) NSPropertyListReadOptions readOptions; + +/** + Creates and returns a property list serializer with a specified format, read options, and write options. + + @param format The property list format. + @param readOptions The property list reading options. + */ ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + readOptions:(NSPropertyListReadOptions)readOptions; + +@end + +#pragma mark - + +/** + `AFImageResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes image responses. + + By default, `AFImageResponseSerializer` accepts the following MIME types, which correspond to the image formats supported by UIImage or NSImage: + + - `image/tiff` + - `image/jpeg` + - `image/gif` + - `image/png` + - `image/ico` + - `image/x-icon` + - `image/bmp` + - `image/x-bmp` + - `image/x-xbitmap` + - `image/x-win-bitmap` + */ +@interface AFImageResponseSerializer : AFHTTPResponseSerializer + +#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH +/** + The scale factor used when interpreting the image data to construct `responseImage`. Specifying a scale factor of 1.0 results in an image whose size matches the pixel-based dimensions of the image. Applying a different scale factor changes the size of the image as reported by the size property. This is set to the value of scale of the main screen by default, which automatically scales images for retina displays, for instance. + */ +@property (nonatomic, assign) CGFloat imageScale; + +/** + Whether to automatically inflate response image data for compressed formats (such as PNG or JPEG). Enabling this can significantly improve drawing performance on iOS when used with `setCompletionBlockWithSuccess:failure:`, as it allows a bitmap representation to be constructed in the background rather than on the main thread. `YES` by default. + */ +@property (nonatomic, assign) BOOL automaticallyInflatesResponseImage; +#endif + +@end + +#pragma mark - + +/** + `AFCompoundSerializer` is a subclass of `AFHTTPResponseSerializer` that delegates the response serialization to the first `AFHTTPResponseSerializer` object that returns an object for `responseObjectForResponse:data:error:`, falling back on the default behavior of `AFHTTPResponseSerializer`. This is useful for supporting multiple potential types and structures of server responses with a single serializer. + */ +@interface AFCompoundResponseSerializer : AFHTTPResponseSerializer + +/** + The component response serializers. + */ +@property (readonly, nonatomic, copy) NSArray > *responseSerializers; + +/** + Creates and returns a compound serializer comprised of the specified response serializers. + + @warning Each response serializer specified must be a subclass of `AFHTTPResponseSerializer`, and response to `-validateResponse:data:error:`. + */ ++ (instancetype)compoundSerializerWithResponseSerializers:(NSArray > *)responseSerializers; + +@end + +///---------------- +/// @name Constants +///---------------- + +/** + ## Error Domains + + The following error domain is predefined. + + - `NSString * const AFURLResponseSerializationErrorDomain` + + ### Constants + + `AFURLResponseSerializationErrorDomain` + AFURLResponseSerializer errors. Error codes for `AFURLResponseSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`. + */ +FOUNDATION_EXPORT NSString * const AFURLResponseSerializationErrorDomain; + +/** + ## User info dictionary keys + + These keys may exist in the user info dictionary, in addition to those defined for NSError. + + - `NSString * const AFNetworkingOperationFailingURLResponseErrorKey` + - `NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey` + + ### Constants + + `AFNetworkingOperationFailingURLResponseErrorKey` + The corresponding value is an `NSURLResponse` containing the response of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`. + + `AFNetworkingOperationFailingURLResponseDataErrorKey` + The corresponding value is an `NSData` containing the original data of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingOperationFailingURLResponseErrorKey; + +FOUNDATION_EXPORT NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey; + +NS_ASSUME_NONNULL_END diff --git a/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m new file mode 100755 index 0000000..5e46799 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m @@ -0,0 +1,805 @@ +// AFURLResponseSerialization.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFURLResponseSerialization.h" + +#import + +#if TARGET_OS_IOS +#import +#elif TARGET_OS_WATCH +#import +#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) +#import +#endif + +NSString * const AFURLResponseSerializationErrorDomain = @"com.alamofire.error.serialization.response"; +NSString * const AFNetworkingOperationFailingURLResponseErrorKey = @"com.alamofire.serialization.response.error.response"; +NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey = @"com.alamofire.serialization.response.error.data"; + +static NSError * AFErrorWithUnderlyingError(NSError *error, NSError *underlyingError) { + if (!error) { + return underlyingError; + } + + if (!underlyingError || error.userInfo[NSUnderlyingErrorKey]) { + return error; + } + + NSMutableDictionary *mutableUserInfo = [error.userInfo mutableCopy]; + mutableUserInfo[NSUnderlyingErrorKey] = underlyingError; + + return [[NSError alloc] initWithDomain:error.domain code:error.code userInfo:mutableUserInfo]; +} + +static BOOL AFErrorOrUnderlyingErrorHasCodeInDomain(NSError *error, NSInteger code, NSString *domain) { + if ([error.domain isEqualToString:domain] && error.code == code) { + return YES; + } else if (error.userInfo[NSUnderlyingErrorKey]) { + return AFErrorOrUnderlyingErrorHasCodeInDomain(error.userInfo[NSUnderlyingErrorKey], code, domain); + } + + return NO; +} + +static id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions) { + if ([JSONObject isKindOfClass:[NSArray class]]) { + NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:[(NSArray *)JSONObject count]]; + for (id value in (NSArray *)JSONObject) { + [mutableArray addObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions)]; + } + + return (readingOptions & NSJSONReadingMutableContainers) ? mutableArray : [NSArray arrayWithArray:mutableArray]; + } else if ([JSONObject isKindOfClass:[NSDictionary class]]) { + NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:JSONObject]; + for (id key in [(NSDictionary *)JSONObject allKeys]) { + id value = (NSDictionary *)JSONObject[key]; + if (!value || [value isEqual:[NSNull null]]) { + [mutableDictionary removeObjectForKey:key]; + } else if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) { + mutableDictionary[key] = AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions); + } + } + + return (readingOptions & NSJSONReadingMutableContainers) ? mutableDictionary : [NSDictionary dictionaryWithDictionary:mutableDictionary]; + } + + return JSONObject; +} + +@implementation AFHTTPResponseSerializer + ++ (instancetype)serializer { + return [[self alloc] init]; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = NSUTF8StringEncoding; + + self.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)]; + self.acceptableContentTypes = nil; + + return self; +} + +#pragma mark - + +- (BOOL)validateResponse:(NSHTTPURLResponse *)response + data:(NSData *)data + error:(NSError * __autoreleasing *)error +{ + BOOL responseIsValid = YES; + NSError *validationError = nil; + + if (response && [response isKindOfClass:[NSHTTPURLResponse class]]) { + if (self.acceptableContentTypes && ![self.acceptableContentTypes containsObject:[response MIMEType]] && + !([response MIMEType] == nil && [data length] == 0)) { + + if ([data length] > 0 && [response URL]) { + NSMutableDictionary *mutableUserInfo = [@{ + NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: unacceptable content-type: %@", @"AFNetworking", nil), [response MIMEType]], + NSURLErrorFailingURLErrorKey:[response URL], + AFNetworkingOperationFailingURLResponseErrorKey: response, + } mutableCopy]; + if (data) { + mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data; + } + + validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:mutableUserInfo], validationError); + } + + responseIsValid = NO; + } + + if (self.acceptableStatusCodes && ![self.acceptableStatusCodes containsIndex:(NSUInteger)response.statusCode] && [response URL]) { + NSMutableDictionary *mutableUserInfo = [@{ + NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: %@ (%ld)", @"AFNetworking", nil), [NSHTTPURLResponse localizedStringForStatusCode:response.statusCode], (long)response.statusCode], + NSURLErrorFailingURLErrorKey:[response URL], + AFNetworkingOperationFailingURLResponseErrorKey: response, + } mutableCopy]; + + if (data) { + mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data; + } + + validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorBadServerResponse userInfo:mutableUserInfo], validationError); + + responseIsValid = NO; + } + } + + if (error && !responseIsValid) { + *error = validationError; + } + + return responseIsValid; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + [self validateResponse:(NSHTTPURLResponse *)response data:data error:error]; + + return data; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [self init]; + if (!self) { + return nil; + } + + self.acceptableStatusCodes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableStatusCodes))]; + self.acceptableContentTypes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableContentTypes))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.acceptableStatusCodes forKey:NSStringFromSelector(@selector(acceptableStatusCodes))]; + [coder encodeObject:self.acceptableContentTypes forKey:NSStringFromSelector(@selector(acceptableContentTypes))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFHTTPResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.acceptableStatusCodes = [self.acceptableStatusCodes copyWithZone:zone]; + serializer.acceptableContentTypes = [self.acceptableContentTypes copyWithZone:zone]; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFJSONResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithReadingOptions:(NSJSONReadingOptions)0]; +} + ++ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions { + AFJSONResponseSerializer *serializer = [[self alloc] init]; + serializer.readingOptions = readingOptions; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + id responseObject = nil; + NSError *serializationError = nil; + // Workaround for behavior of Rails to return a single space for `head :ok` (a workaround for a bug in Safari), which is not interpreted as valid input by NSJSONSerialization. + // See https://github.com/rails/rails/issues/1742 + BOOL isSpace = [data isEqualToData:[NSData dataWithBytes:" " length:1]]; + if (data.length > 0 && !isSpace) { + responseObject = [NSJSONSerialization JSONObjectWithData:data options:self.readingOptions error:&serializationError]; + } else { + return nil; + } + + if (self.removesKeysWithNullValues && responseObject) { + responseObject = AFJSONObjectByRemovingKeysWithNullValues(responseObject, self.readingOptions); + } + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return responseObject; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.readingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readingOptions))] unsignedIntegerValue]; + self.removesKeysWithNullValues = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(removesKeysWithNullValues))] boolValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.readingOptions) forKey:NSStringFromSelector(@selector(readingOptions))]; + [coder encodeObject:@(self.removesKeysWithNullValues) forKey:NSStringFromSelector(@selector(removesKeysWithNullValues))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFJSONResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.readingOptions = self.readingOptions; + serializer.removesKeysWithNullValues = self.removesKeysWithNullValues; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFXMLParserResponseSerializer + ++ (instancetype)serializer { + AFXMLParserResponseSerializer *serializer = [[self alloc] init]; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSHTTPURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + return [[NSXMLParser alloc] initWithData:data]; +} + +@end + +#pragma mark - + +#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED + +@implementation AFXMLDocumentResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithXMLDocumentOptions:0]; +} + ++ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask { + AFXMLDocumentResponseSerializer *serializer = [[self alloc] init]; + serializer.options = mask; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + NSError *serializationError = nil; + NSXMLDocument *document = [[NSXMLDocument alloc] initWithData:data options:self.options error:&serializationError]; + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return document; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.options = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(options))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.options) forKey:NSStringFromSelector(@selector(options))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFXMLDocumentResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.options = self.options; + + return serializer; +} + +@end + +#endif + +#pragma mark - + +@implementation AFPropertyListResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 readOptions:0]; +} + ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + readOptions:(NSPropertyListReadOptions)readOptions +{ + AFPropertyListResponseSerializer *serializer = [[self alloc] init]; + serializer.format = format; + serializer.readOptions = readOptions; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/x-plist", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + id responseObject; + NSError *serializationError = nil; + + if (data) { + responseObject = [NSPropertyListSerialization propertyListWithData:data options:self.readOptions format:NULL error:&serializationError]; + } + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return responseObject; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.format = (NSPropertyListFormat)[[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue]; + self.readOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.format) forKey:NSStringFromSelector(@selector(format))]; + [coder encodeObject:@(self.readOptions) forKey:NSStringFromSelector(@selector(readOptions))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFPropertyListResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.format = self.format; + serializer.readOptions = self.readOptions; + + return serializer; +} + +@end + +#pragma mark - + +#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH +#import +#import + +@interface UIImage (AFNetworkingSafeImageLoading) ++ (UIImage *)af_safeImageWithData:(NSData *)data; +@end + +static NSLock* imageLock = nil; + +@implementation UIImage (AFNetworkingSafeImageLoading) + ++ (UIImage *)af_safeImageWithData:(NSData *)data { + UIImage* image = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + imageLock = [[NSLock alloc] init]; + }); + + [imageLock lock]; + image = [UIImage imageWithData:data]; + [imageLock unlock]; + return image; +} + +@end + +static UIImage * AFImageWithDataAtScale(NSData *data, CGFloat scale) { + UIImage *image = [UIImage af_safeImageWithData:data]; + if (image.images) { + return image; + } + + return [[UIImage alloc] initWithCGImage:[image CGImage] scale:scale orientation:image.imageOrientation]; +} + +static UIImage * AFInflatedImageFromResponseWithDataAtScale(NSHTTPURLResponse *response, NSData *data, CGFloat scale) { + if (!data || [data length] == 0) { + return nil; + } + + CGImageRef imageRef = NULL; + CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); + + if ([response.MIMEType isEqualToString:@"image/png"]) { + imageRef = CGImageCreateWithPNGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault); + } else if ([response.MIMEType isEqualToString:@"image/jpeg"]) { + imageRef = CGImageCreateWithJPEGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault); + + if (imageRef) { + CGColorSpaceRef imageColorSpace = CGImageGetColorSpace(imageRef); + CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(imageColorSpace); + + // CGImageCreateWithJPEGDataProvider does not properly handle CMKY, so fall back to AFImageWithDataAtScale + if (imageColorSpaceModel == kCGColorSpaceModelCMYK) { + CGImageRelease(imageRef); + imageRef = NULL; + } + } + } + + CGDataProviderRelease(dataProvider); + + UIImage *image = AFImageWithDataAtScale(data, scale); + if (!imageRef) { + if (image.images || !image) { + return image; + } + + imageRef = CGImageCreateCopy([image CGImage]); + if (!imageRef) { + return nil; + } + } + + size_t width = CGImageGetWidth(imageRef); + size_t height = CGImageGetHeight(imageRef); + size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); + + if (width * height > 1024 * 1024 || bitsPerComponent > 8) { + CGImageRelease(imageRef); + + return image; + } + + // CGImageGetBytesPerRow() calculates incorrectly in iOS 5.0, so defer to CGBitmapContextCreate + size_t bytesPerRow = 0; + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGColorSpaceModel colorSpaceModel = CGColorSpaceGetModel(colorSpace); + CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); + + if (colorSpaceModel == kCGColorSpaceModelRGB) { + uint32_t alpha = (bitmapInfo & kCGBitmapAlphaInfoMask); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wassign-enum" + if (alpha == kCGImageAlphaNone) { + bitmapInfo &= ~kCGBitmapAlphaInfoMask; + bitmapInfo |= kCGImageAlphaNoneSkipFirst; + } else if (!(alpha == kCGImageAlphaNoneSkipFirst || alpha == kCGImageAlphaNoneSkipLast)) { + bitmapInfo &= ~kCGBitmapAlphaInfoMask; + bitmapInfo |= kCGImageAlphaPremultipliedFirst; + } +#pragma clang diagnostic pop + } + + CGContextRef context = CGBitmapContextCreate(NULL, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo); + + CGColorSpaceRelease(colorSpace); + + if (!context) { + CGImageRelease(imageRef); + + return image; + } + + CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, width, height), imageRef); + CGImageRef inflatedImageRef = CGBitmapContextCreateImage(context); + + CGContextRelease(context); + + UIImage *inflatedImage = [[UIImage alloc] initWithCGImage:inflatedImageRef scale:scale orientation:image.imageOrientation]; + + CGImageRelease(inflatedImageRef); + CGImageRelease(imageRef); + + return inflatedImage; +} +#endif + + +@implementation AFImageResponseSerializer + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon", @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", nil]; + +#if TARGET_OS_IOS || TARGET_OS_TV + self.imageScale = [[UIScreen mainScreen] scale]; + self.automaticallyInflatesResponseImage = YES; +#elif TARGET_OS_WATCH + self.imageScale = [[WKInterfaceDevice currentDevice] screenScale]; + self.automaticallyInflatesResponseImage = YES; +#endif + + return self; +} + +#pragma mark - AFURLResponseSerializer + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + +#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH + if (self.automaticallyInflatesResponseImage) { + return AFInflatedImageFromResponseWithDataAtScale((NSHTTPURLResponse *)response, data, self.imageScale); + } else { + return AFImageWithDataAtScale(data, self.imageScale); + } +#else + // Ensure that the image is set to it's correct pixel width and height + NSBitmapImageRep *bitimage = [[NSBitmapImageRep alloc] initWithData:data]; + NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize([bitimage pixelsWide], [bitimage pixelsHigh])]; + [image addRepresentation:bitimage]; + + return image; +#endif + + return nil; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + +#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH + NSNumber *imageScale = [decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(imageScale))]; +#if CGFLOAT_IS_DOUBLE + self.imageScale = [imageScale doubleValue]; +#else + self.imageScale = [imageScale floatValue]; +#endif + + self.automaticallyInflatesResponseImage = [decoder decodeBoolForKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))]; +#endif + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + +#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH + [coder encodeObject:@(self.imageScale) forKey:NSStringFromSelector(@selector(imageScale))]; + [coder encodeBool:self.automaticallyInflatesResponseImage forKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))]; +#endif +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFImageResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + +#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH + serializer.imageScale = self.imageScale; + serializer.automaticallyInflatesResponseImage = self.automaticallyInflatesResponseImage; +#endif + + return serializer; +} + +@end + +#pragma mark - + +@interface AFCompoundResponseSerializer () +@property (readwrite, nonatomic, copy) NSArray *responseSerializers; +@end + +@implementation AFCompoundResponseSerializer + ++ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers { + AFCompoundResponseSerializer *serializer = [[self alloc] init]; + serializer.responseSerializers = responseSerializers; + + return serializer; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + for (id serializer in self.responseSerializers) { + if (![serializer isKindOfClass:[AFHTTPResponseSerializer class]]) { + continue; + } + + NSError *serializerError = nil; + id responseObject = [serializer responseObjectForResponse:response data:data error:&serializerError]; + if (responseObject) { + if (error) { + *error = AFErrorWithUnderlyingError(serializerError, *error); + } + + return responseObject; + } + } + + return [super responseObjectForResponse:response data:data error:error]; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.responseSerializers = [decoder decodeObjectOfClass:[NSArray class] forKey:NSStringFromSelector(@selector(responseSerializers))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:self.responseSerializers forKey:NSStringFromSelector(@selector(responseSerializers))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFCompoundResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.responseSerializers = self.responseSerializers; + + return serializer; +} + +@end diff --git a/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h new file mode 100644 index 0000000..89909fe --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h @@ -0,0 +1,500 @@ +// AFURLSessionManager.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#import + +#import "AFURLResponseSerialization.h" +#import "AFURLRequestSerialization.h" +#import "AFSecurityPolicy.h" +#if !TARGET_OS_WATCH +#import "AFNetworkReachabilityManager.h" +#endif + +/** + `AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to ``, ``, ``, and ``. + + ## Subclassing Notes + + This is the base class for `AFHTTPSessionManager`, which adds functionality specific to making HTTP requests. If you are looking to extend `AFURLSessionManager` specifically for HTTP, consider subclassing `AFHTTPSessionManager` instead. + + ## NSURLSession & NSURLSessionTask Delegate Methods + + `AFURLSessionManager` implements the following delegate methods: + + ### `NSURLSessionDelegate` + + - `URLSession:didBecomeInvalidWithError:` + - `URLSession:didReceiveChallenge:completionHandler:` + - `URLSessionDidFinishEventsForBackgroundURLSession:` + + ### `NSURLSessionTaskDelegate` + + - `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:` + - `URLSession:task:didReceiveChallenge:completionHandler:` + - `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:` + - `URLSession:task:needNewBodyStream:` + - `URLSession:task:didCompleteWithError:` + + ### `NSURLSessionDataDelegate` + + - `URLSession:dataTask:didReceiveResponse:completionHandler:` + - `URLSession:dataTask:didBecomeDownloadTask:` + - `URLSession:dataTask:didReceiveData:` + - `URLSession:dataTask:willCacheResponse:completionHandler:` + + ### `NSURLSessionDownloadDelegate` + + - `URLSession:downloadTask:didFinishDownloadingToURL:` + - `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:` + - `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:` + + If any of these methods are overridden in a subclass, they _must_ call the `super` implementation first. + + ## Network Reachability Monitoring + + Network reachability status and change monitoring is available through the `reachabilityManager` property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See `AFNetworkReachabilityManager` for more details. + + ## NSCoding Caveats + + - Encoded managers do not include any block properties. Be sure to set delegate callback blocks when using `-initWithCoder:` or `NSKeyedUnarchiver`. + + ## NSCopying Caveats + + - `-copy` and `-copyWithZone:` return a new manager with a new `NSURLSession` created from the configuration of the original. + - Operation copies do not include any delegate callback blocks, as they often strongly captures a reference to `self`, which would otherwise have the unintuitive side-effect of pointing to the _original_ session manager when copied. + + @warning Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance. + */ + +NS_ASSUME_NONNULL_BEGIN + +@interface AFURLSessionManager : NSObject + +/** + The managed session. + */ +@property (readonly, nonatomic, strong) NSURLSession *session; + +/** + The operation queue on which delegate callbacks are run. + */ +@property (readonly, nonatomic, strong) NSOperationQueue *operationQueue; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`. + + @warning `responseSerializer` must not be `nil`. + */ +@property (nonatomic, strong) id responseSerializer; + +///------------------------------- +/// @name Managing Security Policy +///------------------------------- + +/** + The security policy used by created session to evaluate server trust for secure connections. `AFURLSessionManager` uses the `defaultPolicy` unless otherwise specified. + */ +@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; + +#if !TARGET_OS_WATCH +///-------------------------------------- +/// @name Monitoring Network Reachability +///-------------------------------------- + +/** + The network reachability manager. `AFURLSessionManager` uses the `sharedManager` by default. + */ +@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager; +#endif + +///---------------------------- +/// @name Getting Session Tasks +///---------------------------- + +/** + The data, upload, and download tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *tasks; + +/** + The data tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *dataTasks; + +/** + The upload tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *uploadTasks; + +/** + The download tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *downloadTasks; + +///------------------------------- +/// @name Managing Callback Queues +///------------------------------- + +/** + The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used. + */ +@property (nonatomic, strong, nullable) dispatch_queue_t completionQueue; + +/** + The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used. + */ +@property (nonatomic, strong, nullable) dispatch_group_t completionGroup; + +///--------------------------------- +/// @name Working Around System Bugs +///--------------------------------- + +/** + Whether to attempt to retry creation of upload tasks for background sessions when initial call returns `nil`. `NO` by default. + + @bug As of iOS 7.0, there is a bug where upload tasks created for background tasks are sometimes `nil`. As a workaround, if this property is `YES`, AFNetworking will follow Apple's recommendation to try creating the task again. + + @see https://github.com/AFNetworking/AFNetworking/issues/1675 + */ +@property (nonatomic, assign) BOOL attemptsToRecreateUploadTasksForBackgroundSessions; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns a manager for a session created with the specified configuration. This is the designated initializer. + + @param configuration The configuration used to create the managed session. + + @return A manager for a newly-created session. + */ +- (instancetype)initWithSessionConfiguration:(nullable NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER; + +/** + Invalidates the managed session, optionally canceling pending tasks. + + @param cancelPendingTasks Whether or not to cancel pending tasks. + */ +- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks; + +///------------------------- +/// @name Running Data Tasks +///------------------------- + +/** + Creates an `NSURLSessionDataTask` with the specified request. + + @param request The HTTP request for the request. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler; + +/** + Creates an `NSURLSessionDataTask` with the specified request. + + @param request The HTTP request for the request. + @param uploadProgressBlock A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. + @param downloadProgressBlock A block object to be executed when the download progress is updated. Note this block is called on the session queue, not the main queue. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + uploadProgress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock + downloadProgress:(nullable void (^)(NSProgress *downloadProgress))downloadProgressBlock + completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler; + +///--------------------------- +/// @name Running Upload Tasks +///--------------------------- + +/** + Creates an `NSURLSessionUploadTask` with the specified request for a local file. + + @param request The HTTP request for the request. + @param fileURL A URL to the local file to be uploaded. + @param uploadProgressBlock A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + + @see `attemptsToRecreateUploadTasksForBackgroundSessions` + */ +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromFile:(NSURL *)fileURL + progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock + completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler; + +/** + Creates an `NSURLSessionUploadTask` with the specified request for an HTTP body. + + @param request The HTTP request for the request. + @param bodyData A data object containing the HTTP body to be uploaded. + @param uploadProgressBlock A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromData:(nullable NSData *)bodyData + progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock + completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler; + +/** + Creates an `NSURLSessionUploadTask` with the specified streaming request. + + @param request The HTTP request for the request. + @param uploadProgressBlock A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request + progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock + completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler; + +///----------------------------- +/// @name Running Download Tasks +///----------------------------- + +/** + Creates an `NSURLSessionDownloadTask` with the specified request. + + @param request The HTTP request for the request. + @param downloadProgressBlock A block object to be executed when the download progress is updated. Note this block is called on the session queue, not the main queue. + @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL. + @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any. + + @warning If using a background `NSURLSessionConfiguration` on iOS, these blocks will be lost when the app is terminated. Background sessions may prefer to use `-setDownloadTaskDidFinishDownloadingBlock:` to specify the URL for saving the downloaded file, rather than the destination block of this method. + */ +- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request + progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgressBlock + destination:(nullable NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(nullable void (^)(NSURLResponse *response, NSURL * _Nullable filePath, NSError * _Nullable error))completionHandler; + +/** + Creates an `NSURLSessionDownloadTask` with the specified resume data. + + @param resumeData The data used to resume downloading. + @param downloadProgressBlock A block object to be executed when the download progress is updated. Note this block is called on the session queue, not the main queue. + @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL. + @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any. + */ +- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData + progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgressBlock + destination:(nullable NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(nullable void (^)(NSURLResponse *response, NSURL * _Nullable filePath, NSError * _Nullable error))completionHandler; + +///--------------------------------- +/// @name Getting Progress for Tasks +///--------------------------------- + +/** + Returns the upload progress of the specified task. + + @param task The session task. Must not be `nil`. + + @return An `NSProgress` object reporting the upload progress of a task, or `nil` if the progress is unavailable. + */ +- (nullable NSProgress *)uploadProgressForTask:(NSURLSessionTask *)task; + +/** + Returns the download progress of the specified task. + + @param task The session task. Must not be `nil`. + + @return An `NSProgress` object reporting the download progress of a task, or `nil` if the progress is unavailable. + */ +- (nullable NSProgress *)downloadProgressForTask:(NSURLSessionTask *)task; + +///----------------------------------------- +/// @name Setting Session Delegate Callbacks +///----------------------------------------- + +/** + Sets a block to be executed when the managed session becomes invalid, as handled by the `NSURLSessionDelegate` method `URLSession:didBecomeInvalidWithError:`. + + @param block A block object to be executed when the managed session becomes invalid. The block has no return value, and takes two arguments: the session, and the error related to the cause of invalidation. + */ +- (void)setSessionDidBecomeInvalidBlock:(nullable void (^)(NSURLSession *session, NSError *error))block; + +/** + Sets a block to be executed when a connection level authentication challenge has occurred, as handled by the `NSURLSessionDelegate` method `URLSession:didReceiveChallenge:completionHandler:`. + + @param block A block object to be executed when a connection level authentication challenge has occurred. The block returns the disposition of the authentication challenge, and takes three arguments: the session, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. + */ +- (void)setSessionDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * _Nullable __autoreleasing * _Nullable credential))block; + +///-------------------------------------- +/// @name Setting Task Delegate Callbacks +///-------------------------------------- + +/** + Sets a block to be executed when a task requires a new request body stream to send to the remote server, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:needNewBodyStream:`. + + @param block A block object to be executed when a task requires a new request body stream. + */ +- (void)setTaskNeedNewBodyStreamBlock:(nullable NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block; + +/** + Sets a block to be executed when an HTTP request is attempting to perform a redirection to a different URL, as handled by the `NSURLSessionTaskDelegate` method `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:`. + + @param block A block object to be executed when an HTTP request is attempting to perform a redirection to a different URL. The block returns the request to be made for the redirection, and takes four arguments: the session, the task, the redirection response, and the request corresponding to the redirection response. + */ +- (void)setTaskWillPerformHTTPRedirectionBlock:(nullable NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block; + +/** + Sets a block to be executed when a session task has received a request specific authentication challenge, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didReceiveChallenge:completionHandler:`. + + @param block A block object to be executed when a session task has received a request specific authentication challenge. The block returns the disposition of the authentication challenge, and takes four arguments: the session, the task, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. + */ +- (void)setTaskDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * _Nullable __autoreleasing * _Nullable credential))block; + +/** + Sets a block to be executed periodically to track upload progress, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:`. + + @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes five arguments: the session, the task, the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread. + */ +- (void)setTaskDidSendBodyDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block; + +/** + Sets a block to be executed as the last message related to a specific task, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didCompleteWithError:`. + + @param block A block object to be executed when a session task is completed. The block has no return value, and takes three arguments: the session, the task, and any error that occurred in the process of executing the task. + */ +- (void)setTaskDidCompleteBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, NSError * _Nullable error))block; + +///------------------------------------------- +/// @name Setting Data Task Delegate Callbacks +///------------------------------------------- + +/** + Sets a block to be executed when a data task has received a response, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveResponse:completionHandler:`. + + @param block A block object to be executed when a data task has received a response. The block returns the disposition of the session response, and takes three arguments: the session, the data task, and the received response. + */ +- (void)setDataTaskDidReceiveResponseBlock:(nullable NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block; + +/** + Sets a block to be executed when a data task has become a download task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didBecomeDownloadTask:`. + + @param block A block object to be executed when a data task has become a download task. The block has no return value, and takes three arguments: the session, the data task, and the download task it has become. + */ +- (void)setDataTaskDidBecomeDownloadTaskBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block; + +/** + Sets a block to be executed when a data task receives data, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveData:`. + + @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the session, the data task, and the data received. This block may be called multiple times, and will execute on the session manager operation queue. + */ +- (void)setDataTaskDidReceiveDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block; + +/** + Sets a block to be executed to determine the caching behavior of a data task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:willCacheResponse:completionHandler:`. + + @param block A block object to be executed to determine the caching behavior of a data task. The block returns the response to cache, and takes three arguments: the session, the data task, and the proposed cached URL response. + */ +- (void)setDataTaskWillCacheResponseBlock:(nullable NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block; + +/** + Sets a block to be executed once all messages enqueued for a session have been delivered, as handled by the `NSURLSessionDataDelegate` method `URLSessionDidFinishEventsForBackgroundURLSession:`. + + @param block A block object to be executed once all messages enqueued for a session have been delivered. The block has no return value and takes a single argument: the session. + */ +- (void)setDidFinishEventsForBackgroundURLSessionBlock:(nullable void (^)(NSURLSession *session))block; + +///----------------------------------------------- +/// @name Setting Download Task Delegate Callbacks +///----------------------------------------------- + +/** + Sets a block to be executed when a download task has completed a download, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didFinishDownloadingToURL:`. + + @param block A block object to be executed when a download task has completed. The block returns the URL the download should be moved to, and takes three arguments: the session, the download task, and the temporary location of the downloaded file. If the file manager encounters an error while attempting to move the temporary file to the destination, an `AFURLSessionDownloadTaskDidFailToMoveFileNotification` will be posted, with the download task as its object, and the user info of the error. + */ +- (void)setDownloadTaskDidFinishDownloadingBlock:(nullable NSURL * _Nullable (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block; + +/** + Sets a block to be executed periodically to track download progress, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:`. + + @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes five arguments: the session, the download task, the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the session manager operation queue. + */ +- (void)setDownloadTaskDidWriteDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block; + +/** + Sets a block to be executed when a download task has been resumed, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:`. + + @param block A block object to be executed when a download task has been resumed. The block has no return value and takes four arguments: the session, the download task, the file offset of the resumed download, and the total number of bytes expected to be downloaded. + */ +- (void)setDownloadTaskDidResumeBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block; + +@end + +///-------------------- +/// @name Notifications +///-------------------- + +/** + Posted when a task resumes. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidResumeNotification; + +/** + Posted when a task finishes executing. Includes a userInfo dictionary with additional information about the task. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteNotification; + +/** + Posted when a task suspends its execution. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidSuspendNotification; + +/** + Posted when a session is invalidated. + */ +FOUNDATION_EXPORT NSString * const AFURLSessionDidInvalidateNotification; + +/** + Posted when a session download task encountered an error when moving the temporary download file to a specified destination. + */ +FOUNDATION_EXPORT NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification; + +/** + The raw response data of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidCompleteNotification` if response data exists for the task. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteResponseDataKey; + +/** + The serialized response object of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidCompleteNotification` if the response was serialized. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey; + +/** + The response serializer used to serialize the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidCompleteNotification` if the task has an associated response serializer. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey; + +/** + The file path associated with the download task. Included in the userInfo dictionary of the `AFNetworkingTaskDidCompleteNotification` if an the response data has been stored directly to disk. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteAssetPathKey; + +/** + Any error associated with the task, or the serialization of the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidCompleteNotification` if an error exists. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteErrorKey; + +NS_ASSUME_NONNULL_END diff --git a/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m new file mode 100644 index 0000000..ef2108c --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m @@ -0,0 +1,1244 @@ +// AFURLSessionManager.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFURLSessionManager.h" +#import + +#ifndef NSFoundationVersionNumber_iOS_8_0 +#define NSFoundationVersionNumber_With_Fixed_5871104061079552_bug 1140.11 +#else +#define NSFoundationVersionNumber_With_Fixed_5871104061079552_bug NSFoundationVersionNumber_iOS_8_0 +#endif + +static dispatch_queue_t url_session_manager_creation_queue() { + static dispatch_queue_t af_url_session_manager_creation_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_creation_queue = dispatch_queue_create("com.alamofire.networking.session.manager.creation", DISPATCH_QUEUE_SERIAL); + }); + + return af_url_session_manager_creation_queue; +} + +static void url_session_manager_create_task_safely(dispatch_block_t block) { + if (NSFoundationVersionNumber < NSFoundationVersionNumber_With_Fixed_5871104061079552_bug) { + // Fix of bug + // Open Radar:http://openradar.appspot.com/radar?id=5871104061079552 (status: Fixed in iOS8) + // Issue about:https://github.com/AFNetworking/AFNetworking/issues/2093 + dispatch_sync(url_session_manager_creation_queue(), block); + } else { + block(); + } +} + +static dispatch_queue_t url_session_manager_processing_queue() { + static dispatch_queue_t af_url_session_manager_processing_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_processing_queue = dispatch_queue_create("com.alamofire.networking.session.manager.processing", DISPATCH_QUEUE_CONCURRENT); + }); + + return af_url_session_manager_processing_queue; +} + +static dispatch_group_t url_session_manager_completion_group() { + static dispatch_group_t af_url_session_manager_completion_group; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_completion_group = dispatch_group_create(); + }); + + return af_url_session_manager_completion_group; +} + +NSString * const AFNetworkingTaskDidResumeNotification = @"com.alamofire.networking.task.resume"; +NSString * const AFNetworkingTaskDidCompleteNotification = @"com.alamofire.networking.task.complete"; +NSString * const AFNetworkingTaskDidSuspendNotification = @"com.alamofire.networking.task.suspend"; +NSString * const AFURLSessionDidInvalidateNotification = @"com.alamofire.networking.session.invalidate"; +NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification = @"com.alamofire.networking.session.download.file-manager-error"; + +NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey = @"com.alamofire.networking.task.complete.serializedresponse"; +NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey = @"com.alamofire.networking.task.complete.responseserializer"; +NSString * const AFNetworkingTaskDidCompleteResponseDataKey = @"com.alamofire.networking.complete.finish.responsedata"; +NSString * const AFNetworkingTaskDidCompleteErrorKey = @"com.alamofire.networking.task.complete.error"; +NSString * const AFNetworkingTaskDidCompleteAssetPathKey = @"com.alamofire.networking.task.complete.assetpath"; + +static NSString * const AFURLSessionManagerLockName = @"com.alamofire.networking.session.manager.lock"; + +static NSUInteger const AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask = 3; + +static void * AFTaskStateChangedContext = &AFTaskStateChangedContext; + +typedef void (^AFURLSessionDidBecomeInvalidBlock)(NSURLSession *session, NSError *error); +typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); + +typedef NSURLRequest * (^AFURLSessionTaskWillPerformHTTPRedirectionBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request); +typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionTaskDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); +typedef void (^AFURLSessionDidFinishEventsForBackgroundURLSessionBlock)(NSURLSession *session); + +typedef NSInputStream * (^AFURLSessionTaskNeedNewBodyStreamBlock)(NSURLSession *session, NSURLSessionTask *task); +typedef void (^AFURLSessionTaskDidSendBodyDataBlock)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend); +typedef void (^AFURLSessionTaskDidCompleteBlock)(NSURLSession *session, NSURLSessionTask *task, NSError *error); + +typedef NSURLSessionResponseDisposition (^AFURLSessionDataTaskDidReceiveResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response); +typedef void (^AFURLSessionDataTaskDidBecomeDownloadTaskBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask); +typedef void (^AFURLSessionDataTaskDidReceiveDataBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data); +typedef NSCachedURLResponse * (^AFURLSessionDataTaskWillCacheResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse); + +typedef NSURL * (^AFURLSessionDownloadTaskDidFinishDownloadingBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location); +typedef void (^AFURLSessionDownloadTaskDidWriteDataBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite); +typedef void (^AFURLSessionDownloadTaskDidResumeBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes); +typedef void (^AFURLSessionTaskProgressBlock)(NSProgress *); + +typedef void (^AFURLSessionTaskCompletionHandler)(NSURLResponse *response, id responseObject, NSError *error); + + +#pragma mark - + +@interface AFURLSessionManagerTaskDelegate : NSObject +@property (nonatomic, weak) AFURLSessionManager *manager; +@property (nonatomic, strong) NSMutableData *mutableData; +@property (nonatomic, strong) NSProgress *uploadProgress; +@property (nonatomic, strong) NSProgress *downloadProgress; +@property (nonatomic, copy) NSURL *downloadFileURL; +@property (nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; +@property (nonatomic, copy) AFURLSessionTaskProgressBlock uploadProgressBlock; +@property (nonatomic, copy) AFURLSessionTaskProgressBlock downloadProgressBlock; +@property (nonatomic, copy) AFURLSessionTaskCompletionHandler completionHandler; +@end + +@implementation AFURLSessionManagerTaskDelegate + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.mutableData = [NSMutableData data]; + self.uploadProgress = [[NSProgress alloc] initWithParent:nil userInfo:nil]; + self.uploadProgress.totalUnitCount = NSURLSessionTransferSizeUnknown; + + self.downloadProgress = [[NSProgress alloc] initWithParent:nil userInfo:nil]; + self.downloadProgress.totalUnitCount = NSURLSessionTransferSizeUnknown; + return self; +} + +#pragma mark - NSProgress Tracking + +- (void)setupProgressForTask:(NSURLSessionTask *)task { + __weak __typeof__(task) weakTask = task; + + self.uploadProgress.totalUnitCount = task.countOfBytesExpectedToSend; + self.downloadProgress.totalUnitCount = task.countOfBytesExpectedToReceive; + [self.uploadProgress setCancellable:YES]; + [self.uploadProgress setCancellationHandler:^{ + __typeof__(weakTask) strongTask = weakTask; + [strongTask cancel]; + }]; + [self.uploadProgress setPausable:YES]; + [self.uploadProgress setPausingHandler:^{ + __typeof__(weakTask) strongTask = weakTask; + [strongTask suspend]; + }]; + if ([self.uploadProgress respondsToSelector:@selector(setResumingHandler:)]) { + [self.uploadProgress setResumingHandler:^{ + __typeof__(weakTask) strongTask = weakTask; + [strongTask resume]; + }]; + } + + [self.downloadProgress setCancellable:YES]; + [self.downloadProgress setCancellationHandler:^{ + __typeof__(weakTask) strongTask = weakTask; + [strongTask cancel]; + }]; + [self.downloadProgress setPausable:YES]; + [self.downloadProgress setPausingHandler:^{ + __typeof__(weakTask) strongTask = weakTask; + [strongTask suspend]; + }]; + + if ([self.downloadProgress respondsToSelector:@selector(setResumingHandler:)]) { + [self.downloadProgress setResumingHandler:^{ + __typeof__(weakTask) strongTask = weakTask; + [strongTask resume]; + }]; + } + + [task addObserver:self + forKeyPath:NSStringFromSelector(@selector(countOfBytesReceived)) + options:NSKeyValueObservingOptionNew + context:NULL]; + [task addObserver:self + forKeyPath:NSStringFromSelector(@selector(countOfBytesExpectedToReceive)) + options:NSKeyValueObservingOptionNew + context:NULL]; + + [task addObserver:self + forKeyPath:NSStringFromSelector(@selector(countOfBytesSent)) + options:NSKeyValueObservingOptionNew + context:NULL]; + [task addObserver:self + forKeyPath:NSStringFromSelector(@selector(countOfBytesExpectedToSend)) + options:NSKeyValueObservingOptionNew + context:NULL]; + + [self.downloadProgress addObserver:self + forKeyPath:NSStringFromSelector(@selector(fractionCompleted)) + options:NSKeyValueObservingOptionNew + context:NULL]; + [self.uploadProgress addObserver:self + forKeyPath:NSStringFromSelector(@selector(fractionCompleted)) + options:NSKeyValueObservingOptionNew + context:NULL]; +} + +- (void)cleanUpProgressForTask:(NSURLSessionTask *)task { + [task removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesReceived))]; + [task removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesExpectedToReceive))]; + [task removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesSent))]; + [task removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesExpectedToSend))]; + [self.downloadProgress removeObserver:self forKeyPath:NSStringFromSelector(@selector(fractionCompleted))]; + [self.uploadProgress removeObserver:self forKeyPath:NSStringFromSelector(@selector(fractionCompleted))]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if ([object isKindOfClass:[NSURLSessionTask class]] || [object isKindOfClass:[NSURLSessionDownloadTask class]]) { + if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesReceived))]) { + self.downloadProgress.completedUnitCount = [change[NSKeyValueChangeNewKey] longLongValue]; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesExpectedToReceive))]) { + self.downloadProgress.totalUnitCount = [change[NSKeyValueChangeNewKey] longLongValue]; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesSent))]) { + self.uploadProgress.completedUnitCount = [change[NSKeyValueChangeNewKey] longLongValue]; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesExpectedToSend))]) { + self.uploadProgress.totalUnitCount = [change[NSKeyValueChangeNewKey] longLongValue]; + } + } + else if ([object isEqual:self.downloadProgress]) { + if (self.downloadProgressBlock) { + self.downloadProgressBlock(object); + } + } + else if ([object isEqual:self.uploadProgress]) { + if (self.uploadProgressBlock) { + self.uploadProgressBlock(object); + } + } +} + +#pragma mark - NSURLSessionTaskDelegate + +- (void)URLSession:(__unused NSURLSession *)session + task:(NSURLSessionTask *)task +didCompleteWithError:(NSError *)error +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + __strong AFURLSessionManager *manager = self.manager; + + __block id responseObject = nil; + + __block NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + userInfo[AFNetworkingTaskDidCompleteResponseSerializerKey] = manager.responseSerializer; + + //Performance Improvement from #2672 + NSData *data = nil; + if (self.mutableData) { + data = [self.mutableData copy]; + //We no longer need the reference, so nil it out to gain back some memory. + self.mutableData = nil; + } + + if (self.downloadFileURL) { + userInfo[AFNetworkingTaskDidCompleteAssetPathKey] = self.downloadFileURL; + } else if (data) { + userInfo[AFNetworkingTaskDidCompleteResponseDataKey] = data; + } + + if (error) { + userInfo[AFNetworkingTaskDidCompleteErrorKey] = error; + + dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{ + if (self.completionHandler) { + self.completionHandler(task.response, responseObject, error); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo]; + }); + }); + } else { + dispatch_async(url_session_manager_processing_queue(), ^{ + NSError *serializationError = nil; + responseObject = [manager.responseSerializer responseObjectForResponse:task.response data:data error:&serializationError]; + + if (self.downloadFileURL) { + responseObject = self.downloadFileURL; + } + + if (responseObject) { + userInfo[AFNetworkingTaskDidCompleteSerializedResponseKey] = responseObject; + } + + if (serializationError) { + userInfo[AFNetworkingTaskDidCompleteErrorKey] = serializationError; + } + + dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{ + if (self.completionHandler) { + self.completionHandler(task.response, responseObject, serializationError); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo]; + }); + }); + }); + } +#pragma clang diagnostic pop +} + +#pragma mark - NSURLSessionDataTaskDelegate + +- (void)URLSession:(__unused NSURLSession *)session + dataTask:(__unused NSURLSessionDataTask *)dataTask + didReceiveData:(NSData *)data +{ + [self.mutableData appendData:data]; +} + +#pragma mark - NSURLSessionDownloadTaskDelegate + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask +didFinishDownloadingToURL:(NSURL *)location +{ + NSError *fileManagerError = nil; + self.downloadFileURL = nil; + + if (self.downloadTaskDidFinishDownloading) { + self.downloadFileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location); + if (self.downloadFileURL) { + [[NSFileManager defaultManager] moveItemAtURL:location toURL:self.downloadFileURL error:&fileManagerError]; + + if (fileManagerError) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:fileManagerError.userInfo]; + } + } + } +} + +@end + +#pragma mark - + +/** + * A workaround for issues related to key-value observing the `state` of an `NSURLSessionTask`. + * + * See: + * - https://github.com/AFNetworking/AFNetworking/issues/1477 + * - https://github.com/AFNetworking/AFNetworking/issues/2638 + * - https://github.com/AFNetworking/AFNetworking/pull/2702 + */ + +static inline void af_swizzleSelector(Class theClass, SEL originalSelector, SEL swizzledSelector) { + Method originalMethod = class_getInstanceMethod(theClass, originalSelector); + Method swizzledMethod = class_getInstanceMethod(theClass, swizzledSelector); + method_exchangeImplementations(originalMethod, swizzledMethod); +} + +static inline BOOL af_addMethod(Class theClass, SEL selector, Method method) { + return class_addMethod(theClass, selector, method_getImplementation(method), method_getTypeEncoding(method)); +} + +static NSString * const AFNSURLSessionTaskDidResumeNotification = @"com.alamofire.networking.nsurlsessiontask.resume"; +static NSString * const AFNSURLSessionTaskDidSuspendNotification = @"com.alamofire.networking.nsurlsessiontask.suspend"; + +@interface _AFURLSessionTaskSwizzling : NSObject + +@end + +@implementation _AFURLSessionTaskSwizzling + ++ (void)load { + /** + WARNING: Trouble Ahead + https://github.com/AFNetworking/AFNetworking/pull/2702 + */ + + if (NSClassFromString(@"NSURLSessionTask")) { + /** + iOS 7 and iOS 8 differ in NSURLSessionTask implementation, which makes the next bit of code a bit tricky. + Many Unit Tests have been built to validate as much of this behavior has possible. + Here is what we know: + - NSURLSessionTasks are implemented with class clusters, meaning the class you request from the API isn't actually the type of class you will get back. + - Simply referencing `[NSURLSessionTask class]` will not work. You need to ask an `NSURLSession` to actually create an object, and grab the class from there. + - On iOS 7, `localDataTask` is a `__NSCFLocalDataTask`, which inherits from `__NSCFLocalSessionTask`, which inherits from `__NSCFURLSessionTask`. + - On iOS 8, `localDataTask` is a `__NSCFLocalDataTask`, which inherits from `__NSCFLocalSessionTask`, which inherits from `NSURLSessionTask`. + - On iOS 7, `__NSCFLocalSessionTask` and `__NSCFURLSessionTask` are the only two classes that have their own implementations of `resume` and `suspend`, and `__NSCFLocalSessionTask` DOES NOT CALL SUPER. This means both classes need to be swizzled. + - On iOS 8, `NSURLSessionTask` is the only class that implements `resume` and `suspend`. This means this is the only class that needs to be swizzled. + - Because `NSURLSessionTask` is not involved in the class hierarchy for every version of iOS, its easier to add the swizzled methods to a dummy class and manage them there. + + Some Assumptions: + - No implementations of `resume` or `suspend` call super. If this were to change in a future version of iOS, we'd need to handle it. + - No background task classes override `resume` or `suspend` + + The current solution: + 1) Grab an instance of `__NSCFLocalDataTask` by asking an instance of `NSURLSession` for a data task. + 2) Grab a pointer to the original implementation of `af_resume` + 3) Check to see if the current class has an implementation of resume. If so, continue to step 4. + 4) Grab the super class of the current class. + 5) Grab a pointer for the current class to the current implementation of `resume`. + 6) Grab a pointer for the super class to the current implementation of `resume`. + 7) If the current class implementation of `resume` is not equal to the super class implementation of `resume` AND the current implementation of `resume` is not equal to the original implementation of `af_resume`, THEN swizzle the methods + 8) Set the current class to the super class, and repeat steps 3-8 + */ + NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration]; + NSURLSession * session = [NSURLSession sessionWithConfiguration:configuration]; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnonnull" + NSURLSessionDataTask *localDataTask = [session dataTaskWithURL:nil]; +#pragma clang diagnostic pop + IMP originalAFResumeIMP = method_getImplementation(class_getInstanceMethod([self class], @selector(af_resume))); + Class currentClass = [localDataTask class]; + + while (class_getInstanceMethod(currentClass, @selector(resume))) { + Class superClass = [currentClass superclass]; + IMP classResumeIMP = method_getImplementation(class_getInstanceMethod(currentClass, @selector(resume))); + IMP superclassResumeIMP = method_getImplementation(class_getInstanceMethod(superClass, @selector(resume))); + if (classResumeIMP != superclassResumeIMP && + originalAFResumeIMP != classResumeIMP) { + [self swizzleResumeAndSuspendMethodForClass:currentClass]; + } + currentClass = [currentClass superclass]; + } + + [localDataTask cancel]; + [session finishTasksAndInvalidate]; + } +} + ++ (void)swizzleResumeAndSuspendMethodForClass:(Class)theClass { + Method afResumeMethod = class_getInstanceMethod(self, @selector(af_resume)); + Method afSuspendMethod = class_getInstanceMethod(self, @selector(af_suspend)); + + if (af_addMethod(theClass, @selector(af_resume), afResumeMethod)) { + af_swizzleSelector(theClass, @selector(resume), @selector(af_resume)); + } + + if (af_addMethod(theClass, @selector(af_suspend), afSuspendMethod)) { + af_swizzleSelector(theClass, @selector(suspend), @selector(af_suspend)); + } +} + +- (NSURLSessionTaskState)state { + NSAssert(NO, @"State method should never be called in the actual dummy class"); + return NSURLSessionTaskStateCanceling; +} + +- (void)af_resume { + NSAssert([self respondsToSelector:@selector(state)], @"Does not respond to state"); + NSURLSessionTaskState state = [self state]; + [self af_resume]; + + if (state != NSURLSessionTaskStateRunning) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidResumeNotification object:self]; + } +} + +- (void)af_suspend { + NSAssert([self respondsToSelector:@selector(state)], @"Does not respond to state"); + NSURLSessionTaskState state = [self state]; + [self af_suspend]; + + if (state != NSURLSessionTaskStateSuspended) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidSuspendNotification object:self]; + } +} +@end + +#pragma mark - + +@interface AFURLSessionManager () +@property (readwrite, nonatomic, strong) NSURLSessionConfiguration *sessionConfiguration; +@property (readwrite, nonatomic, strong) NSOperationQueue *operationQueue; +@property (readwrite, nonatomic, strong) NSURLSession *session; +@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableTaskDelegatesKeyedByTaskIdentifier; +@property (readonly, nonatomic, copy) NSString *taskDescriptionForSessionTasks; +@property (readwrite, nonatomic, strong) NSLock *lock; +@property (readwrite, nonatomic, copy) AFURLSessionDidBecomeInvalidBlock sessionDidBecomeInvalid; +@property (readwrite, nonatomic, copy) AFURLSessionDidReceiveAuthenticationChallengeBlock sessionDidReceiveAuthenticationChallenge; +@property (readwrite, nonatomic, copy) AFURLSessionDidFinishEventsForBackgroundURLSessionBlock didFinishEventsForBackgroundURLSession; +@property (readwrite, nonatomic, copy) AFURLSessionTaskWillPerformHTTPRedirectionBlock taskWillPerformHTTPRedirection; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidReceiveAuthenticationChallengeBlock taskDidReceiveAuthenticationChallenge; +@property (readwrite, nonatomic, copy) AFURLSessionTaskNeedNewBodyStreamBlock taskNeedNewBodyStream; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidSendBodyDataBlock taskDidSendBodyData; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidCompleteBlock taskDidComplete; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveResponseBlock dataTaskDidReceiveResponse; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidBecomeDownloadTaskBlock dataTaskDidBecomeDownloadTask; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveDataBlock dataTaskDidReceiveData; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskWillCacheResponseBlock dataTaskWillCacheResponse; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidWriteDataBlock downloadTaskDidWriteData; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidResumeBlock downloadTaskDidResume; +@end + +@implementation AFURLSessionManager + +- (instancetype)init { + return [self initWithSessionConfiguration:nil]; +} + +- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration { + self = [super init]; + if (!self) { + return nil; + } + + if (!configuration) { + configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; + } + + self.sessionConfiguration = configuration; + + self.operationQueue = [[NSOperationQueue alloc] init]; + self.operationQueue.maxConcurrentOperationCount = 1; + + self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue]; + + self.responseSerializer = [AFJSONResponseSerializer serializer]; + + self.securityPolicy = [AFSecurityPolicy defaultPolicy]; + +#if !TARGET_OS_WATCH + self.reachabilityManager = [AFNetworkReachabilityManager sharedManager]; +#endif + + self.mutableTaskDelegatesKeyedByTaskIdentifier = [[NSMutableDictionary alloc] init]; + + self.lock = [[NSLock alloc] init]; + self.lock.name = AFURLSessionManagerLockName; + + [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { + for (NSURLSessionDataTask *task in dataTasks) { + [self addDelegateForDataTask:task uploadProgress:nil downloadProgress:nil completionHandler:nil]; + } + + for (NSURLSessionUploadTask *uploadTask in uploadTasks) { + [self addDelegateForUploadTask:uploadTask progress:nil completionHandler:nil]; + } + + for (NSURLSessionDownloadTask *downloadTask in downloadTasks) { + [self addDelegateForDownloadTask:downloadTask progress:nil destination:nil completionHandler:nil]; + } + }]; + + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - + +- (NSString *)taskDescriptionForSessionTasks { + return [NSString stringWithFormat:@"%p", self]; +} + +- (void)taskDidResume:(NSNotification *)notification { + NSURLSessionTask *task = notification.object; + if ([task respondsToSelector:@selector(taskDescription)]) { + if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidResumeNotification object:task]; + }); + } + } +} + +- (void)taskDidSuspend:(NSNotification *)notification { + NSURLSessionTask *task = notification.object; + if ([task respondsToSelector:@selector(taskDescription)]) { + if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidSuspendNotification object:task]; + }); + } + } +} + +#pragma mark - + +- (AFURLSessionManagerTaskDelegate *)delegateForTask:(NSURLSessionTask *)task { + NSParameterAssert(task); + + AFURLSessionManagerTaskDelegate *delegate = nil; + [self.lock lock]; + delegate = self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)]; + [self.lock unlock]; + + return delegate; +} + +- (void)setDelegate:(AFURLSessionManagerTaskDelegate *)delegate + forTask:(NSURLSessionTask *)task +{ + NSParameterAssert(task); + NSParameterAssert(delegate); + + [self.lock lock]; + self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)] = delegate; + [delegate setupProgressForTask:task]; + [self addNotificationObserverForTask:task]; + [self.lock unlock]; +} + +- (void)addDelegateForDataTask:(NSURLSessionDataTask *)dataTask + uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgressBlock + downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgressBlock + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + dataTask.taskDescription = self.taskDescriptionForSessionTasks; + [self setDelegate:delegate forTask:dataTask]; + + delegate.uploadProgressBlock = uploadProgressBlock; + delegate.downloadProgressBlock = downloadProgressBlock; +} + +- (void)addDelegateForUploadTask:(NSURLSessionUploadTask *)uploadTask + progress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlock + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + uploadTask.taskDescription = self.taskDescriptionForSessionTasks; + + [self setDelegate:delegate forTask:uploadTask]; + + delegate.uploadProgressBlock = uploadProgressBlock; +} + +- (void)addDelegateForDownloadTask:(NSURLSessionDownloadTask *)downloadTask + progress:(void (^)(NSProgress *downloadProgress)) downloadProgressBlock + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + if (destination) { + delegate.downloadTaskDidFinishDownloading = ^NSURL * (NSURLSession * __unused session, NSURLSessionDownloadTask *task, NSURL *location) { + return destination(location, task.response); + }; + } + + downloadTask.taskDescription = self.taskDescriptionForSessionTasks; + + [self setDelegate:delegate forTask:downloadTask]; + + delegate.downloadProgressBlock = downloadProgressBlock; +} + +- (void)removeDelegateForTask:(NSURLSessionTask *)task { + NSParameterAssert(task); + + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; + [self.lock lock]; + [delegate cleanUpProgressForTask:task]; + [self removeNotificationObserverForTask:task]; + [self.mutableTaskDelegatesKeyedByTaskIdentifier removeObjectForKey:@(task.taskIdentifier)]; + [self.lock unlock]; +} + +#pragma mark - + +- (NSArray *)tasksForKeyPath:(NSString *)keyPath { + __block NSArray *tasks = nil; + dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); + [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { + if ([keyPath isEqualToString:NSStringFromSelector(@selector(dataTasks))]) { + tasks = dataTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(uploadTasks))]) { + tasks = uploadTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(downloadTasks))]) { + tasks = downloadTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(tasks))]) { + tasks = [@[dataTasks, uploadTasks, downloadTasks] valueForKeyPath:@"@unionOfArrays.self"]; + } + + dispatch_semaphore_signal(semaphore); + }]; + + dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); + + return tasks; +} + +- (NSArray *)tasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)dataTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)uploadTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)downloadTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +#pragma mark - + +- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks { + dispatch_async(dispatch_get_main_queue(), ^{ + if (cancelPendingTasks) { + [self.session invalidateAndCancel]; + } else { + [self.session finishTasksAndInvalidate]; + } + }); +} + +#pragma mark - + +- (void)setResponseSerializer:(id )responseSerializer { + NSParameterAssert(responseSerializer); + + _responseSerializer = responseSerializer; +} + +#pragma mark - +- (void)addNotificationObserverForTask:(NSURLSessionTask *)task { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskDidResume:) name:AFNSURLSessionTaskDidResumeNotification object:task]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskDidSuspend:) name:AFNSURLSessionTaskDidSuspendNotification object:task]; +} + +- (void)removeNotificationObserverForTask:(NSURLSessionTask *)task { + [[NSNotificationCenter defaultCenter] removeObserver:self name:AFNSURLSessionTaskDidSuspendNotification object:task]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:AFNSURLSessionTaskDidResumeNotification object:task]; +} + +#pragma mark - + +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + return [self dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:completionHandler]; +} + +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgressBlock + downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgressBlock + completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler { + + __block NSURLSessionDataTask *dataTask = nil; + url_session_manager_create_task_safely(^{ + dataTask = [self.session dataTaskWithRequest:request]; + }); + + [self addDelegateForDataTask:dataTask uploadProgress:uploadProgressBlock downloadProgress:downloadProgressBlock completionHandler:completionHandler]; + + return dataTask; +} + +#pragma mark - + +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromFile:(NSURL *)fileURL + progress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlock + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + url_session_manager_create_task_safely(^{ + uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; + }); + + if (!uploadTask && self.attemptsToRecreateUploadTasksForBackgroundSessions && self.session.configuration.identifier) { + for (NSUInteger attempts = 0; !uploadTask && attempts < AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask; attempts++) { + uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; + } + } + + [self addDelegateForUploadTask:uploadTask progress:uploadProgressBlock completionHandler:completionHandler]; + + return uploadTask; +} + +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromData:(NSData *)bodyData + progress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlock + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + url_session_manager_create_task_safely(^{ + uploadTask = [self.session uploadTaskWithRequest:request fromData:bodyData]; + }); + + [self addDelegateForUploadTask:uploadTask progress:uploadProgressBlock completionHandler:completionHandler]; + + return uploadTask; +} + +- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request + progress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlock + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + url_session_manager_create_task_safely(^{ + uploadTask = [self.session uploadTaskWithStreamedRequest:request]; + }); + + [self addDelegateForUploadTask:uploadTask progress:uploadProgressBlock completionHandler:completionHandler]; + + return uploadTask; +} + +#pragma mark - + +- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request + progress:(void (^)(NSProgress *downloadProgress)) downloadProgressBlock + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + __block NSURLSessionDownloadTask *downloadTask = nil; + url_session_manager_create_task_safely(^{ + downloadTask = [self.session downloadTaskWithRequest:request]; + }); + + [self addDelegateForDownloadTask:downloadTask progress:downloadProgressBlock destination:destination completionHandler:completionHandler]; + + return downloadTask; +} + +- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData + progress:(void (^)(NSProgress *downloadProgress)) downloadProgressBlock + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + __block NSURLSessionDownloadTask *downloadTask = nil; + url_session_manager_create_task_safely(^{ + downloadTask = [self.session downloadTaskWithResumeData:resumeData]; + }); + + [self addDelegateForDownloadTask:downloadTask progress:downloadProgressBlock destination:destination completionHandler:completionHandler]; + + return downloadTask; +} + +#pragma mark - +- (NSProgress *)uploadProgressForTask:(NSURLSessionTask *)task { + return [[self delegateForTask:task] uploadProgress]; +} + +- (NSProgress *)downloadProgressForTask:(NSURLSessionTask *)task { + return [[self delegateForTask:task] downloadProgress]; +} + +#pragma mark - + +- (void)setSessionDidBecomeInvalidBlock:(void (^)(NSURLSession *session, NSError *error))block { + self.sessionDidBecomeInvalid = block; +} + +- (void)setSessionDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { + self.sessionDidReceiveAuthenticationChallenge = block; +} + +- (void)setDidFinishEventsForBackgroundURLSessionBlock:(void (^)(NSURLSession *session))block { + self.didFinishEventsForBackgroundURLSession = block; +} + +#pragma mark - + +- (void)setTaskNeedNewBodyStreamBlock:(NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block { + self.taskNeedNewBodyStream = block; +} + +- (void)setTaskWillPerformHTTPRedirectionBlock:(NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block { + self.taskWillPerformHTTPRedirection = block; +} + +- (void)setTaskDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { + self.taskDidReceiveAuthenticationChallenge = block; +} + +- (void)setTaskDidSendBodyDataBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block { + self.taskDidSendBodyData = block; +} + +- (void)setTaskDidCompleteBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, NSError *error))block { + self.taskDidComplete = block; +} + +#pragma mark - + +- (void)setDataTaskDidReceiveResponseBlock:(NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block { + self.dataTaskDidReceiveResponse = block; +} + +- (void)setDataTaskDidBecomeDownloadTaskBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block { + self.dataTaskDidBecomeDownloadTask = block; +} + +- (void)setDataTaskDidReceiveDataBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block { + self.dataTaskDidReceiveData = block; +} + +- (void)setDataTaskWillCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block { + self.dataTaskWillCacheResponse = block; +} + +#pragma mark - + +- (void)setDownloadTaskDidFinishDownloadingBlock:(NSURL * (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block { + self.downloadTaskDidFinishDownloading = block; +} + +- (void)setDownloadTaskDidWriteDataBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block { + self.downloadTaskDidWriteData = block; +} + +- (void)setDownloadTaskDidResumeBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block { + self.downloadTaskDidResume = block; +} + +#pragma mark - NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p, session: %@, operationQueue: %@>", NSStringFromClass([self class]), self, self.session, self.operationQueue]; +} + +- (BOOL)respondsToSelector:(SEL)selector { + if (selector == @selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)) { + return self.taskWillPerformHTTPRedirection != nil; + } else if (selector == @selector(URLSession:dataTask:didReceiveResponse:completionHandler:)) { + return self.dataTaskDidReceiveResponse != nil; + } else if (selector == @selector(URLSession:dataTask:willCacheResponse:completionHandler:)) { + return self.dataTaskWillCacheResponse != nil; + } else if (selector == @selector(URLSessionDidFinishEventsForBackgroundURLSession:)) { + return self.didFinishEventsForBackgroundURLSession != nil; + } + + return [[self class] instancesRespondToSelector:selector]; +} + +#pragma mark - NSURLSessionDelegate + +- (void)URLSession:(NSURLSession *)session +didBecomeInvalidWithError:(NSError *)error +{ + if (self.sessionDidBecomeInvalid) { + self.sessionDidBecomeInvalid(session, error); + } + + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDidInvalidateNotification object:session]; +} + +- (void)URLSession:(NSURLSession *)session +didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler +{ + NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; + __block NSURLCredential *credential = nil; + + if (self.sessionDidReceiveAuthenticationChallenge) { + disposition = self.sessionDidReceiveAuthenticationChallenge(session, challenge, &credential); + } else { + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { + credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + if (credential) { + disposition = NSURLSessionAuthChallengeUseCredential; + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } else { + disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; + } + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } + + if (completionHandler) { + completionHandler(disposition, credential); + } +} + +#pragma mark - NSURLSessionTaskDelegate + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +willPerformHTTPRedirection:(NSHTTPURLResponse *)response + newRequest:(NSURLRequest *)request + completionHandler:(void (^)(NSURLRequest *))completionHandler +{ + NSURLRequest *redirectRequest = request; + + if (self.taskWillPerformHTTPRedirection) { + redirectRequest = self.taskWillPerformHTTPRedirection(session, task, response, request); + } + + if (completionHandler) { + completionHandler(redirectRequest); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler +{ + NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; + __block NSURLCredential *credential = nil; + + if (self.taskDidReceiveAuthenticationChallenge) { + disposition = self.taskDidReceiveAuthenticationChallenge(session, task, challenge, &credential); + } else { + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { + disposition = NSURLSessionAuthChallengeUseCredential; + credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + } else { + disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; + } + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } + + if (completionHandler) { + completionHandler(disposition, credential); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + needNewBodyStream:(void (^)(NSInputStream *bodyStream))completionHandler +{ + NSInputStream *inputStream = nil; + + if (self.taskNeedNewBodyStream) { + inputStream = self.taskNeedNewBodyStream(session, task); + } else if (task.originalRequest.HTTPBodyStream && [task.originalRequest.HTTPBodyStream conformsToProtocol:@protocol(NSCopying)]) { + inputStream = [task.originalRequest.HTTPBodyStream copy]; + } + + if (completionHandler) { + completionHandler(inputStream); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + didSendBodyData:(int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent +totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend +{ + + int64_t totalUnitCount = totalBytesExpectedToSend; + if(totalUnitCount == NSURLSessionTransferSizeUnknown) { + NSString *contentLength = [task.originalRequest valueForHTTPHeaderField:@"Content-Length"]; + if(contentLength) { + totalUnitCount = (int64_t) [contentLength longLongValue]; + } + } + + if (self.taskDidSendBodyData) { + self.taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalUnitCount); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didCompleteWithError:(NSError *)error +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; + + // delegate may be nil when completing a task in the background + if (delegate) { + [delegate URLSession:session task:task didCompleteWithError:error]; + + [self removeDelegateForTask:task]; + } + + if (self.taskDidComplete) { + self.taskDidComplete(session, task, error); + } +} + +#pragma mark - NSURLSessionDataDelegate + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didReceiveResponse:(NSURLResponse *)response + completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler +{ + NSURLSessionResponseDisposition disposition = NSURLSessionResponseAllow; + + if (self.dataTaskDidReceiveResponse) { + disposition = self.dataTaskDidReceiveResponse(session, dataTask, response); + } + + if (completionHandler) { + completionHandler(disposition); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask]; + if (delegate) { + [self removeDelegateForTask:dataTask]; + [self setDelegate:delegate forTask:downloadTask]; + } + + if (self.dataTaskDidBecomeDownloadTask) { + self.dataTaskDidBecomeDownloadTask(session, dataTask, downloadTask); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + didReceiveData:(NSData *)data +{ + + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask]; + [delegate URLSession:session dataTask:dataTask didReceiveData:data]; + + if (self.dataTaskDidReceiveData) { + self.dataTaskDidReceiveData(session, dataTask, data); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + willCacheResponse:(NSCachedURLResponse *)proposedResponse + completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler +{ + NSCachedURLResponse *cachedResponse = proposedResponse; + + if (self.dataTaskWillCacheResponse) { + cachedResponse = self.dataTaskWillCacheResponse(session, dataTask, proposedResponse); + } + + if (completionHandler) { + completionHandler(cachedResponse); + } +} + +- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session { + if (self.didFinishEventsForBackgroundURLSession) { + dispatch_async(dispatch_get_main_queue(), ^{ + self.didFinishEventsForBackgroundURLSession(session); + }); + } +} + +#pragma mark - NSURLSessionDownloadDelegate + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask +didFinishDownloadingToURL:(NSURL *)location +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; + if (self.downloadTaskDidFinishDownloading) { + NSURL *fileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location); + if (fileURL) { + delegate.downloadFileURL = fileURL; + NSError *error = nil; + [[NSFileManager defaultManager] moveItemAtURL:location toURL:fileURL error:&error]; + if (error) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:error.userInfo]; + } + + return; + } + } + + if (delegate) { + [delegate URLSession:session downloadTask:downloadTask didFinishDownloadingToURL:location]; + } +} + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didWriteData:(int64_t)bytesWritten + totalBytesWritten:(int64_t)totalBytesWritten +totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite +{ + if (self.downloadTaskDidWriteData) { + self.downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + } +} + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didResumeAtOffset:(int64_t)fileOffset +expectedTotalBytes:(int64_t)expectedTotalBytes +{ + if (self.downloadTaskDidResume) { + self.downloadTaskDidResume(session, downloadTask, fileOffset, expectedTotalBytes); + } +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@"sessionConfiguration"]; + + self = [self initWithSessionConfiguration:configuration]; + if (!self) { + return nil; + } + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.session.configuration forKey:@"sessionConfiguration"]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + return [[[self class] allocWithZone:zone] initWithSessionConfiguration:self.session.configuration]; +} + +@end diff --git a/Autorization:Registration Example/Pods/AFNetworking/LICENSE b/Autorization:Registration Example/Pods/AFNetworking/LICENSE new file mode 100644 index 0000000..3fbc2c9 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011–2016 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Autorization:Registration Example/Pods/AFNetworking/README.md b/Autorization:Registration Example/Pods/AFNetworking/README.md new file mode 100644 index 0000000..53cb202 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/README.md @@ -0,0 +1,320 @@ +

+ AFNetworking +

+ +[![Build Status](https://travis-ci.org/AFNetworking/AFNetworking.svg)](https://travis-ci.org/AFNetworking/AFNetworking) +[![codecov.io](https://codecov.io/github/AFNetworking/AFNetworking/coverage.svg?branch=master)](https://codecov.io/github/AFNetworking/AFNetworking?branch=master) +[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/AFNetworking.svg)](https://img.shields.io/cocoapods/v/AFNetworking.svg) +[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +[![Platform](https://img.shields.io/cocoapods/p/AFNetworking.svg?style=flat)](http://cocoadocs.org/docsets/AFNetworking) +[![Twitter](https://img.shields.io/badge/twitter-@AFNetworking-blue.svg?style=flat)](http://twitter.com/AFNetworking) + +AFNetworking is a delightful networking library for iOS and Mac OS X. It's built on top of the [Foundation URL Loading System](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html), extending the powerful high-level networking abstractions built into Cocoa. It has a modular architecture with well-designed, feature-rich APIs that are a joy to use. + +Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac. + +Choose AFNetworking for your next project, or migrate over your existing projects—you'll be happy you did! + +## How To Get Started + +- [Download AFNetworking](https://github.com/AFNetworking/AFNetworking/archive/master.zip) and try out the included Mac and iPhone example apps +- Read the ["Getting Started" guide](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking), [FAQ](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-FAQ), or [other articles on the Wiki](https://github.com/AFNetworking/AFNetworking/wiki) +- Check out the [documentation](http://cocoadocs.org/docsets/AFNetworking/) for a comprehensive look at all of the APIs available in AFNetworking +- Read the [AFNetworking 3.0 Migration Guide](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-3.0-Migration-Guide) for an overview of the architectural changes from 2.0. + +## Communication + +- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/afnetworking). (Tag 'afnetworking') +- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/afnetworking). +- If you **found a bug**, _and can provide steps to reliably reproduce it_, open an issue. +- If you **have a feature request**, open an issue. +- If you **want to contribute**, submit a pull request. + +## Installation +AFNetworking supports multiple methods for installing the library in a project. + +## Installation with CocoaPods + +[CocoaPods](http://cocoapods.org) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries like AFNetworking in your projects. See the ["Getting Started" guide for more information](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking). You can install it with the following command: + +```bash +$ gem install cocoapods +``` + +> CocoaPods 0.39.0+ is required to build AFNetworking 3.0.0+. + +#### Podfile + +To integrate AFNetworking into your Xcode project using CocoaPods, specify it in your `Podfile`: + +```ruby +source 'https://github.com/CocoaPods/Specs.git' +platform :ios, '8.0' + +pod 'AFNetworking', '~> 3.0' +``` + +Then, run the following command: + +```bash +$ pod install +``` + +### Installation with Carthage + +[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. + +You can install Carthage with [Homebrew](http://brew.sh/) using the following command: + +```bash +$ brew update +$ brew install carthage +``` + +To integrate AFNetworking into your Xcode project using Carthage, specify it in your `Cartfile`: + +```ogdl +github "AFNetworking/AFNetworking" ~> 3.0 +``` + +Run `carthage` to build the framework and drag the built `AFNetworking.framework` into your Xcode project. + +## Requirements + +| AFNetworking Version | Minimum iOS Target | Minimum OS X Target | Minimum watchOS Target | Minimum tvOS Target | Notes | +|:--------------------:|:---------------------------:|:----------------------------:|:----------------------------:|:----------------------------:|:-------------------------------------------------------------------------:| +| 3.x | iOS 7 | OS X 10.9 | watchOS 2.0 | tvOS 9.0 | Xcode 7+ is required. `NSURLConnectionOperation` support has been removed. | +| 2.6 -> 2.6.3 | iOS 7 | OS X 10.9 | watchOS 2.0 | n/a | Xcode 7+ is required. | +| 2.0 -> 2.5.4 | iOS 6 | OS X 10.8 | n/a | n/a | Xcode 5+ is required. `NSURLSession` subspec requires iOS 7 or OS X 10.9. | +| 1.x | iOS 5 | Mac OS X 10.7 | n/a | n/a | +| 0.10.x | iOS 4 | Mac OS X 10.6 | n/a | n/a | + +(OS X projects must support [64-bit with modern Cocoa runtime](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html)). + +> Programming in Swift? Try [Alamofire](https://github.com/Alamofire/Alamofire) for a more conventional set of APIs. + +## Architecture + +### NSURLSession + +- `AFURLSessionManager` +- `AFHTTPSessionManager` + +### Serialization + +* `` + - `AFHTTPRequestSerializer` + - `AFJSONRequestSerializer` + - `AFPropertyListRequestSerializer` +* `` + - `AFHTTPResponseSerializer` + - `AFJSONResponseSerializer` + - `AFXMLParserResponseSerializer` + - `AFXMLDocumentResponseSerializer` _(Mac OS X)_ + - `AFPropertyListResponseSerializer` + - `AFImageResponseSerializer` + - `AFCompoundResponseSerializer` + +### Additional Functionality + +- `AFSecurityPolicy` +- `AFNetworkReachabilityManager` + +## Usage + +### AFURLSessionManager + +`AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to ``, ``, ``, and ``. + +#### Creating a Download Task + +```objective-c +NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; + +NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; + +NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { + NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; + return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]]; +} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { + NSLog(@"File downloaded to: %@", filePath); +}]; +[downloadTask resume]; +``` + +#### Creating an Upload Task + +```objective-c +NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; + +NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; + +NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; +NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + if (error) { + NSLog(@"Error: %@", error); + } else { + NSLog(@"Success: %@ %@", response, responseObject); + } +}]; +[uploadTask resume]; +``` + +#### Creating an Upload Task for a Multi-Part Request, with Progress + +```objective-c +NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id formData) { + [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil]; + } error:nil]; + +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; + +NSURLSessionUploadTask *uploadTask; +uploadTask = [manager + uploadTaskWithStreamedRequest:request + progress:^(NSProgress * _Nonnull uploadProgress) { + // This is not called back on the main queue. + // You are responsible for dispatching to the main queue for UI updates + dispatch_async(dispatch_get_main_queue(), ^{ + //Update the progress view + [progressView setProgress:uploadProgress.fractionCompleted]; + }); + } + completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { + if (error) { + NSLog(@"Error: %@", error); + } else { + NSLog(@"%@ %@", response, responseObject); + } + }]; + +[uploadTask resume]; +``` + +#### Creating a Data Task + +```objective-c +NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; + +NSURL *URL = [NSURL URLWithString:@"http://httpbin.org/get"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; + +NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + if (error) { + NSLog(@"Error: %@", error); + } else { + NSLog(@"%@ %@", response, responseObject); + } +}]; +[dataTask resume]; +``` + +--- + +### Request Serialization + +Request serializers create requests from URL strings, encoding parameters as either a query string or HTTP body. + +```objective-c +NSString *URLString = @"http://example.com"; +NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]}; +``` + +#### Query String Parameter Encoding + +```objective-c +[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil]; +``` + + GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3 + +#### URL Form Parameter Encoding + +```objective-c +[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil]; +``` + + POST http://example.com/ + Content-Type: application/x-www-form-urlencoded + + foo=bar&baz[]=1&baz[]=2&baz[]=3 + +#### JSON Parameter Encoding + +```objective-c +[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil]; +``` + + POST http://example.com/ + Content-Type: application/json + + {"foo": "bar", "baz": [1,2,3]} + +--- + +### Network Reachability Manager + +`AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. + +* Do not use Reachability to determine if the original request should be sent. + * You should try to send it. +* You can use Reachability to determine when a request should be automatically retried. + * Although it may still fail, a Reachability notification that the connectivity is available is a good time to retry something. +* Network reachability is a useful tool for determining why a request might have failed. + * After a network request has failed, telling the user they're offline is better than giving them a more technical but accurate error, such as "request timed out." + +See also [WWDC 2012 session 706, "Networking Best Practices."](https://developer.apple.com/videos/play/wwdc2012-706/). + +#### Shared Network Reachability + +```objective-c +[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { + NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); +}]; + +[[AFNetworkReachabilityManager sharedManager] startMonitoring]; +``` + +--- + +### Security Policy + +`AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections. + +Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. + +#### Allowing Invalid SSL Certificates + +```objective-c +AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; +manager.securityPolicy.allowInvalidCertificates = YES; // not recommended for production +``` + +--- + +## Unit Tests + +AFNetworking includes a suite of unit tests within the Tests subdirectory. These tests can be run simply be executed the test action on the platform framework you would like to test. + +## Credits + +AFNetworking is owned and maintained by the [Alamofire Software Foundation](http://alamofire.org). + +AFNetworking was originally created by [Scott Raymond](https://github.com/sco/) and [Mattt Thompson](https://github.com/mattt/) in the development of [Gowalla for iPhone](http://en.wikipedia.org/wiki/Gowalla). + +AFNetworking's logo was designed by [Alan Defibaugh](http://www.alandefibaugh.com/). + +And most of all, thanks to AFNetworking's [growing list of contributors](https://github.com/AFNetworking/AFNetworking/contributors). + +### Security Disclosure + +If you believe you have identified a security vulnerability with AFNetworking, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker. + +## License + +AFNetworking is released under the MIT license. See LICENSE for details. diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFAutoPurgingImageCache.h b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFAutoPurgingImageCache.h new file mode 100644 index 0000000..9bdc15c --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFAutoPurgingImageCache.h @@ -0,0 +1,149 @@ +// AFAutoPurgingImageCache.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import + +#if TARGET_OS_IOS || TARGET_OS_TV +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + The `AFImageCache` protocol defines a set of APIs for adding, removing and fetching images from a cache synchronously. + */ +@protocol AFImageCache + +/** + Adds the image to the cache with the given identifier. + + @param image The image to cache. + @param identifier The unique identifier for the image in the cache. + */ +- (void)addImage:(UIImage *)image withIdentifier:(NSString *)identifier; + +/** + Removes the image from the cache matching the given identifier. + + @param identifier The unique identifier for the image in the cache. + + @return A BOOL indicating whether or not the image was removed from the cache. + */ +- (BOOL)removeImageWithIdentifier:(NSString *)identifier; + +/** + Removes all images from the cache. + + @return A BOOL indicating whether or not all images were removed from the cache. + */ +- (BOOL)removeAllImages; + +/** + Returns the image in the cache associated with the given identifier. + + @param identifier The unique identifier for the image in the cache. + + @return An image for the matching identifier, or nil. + */ +- (nullable UIImage *)imageWithIdentifier:(NSString *)identifier; +@end + + +/** + The `ImageRequestCache` protocol extends the `ImageCache` protocol by adding methods for adding, removing and fetching images from a cache given an `NSURLRequest` and additional identifier. + */ +@protocol AFImageRequestCache + +/** + Adds the image to the cache using an identifier created from the request and additional identifier. + + @param image The image to cache. + @param request The unique URL request identifing the image asset. + @param identifier The additional identifier to apply to the URL request to identify the image. + */ +- (void)addImage:(UIImage *)image forRequest:(NSURLRequest *)request withAdditionalIdentifier:(nullable NSString *)identifier; + +/** + Removes the image from the cache using an identifier created from the request and additional identifier. + + @param request The unique URL request identifing the image asset. + @param identifier The additional identifier to apply to the URL request to identify the image. + + @return A BOOL indicating whether or not all images were removed from the cache. + */ +- (BOOL)removeImageforRequest:(NSURLRequest *)request withAdditionalIdentifier:(nullable NSString *)identifier; + +/** + Returns the image from the cache associated with an identifier created from the request and additional identifier. + + @param request The unique URL request identifing the image asset. + @param identifier The additional identifier to apply to the URL request to identify the image. + + @return An image for the matching request and identifier, or nil. + */ +- (nullable UIImage *)imageforRequest:(NSURLRequest *)request withAdditionalIdentifier:(nullable NSString *)identifier; + +@end + +/** + The `AutoPurgingImageCache` in an in-memory image cache used to store images up to a given memory capacity. When the memory capacity is reached, the image cache is sorted by last access date, then the oldest image is continuously purged until the preferred memory usage after purge is met. Each time an image is accessed through the cache, the internal access date of the image is updated. + */ +@interface AFAutoPurgingImageCache : NSObject + +/** + The total memory capacity of the cache in bytes. + */ +@property (nonatomic, assign) UInt64 memoryCapacity; + +/** + The preferred memory usage after purge in bytes. During a purge, images will be purged until the memory capacity drops below this limit. + */ +@property (nonatomic, assign) UInt64 preferredMemoryUsageAfterPurge; + +/** + The current total memory usage in bytes of all images stored within the cache. + */ +@property (nonatomic, assign, readonly) UInt64 memoryUsage; + +/** + Initialies the `AutoPurgingImageCache` instance with default values for memory capacity and preferred memory usage after purge limit. `memoryCapcity` defaults to `100 MB`. `preferredMemoryUsageAfterPurge` defaults to `60 MB`. + + @return The new `AutoPurgingImageCache` instance. + */ +- (instancetype)init; + +/** + Initialies the `AutoPurgingImageCache` instance with the given memory capacity and preferred memory usage + after purge limit. + + @param memoryCapacity The total memory capacity of the cache in bytes. + @param preferredMemoryCapacity The preferred memory usage after purge in bytes. + + @return The new `AutoPurgingImageCache` instance. + */ +- (instancetype)initWithMemoryCapacity:(UInt64)memoryCapacity preferredMemoryCapacity:(UInt64)preferredMemoryCapacity; + +@end + +NS_ASSUME_NONNULL_END + +#endif + diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFAutoPurgingImageCache.m b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFAutoPurgingImageCache.m new file mode 100644 index 0000000..1f40715 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFAutoPurgingImageCache.m @@ -0,0 +1,201 @@ +// AFAutoPurgingImageCache.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#if TARGET_OS_IOS || TARGET_OS_TV + +#import "AFAutoPurgingImageCache.h" + +@interface AFCachedImage : NSObject + +@property (nonatomic, strong) UIImage *image; +@property (nonatomic, strong) NSString *identifier; +@property (nonatomic, assign) UInt64 totalBytes; +@property (nonatomic, strong) NSDate *lastAccessDate; +@property (nonatomic, assign) UInt64 currentMemoryUsage; + +@end + +@implementation AFCachedImage + +-(instancetype)initWithImage:(UIImage *)image identifier:(NSString *)identifier { + if (self = [self init]) { + self.image = image; + self.identifier = identifier; + + CGSize imageSize = CGSizeMake(image.size.width * image.scale, image.size.height * image.scale); + CGFloat bytesPerPixel = 4.0; + CGFloat bytesPerSize = imageSize.width * imageSize.height; + self.totalBytes = (UInt64)bytesPerPixel * (UInt64)bytesPerSize; + self.lastAccessDate = [NSDate date]; + } + return self; +} + +- (UIImage*)accessImage { + self.lastAccessDate = [NSDate date]; + return self.image; +} + +- (NSString *)description { + NSString *descriptionString = [NSString stringWithFormat:@"Idenfitier: %@ lastAccessDate: %@ ", self.identifier, self.lastAccessDate]; + return descriptionString; + +} + +@end + +@interface AFAutoPurgingImageCache () +@property (nonatomic, strong) NSMutableDictionary *cachedImages; +@property (nonatomic, assign) UInt64 currentMemoryUsage; +@property (nonatomic, strong) dispatch_queue_t synchronizationQueue; +@end + +@implementation AFAutoPurgingImageCache + +- (instancetype)init { + return [self initWithMemoryCapacity:100 * 1024 * 1024 preferredMemoryCapacity:60 * 1024 * 1024]; +} + +- (instancetype)initWithMemoryCapacity:(UInt64)memoryCapacity preferredMemoryCapacity:(UInt64)preferredMemoryCapacity { + if (self = [super init]) { + self.memoryCapacity = memoryCapacity; + self.preferredMemoryUsageAfterPurge = preferredMemoryCapacity; + self.cachedImages = [[NSMutableDictionary alloc] init]; + + NSString *queueName = [NSString stringWithFormat:@"com.alamofire.autopurgingimagecache-%@", [[NSUUID UUID] UUIDString]]; + self.synchronizationQueue = dispatch_queue_create([queueName cStringUsingEncoding:NSASCIIStringEncoding], DISPATCH_QUEUE_CONCURRENT); + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(removeAllImages) + name:UIApplicationDidReceiveMemoryWarningNotification + object:nil]; + + } + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (UInt64)memoryUsage { + __block UInt64 result = 0; + dispatch_sync(self.synchronizationQueue, ^{ + result = self.currentMemoryUsage; + }); + return result; +} + +- (void)addImage:(UIImage *)image withIdentifier:(NSString *)identifier { + dispatch_barrier_async(self.synchronizationQueue, ^{ + AFCachedImage *cacheImage = [[AFCachedImage alloc] initWithImage:image identifier:identifier]; + + AFCachedImage *previousCachedImage = self.cachedImages[identifier]; + if (previousCachedImage != nil) { + self.currentMemoryUsage -= previousCachedImage.totalBytes; + } + + self.cachedImages[identifier] = cacheImage; + self.currentMemoryUsage += cacheImage.totalBytes; + }); + + dispatch_barrier_async(self.synchronizationQueue, ^{ + if (self.currentMemoryUsage > self.memoryCapacity) { + UInt64 bytesToPurge = self.currentMemoryUsage - self.preferredMemoryUsageAfterPurge; + NSMutableArray *sortedImages = [NSMutableArray arrayWithArray:self.cachedImages.allValues]; + NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastAccessDate" + ascending:YES]; + [sortedImages sortUsingDescriptors:@[sortDescriptor]]; + + UInt64 bytesPurged = 0; + + for (AFCachedImage *cachedImage in sortedImages) { + [self.cachedImages removeObjectForKey:cachedImage.identifier]; + bytesPurged += cachedImage.totalBytes; + if (bytesPurged >= bytesToPurge) { + break ; + } + } + self.currentMemoryUsage -= bytesPurged; + } + }); +} + +- (BOOL)removeImageWithIdentifier:(NSString *)identifier { + __block BOOL removed = NO; + dispatch_barrier_sync(self.synchronizationQueue, ^{ + AFCachedImage *cachedImage = self.cachedImages[identifier]; + if (cachedImage != nil) { + [self.cachedImages removeObjectForKey:identifier]; + self.currentMemoryUsage -= cachedImage.totalBytes; + removed = YES; + } + }); + return removed; +} + +- (BOOL)removeAllImages { + __block BOOL removed = NO; + dispatch_barrier_sync(self.synchronizationQueue, ^{ + if (self.cachedImages.count > 0) { + [self.cachedImages removeAllObjects]; + self.currentMemoryUsage = 0; + removed = YES; + } + }); + return removed; +} + +- (nullable UIImage *)imageWithIdentifier:(NSString *)identifier { + __block UIImage *image = nil; + dispatch_sync(self.synchronizationQueue, ^{ + AFCachedImage *cachedImage = self.cachedImages[identifier]; + image = [cachedImage accessImage]; + }); + return image; +} + +- (void)addImage:(UIImage *)image forRequest:(NSURLRequest *)request withAdditionalIdentifier:(NSString *)identifier { + [self addImage:image withIdentifier:[self imageCacheKeyFromURLRequest:request withAdditionalIdentifier:identifier]]; +} + +- (BOOL)removeImageforRequest:(NSURLRequest *)request withAdditionalIdentifier:(NSString *)identifier { + return [self removeImageWithIdentifier:[self imageCacheKeyFromURLRequest:request withAdditionalIdentifier:identifier]]; +} + +- (nullable UIImage *)imageforRequest:(NSURLRequest *)request withAdditionalIdentifier:(NSString *)identifier { + return [self imageWithIdentifier:[self imageCacheKeyFromURLRequest:request withAdditionalIdentifier:identifier]]; +} + +- (NSString *)imageCacheKeyFromURLRequest:(NSURLRequest *)request withAdditionalIdentifier:(NSString *)additionalIdentifier { + NSString *key = request.URL.absoluteString; + if (additionalIdentifier != nil) { + key = [key stringByAppendingString:additionalIdentifier]; + } + return key; +} + +@end + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFImageDownloader.h b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFImageDownloader.h new file mode 100644 index 0000000..3903eec --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFImageDownloader.h @@ -0,0 +1,157 @@ +// AFImageDownloader.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#if TARGET_OS_IOS || TARGET_OS_TV + +#import +#import "AFAutoPurgingImageCache.h" +#import "AFHTTPSessionManager.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSInteger, AFImageDownloadPrioritization) { + AFImageDownloadPrioritizationFIFO, + AFImageDownloadPrioritizationLIFO +}; + +/** + The `AFImageDownloadReceipt` is an object vended by the `AFImageDownloader` when starting a data task. It can be used to cancel active tasks running on the `AFImageDownloader` session. As a general rule, image data tasks should be cancelled using the `AFImageDownloadReceipt` instead of calling `cancel` directly on the `task` itself. The `AFImageDownloader` is optimized to handle duplicate task scenarios as well as pending versus active downloads. + */ +@interface AFImageDownloadReceipt : NSObject + +/** + The data task created by the `AFImageDownloader`. +*/ +@property (nonatomic, strong) NSURLSessionDataTask *task; + +/** + The unique identifier for the success and failure blocks when duplicate requests are made. + */ +@property (nonatomic, strong) NSUUID *receiptID; +@end + +/** The `AFImageDownloader` class is responsible for downloading images in parallel on a prioritized queue. Incoming downloads are added to the front or back of the queue depending on the download prioritization. Each downloaded image is cached in the underlying `NSURLCache` as well as the in-memory image cache. By default, any download request with a cached image equivalent in the image cache will automatically be served the cached image representation. + */ +@interface AFImageDownloader : NSObject + +/** + The image cache used to store all downloaded images in. `AFAutoPurgingImageCache` by default. + */ +@property (nonatomic, strong, nullable) id imageCache; + +/** + The `AFHTTPSessionManager` used to download images. By default, this is configured with an `AFImageResponseSerializer`, and a shared `NSURLCache` for all image downloads. + */ +@property (nonatomic, strong) AFHTTPSessionManager *sessionManager; + +/** + Defines the order prioritization of incoming download requests being inserted into the queue. `AFImageDownloadPrioritizationFIFO` by default. + */ +@property (nonatomic, assign) AFImageDownloadPrioritization downloadPrioritizaton; + +/** + The shared default instance of `AFImageDownloader` initialized with default values. + */ ++ (instancetype)defaultInstance; + +/** + Creates a default `NSURLCache` with common usage parameter values. + + @returns The default `NSURLCache` instance. + */ ++ (NSURLCache *)defaultURLCache; + +/** + Default initializer + + @return An instance of `AFImageDownloader` initialized with default values. + */ +- (instancetype)init; + +/** + Initializes the `AFImageDownloader` instance with the given session manager, download prioritization, maximum active download count and image cache. + + @param sessionManager The session manager to use to download images. + @param downloadPrioritization The download prioritization of the download queue. + @param maximumActiveDownloads The maximum number of active downloads allowed at any given time. Recommend `4`. + @param imageCache The image cache used to store all downloaded images in. + + @return The new `AFImageDownloader` instance. + */ +- (instancetype)initWithSessionManager:(AFHTTPSessionManager *)sessionManager + downloadPrioritization:(AFImageDownloadPrioritization)downloadPrioritization + maximumActiveDownloads:(NSInteger)maximumActiveDownloads + imageCache:(nullable id )imageCache; + +/** + Creates a data task using the `sessionManager` instance for the specified URL request. + + If the same data task is already in the queue or currently being downloaded, the success and failure blocks are + appended to the already existing task. Once the task completes, all success or failure blocks attached to the + task are executed in the order they were added. + + @param request The URL request. + @param success A block to be executed when the image data task finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the image created from the response data of request. If the image was returned from cache, the response parameter will be `nil`. + @param failure A block object to be executed when the image data task finishes unsuccessfully, or that finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the error object describing the network or parsing error that occurred. + + @return The image download receipt for the data task if available. `nil` if the image is stored in the cache. + cache and the URL request cache policy allows the cache to be used. + */ +- (nullable AFImageDownloadReceipt *)downloadImageForURLRequest:(NSURLRequest *)request + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *responseObject))success + failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure; + +/** + Creates a data task using the `sessionManager` instance for the specified URL request. + + If the same data task is already in the queue or currently being downloaded, the success and failure blocks are + appended to the already existing task. Once the task completes, all success or failure blocks attached to the + task are executed in the order they were added. + + @param request The URL request. + @param receiptID The identifier to use for the download receipt that will be created for this request. This must be a unique identifier that does not represent any other request. + @param success A block to be executed when the image data task finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the image created from the response data of request. If the image was returned from cache, the response parameter will be `nil`. + @param failure A block object to be executed when the image data task finishes unsuccessfully, or that finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the error object describing the network or parsing error that occurred. + + @return The image download receipt for the data task if available. `nil` if the image is stored in the cache. + cache and the URL request cache policy allows the cache to be used. + */ +- (nullable AFImageDownloadReceipt *)downloadImageForURLRequest:(NSURLRequest *)request + withReceiptID:(NSUUID *)receiptID + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *responseObject))success + failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure; + +/** + Cancels the data task in the receipt by removing the corresponding success and failure blocks and cancelling the data task if necessary. + + If the data task is pending in the queue, it will be cancelled if no other success and failure blocks are registered with the data task. If the data task is currently executing or is already completed, the success and failure blocks are removed and will not be called when the task finishes. + + @param imageDownloadReceipt The image download receipt to cancel. + */ +- (void)cancelTaskForImageDownloadReceipt:(AFImageDownloadReceipt *)imageDownloadReceipt; + +@end + +#endif + +NS_ASSUME_NONNULL_END diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFImageDownloader.m b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFImageDownloader.m new file mode 100644 index 0000000..78477bf --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFImageDownloader.m @@ -0,0 +1,391 @@ +// AFImageDownloader.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#if TARGET_OS_IOS || TARGET_OS_TV + +#import "AFImageDownloader.h" +#import "AFHTTPSessionManager.h" + +@interface AFImageDownloaderResponseHandler : NSObject +@property (nonatomic, strong) NSUUID *uuid; +@property (nonatomic, copy) void (^successBlock)(NSURLRequest*, NSHTTPURLResponse*, UIImage*); +@property (nonatomic, copy) void (^failureBlock)(NSURLRequest*, NSHTTPURLResponse*, NSError*); +@end + +@implementation AFImageDownloaderResponseHandler + +- (instancetype)initWithUUID:(NSUUID *)uuid + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *responseObject))success + failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure { + if (self = [self init]) { + self.uuid = uuid; + self.successBlock = success; + self.failureBlock = failure; + } + return self; +} + +- (NSString *)description { + return [NSString stringWithFormat: @"UUID: %@", [self.uuid UUIDString]]; +} + +@end + +@interface AFImageDownloaderMergedTask : NSObject +@property (nonatomic, strong) NSString *URLIdentifier; +@property (nonatomic, strong) NSUUID *identifier; +@property (nonatomic, strong) NSURLSessionDataTask *task; +@property (nonatomic, strong) NSMutableArray *responseHandlers; + +@end + +@implementation AFImageDownloaderMergedTask + +- (instancetype)initWithURLIdentifier:(NSString *)URLIdentifier identifier:(NSUUID *)identifier task:(NSURLSessionDataTask *)task { + if (self = [self init]) { + self.URLIdentifier = URLIdentifier; + self.task = task; + self.identifier = identifier; + self.responseHandlers = [[NSMutableArray alloc] init]; + } + return self; +} + +- (void)addResponseHandler:(AFImageDownloaderResponseHandler*)handler { + [self.responseHandlers addObject:handler]; +} + +- (void)removeResponseHandler:(AFImageDownloaderResponseHandler*)handler { + [self.responseHandlers removeObject:handler]; +} + +@end + +@implementation AFImageDownloadReceipt + +- (instancetype)initWithReceiptID:(NSUUID *)receiptID task:(NSURLSessionDataTask *)task { + if (self = [self init]) { + self.receiptID = receiptID; + self.task = task; + } + return self; +} + +@end + +@interface AFImageDownloader () + +@property (nonatomic, strong) dispatch_queue_t synchronizationQueue; +@property (nonatomic, strong) dispatch_queue_t responseQueue; + +@property (nonatomic, assign) NSInteger maximumActiveDownloads; +@property (nonatomic, assign) NSInteger activeRequestCount; + +@property (nonatomic, strong) NSMutableArray *queuedMergedTasks; +@property (nonatomic, strong) NSMutableDictionary *mergedTasks; + +@end + + +@implementation AFImageDownloader + ++ (NSURLCache *)defaultURLCache { + return [[NSURLCache alloc] initWithMemoryCapacity:20 * 1024 * 1024 + diskCapacity:150 * 1024 * 1024 + diskPath:@"com.alamofire.imagedownloader"]; +} + ++ (NSURLSessionConfiguration *)defaultURLSessionConfiguration { + NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; + + //TODO set the default HTTP headers + + configuration.HTTPShouldSetCookies = YES; + configuration.HTTPShouldUsePipelining = NO; + + configuration.requestCachePolicy = NSURLRequestUseProtocolCachePolicy; + configuration.allowsCellularAccess = YES; + configuration.timeoutIntervalForRequest = 60.0; + configuration.URLCache = [AFImageDownloader defaultURLCache]; + + return configuration; +} + +- (instancetype)init { + NSURLSessionConfiguration *defaultConfiguration = [self.class defaultURLSessionConfiguration]; + AFHTTPSessionManager *sessionManager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:defaultConfiguration]; + sessionManager.responseSerializer = [AFImageResponseSerializer serializer]; + + return [self initWithSessionManager:sessionManager + downloadPrioritization:AFImageDownloadPrioritizationFIFO + maximumActiveDownloads:4 + imageCache:[[AFAutoPurgingImageCache alloc] init]]; +} + +- (instancetype)initWithSessionManager:(AFHTTPSessionManager *)sessionManager + downloadPrioritization:(AFImageDownloadPrioritization)downloadPrioritization + maximumActiveDownloads:(NSInteger)maximumActiveDownloads + imageCache:(id )imageCache { + if (self = [super init]) { + self.sessionManager = sessionManager; + + self.downloadPrioritizaton = downloadPrioritization; + self.maximumActiveDownloads = maximumActiveDownloads; + self.imageCache = imageCache; + + self.queuedMergedTasks = [[NSMutableArray alloc] init]; + self.mergedTasks = [[NSMutableDictionary alloc] init]; + self.activeRequestCount = 0; + + NSString *name = [NSString stringWithFormat:@"com.alamofire.imagedownloader.synchronizationqueue-%@", [[NSUUID UUID] UUIDString]]; + self.synchronizationQueue = dispatch_queue_create([name cStringUsingEncoding:NSASCIIStringEncoding], DISPATCH_QUEUE_SERIAL); + + name = [NSString stringWithFormat:@"com.alamofire.imagedownloader.responsequeue-%@", [[NSUUID UUID] UUIDString]]; + self.responseQueue = dispatch_queue_create([name cStringUsingEncoding:NSASCIIStringEncoding], DISPATCH_QUEUE_CONCURRENT); + } + + return self; +} + ++ (instancetype)defaultInstance { + static AFImageDownloader *sharedInstance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedInstance = [[self alloc] init]; + }); + return sharedInstance; +} + +- (nullable AFImageDownloadReceipt *)downloadImageForURLRequest:(NSURLRequest *)request + success:(void (^)(NSURLRequest * _Nonnull, NSHTTPURLResponse * _Nullable, UIImage * _Nonnull))success + failure:(void (^)(NSURLRequest * _Nonnull, NSHTTPURLResponse * _Nullable, NSError * _Nonnull))failure { + return [self downloadImageForURLRequest:request withReceiptID:[NSUUID UUID] success:success failure:failure]; +} + +- (nullable AFImageDownloadReceipt *)downloadImageForURLRequest:(NSURLRequest *)request + withReceiptID:(nonnull NSUUID *)receiptID + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *responseObject))success + failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure { + __block NSURLSessionDataTask *task = nil; + dispatch_sync(self.synchronizationQueue, ^{ + NSString *URLIdentifier = request.URL.absoluteString; + if (URLIdentifier == nil) { + if (failure) { + NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorBadURL userInfo:nil]; + dispatch_async(dispatch_get_main_queue(), ^{ + failure(request, nil, error); + }); + } + return; + } + + // 1) Append the success and failure blocks to a pre-existing request if it already exists + AFImageDownloaderMergedTask *existingMergedTask = self.mergedTasks[URLIdentifier]; + if (existingMergedTask != nil) { + AFImageDownloaderResponseHandler *handler = [[AFImageDownloaderResponseHandler alloc] initWithUUID:receiptID success:success failure:failure]; + [existingMergedTask addResponseHandler:handler]; + task = existingMergedTask.task; + return; + } + + // 2) Attempt to load the image from the image cache if the cache policy allows it + switch (request.cachePolicy) { + case NSURLRequestUseProtocolCachePolicy: + case NSURLRequestReturnCacheDataElseLoad: + case NSURLRequestReturnCacheDataDontLoad: { + UIImage *cachedImage = [self.imageCache imageforRequest:request withAdditionalIdentifier:nil]; + if (cachedImage != nil) { + if (success) { + dispatch_async(dispatch_get_main_queue(), ^{ + success(request, nil, cachedImage); + }); + } + return; + } + break; + } + default: + break; + } + + // 3) Create the request and set up authentication, validation and response serialization + NSUUID *mergedTaskIdentifier = [NSUUID UUID]; + NSURLSessionDataTask *createdTask; + __weak __typeof__(self) weakSelf = self; + + createdTask = [self.sessionManager + dataTaskWithRequest:request + completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { + dispatch_async(self.responseQueue, ^{ + __strong __typeof__(weakSelf) strongSelf = weakSelf; + AFImageDownloaderMergedTask *mergedTask = self.mergedTasks[URLIdentifier]; + if ([mergedTask.identifier isEqual:mergedTaskIdentifier]) { + mergedTask = [strongSelf safelyRemoveMergedTaskWithURLIdentifier:URLIdentifier]; + if (error) { + for (AFImageDownloaderResponseHandler *handler in mergedTask.responseHandlers) { + if (handler.failureBlock) { + dispatch_async(dispatch_get_main_queue(), ^{ + handler.failureBlock(request, (NSHTTPURLResponse*)response, error); + }); + } + } + } else { + [strongSelf.imageCache addImage:responseObject forRequest:request withAdditionalIdentifier:nil]; + + for (AFImageDownloaderResponseHandler *handler in mergedTask.responseHandlers) { + if (handler.successBlock) { + dispatch_async(dispatch_get_main_queue(), ^{ + handler.successBlock(request, (NSHTTPURLResponse*)response, responseObject); + }); + } + } + + } + } + [strongSelf safelyDecrementActiveTaskCount]; + [strongSelf safelyStartNextTaskIfNecessary]; + }); + }]; + + // 4) Store the response handler for use when the request completes + AFImageDownloaderResponseHandler *handler = [[AFImageDownloaderResponseHandler alloc] initWithUUID:receiptID + success:success + failure:failure]; + AFImageDownloaderMergedTask *mergedTask = [[AFImageDownloaderMergedTask alloc] + initWithURLIdentifier:URLIdentifier + identifier:mergedTaskIdentifier + task:createdTask]; + [mergedTask addResponseHandler:handler]; + self.mergedTasks[URLIdentifier] = mergedTask; + + // 5) Either start the request or enqueue it depending on the current active request count + if ([self isActiveRequestCountBelowMaximumLimit]) { + [self startMergedTask:mergedTask]; + } else { + [self enqueueMergedTask:mergedTask]; + } + + task = mergedTask.task; + }); + if (task) { + return [[AFImageDownloadReceipt alloc] initWithReceiptID:receiptID task:task]; + } else { + return nil; + } +} + +- (void)cancelTaskForImageDownloadReceipt:(AFImageDownloadReceipt *)imageDownloadReceipt { + dispatch_sync(self.synchronizationQueue, ^{ + NSString *URLIdentifier = imageDownloadReceipt.task.originalRequest.URL.absoluteString; + AFImageDownloaderMergedTask *mergedTask = self.mergedTasks[URLIdentifier]; + NSUInteger index = [mergedTask.responseHandlers indexOfObjectPassingTest:^BOOL(AFImageDownloaderResponseHandler * _Nonnull handler, __unused NSUInteger idx, __unused BOOL * _Nonnull stop) { + return handler.uuid == imageDownloadReceipt.receiptID; + }]; + + if (index != NSNotFound) { + AFImageDownloaderResponseHandler *handler = mergedTask.responseHandlers[index]; + [mergedTask removeResponseHandler:handler]; + NSString *failureReason = [NSString stringWithFormat:@"ImageDownloader cancelled URL request: %@",imageDownloadReceipt.task.originalRequest.URL.absoluteString]; + NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey:failureReason}; + NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorCancelled userInfo:userInfo]; + if (handler.failureBlock) { + dispatch_async(dispatch_get_main_queue(), ^{ + handler.failureBlock(imageDownloadReceipt.task.originalRequest, nil, error); + }); + } + } + + if (mergedTask.responseHandlers.count == 0 && mergedTask.task.state == NSURLSessionTaskStateSuspended) { + [mergedTask.task cancel]; + [self removeMergedTaskWithURLIdentifier:URLIdentifier]; + } + }); +} + +- (AFImageDownloaderMergedTask*)safelyRemoveMergedTaskWithURLIdentifier:(NSString *)URLIdentifier { + __block AFImageDownloaderMergedTask *mergedTask = nil; + dispatch_sync(self.synchronizationQueue, ^{ + mergedTask = [self removeMergedTaskWithURLIdentifier:URLIdentifier]; + }); + return mergedTask; +} + +//This method should only be called from safely within the synchronizationQueue +- (AFImageDownloaderMergedTask *)removeMergedTaskWithURLIdentifier:(NSString *)URLIdentifier { + AFImageDownloaderMergedTask *mergedTask = self.mergedTasks[URLIdentifier]; + [self.mergedTasks removeObjectForKey:URLIdentifier]; + return mergedTask; +} + +- (void)safelyDecrementActiveTaskCount { + dispatch_sync(self.synchronizationQueue, ^{ + if (self.activeRequestCount > 0) { + self.activeRequestCount -= 1; + } + }); +} + +- (void)safelyStartNextTaskIfNecessary { + dispatch_sync(self.synchronizationQueue, ^{ + if ([self isActiveRequestCountBelowMaximumLimit]) { + while (self.queuedMergedTasks.count > 0) { + AFImageDownloaderMergedTask *mergedTask = [self dequeueMergedTask]; + if (mergedTask.task.state == NSURLSessionTaskStateSuspended) { + [self startMergedTask:mergedTask]; + break; + } + } + } + }); +} + +- (void)startMergedTask:(AFImageDownloaderMergedTask *)mergedTask { + [mergedTask.task resume]; + ++self.activeRequestCount; +} + +- (void)enqueueMergedTask:(AFImageDownloaderMergedTask *)mergedTask { + switch (self.downloadPrioritizaton) { + case AFImageDownloadPrioritizationFIFO: + [self.queuedMergedTasks addObject:mergedTask]; + break; + case AFImageDownloadPrioritizationLIFO: + [self.queuedMergedTasks insertObject:mergedTask atIndex:0]; + break; + } +} + +- (AFImageDownloaderMergedTask *)dequeueMergedTask { + AFImageDownloaderMergedTask *mergedTask = nil; + mergedTask = [self.queuedMergedTasks firstObject]; + [self.queuedMergedTasks removeObject:mergedTask]; + return mergedTask; +} + +- (BOOL)isActiveRequestCountBelowMaximumLimit { + return self.activeRequestCount < self.maximumActiveDownloads; +} + +@end + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h new file mode 100644 index 0000000..3bcf289 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h @@ -0,0 +1,103 @@ +// AFNetworkActivityIndicatorManager.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if TARGET_OS_IOS + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + `AFNetworkActivityIndicatorManager` manages the state of the network activity indicator in the status bar. When enabled, it will listen for notifications indicating that a session task has started or finished, and start or stop animating the indicator accordingly. The number of active requests is incremented and decremented much like a stack or a semaphore, and the activity indicator will animate so long as that number is greater than zero. + + You should enable the shared instance of `AFNetworkActivityIndicatorManager` when your application finishes launching. In `AppDelegate application:didFinishLaunchingWithOptions:` you can do so with the following code: + + [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; + + By setting `enabled` to `YES` for `sharedManager`, the network activity indicator will show and hide automatically as requests start and finish. You should not ever need to call `incrementActivityCount` or `decrementActivityCount` yourself. + + See the Apple Human Interface Guidelines section about the Network Activity Indicator for more information: + http://developer.apple.com/library/iOS/#documentation/UserExperience/Conceptual/MobileHIG/UIElementGuidelines/UIElementGuidelines.html#//apple_ref/doc/uid/TP40006556-CH13-SW44 + */ +NS_EXTENSION_UNAVAILABLE_IOS("Use view controller based solutions where appropriate instead.") +@interface AFNetworkActivityIndicatorManager : NSObject + +/** + A Boolean value indicating whether the manager is enabled. + + If YES, the manager will change status bar network activity indicator according to network operation notifications it receives. The default value is NO. + */ +@property (nonatomic, assign, getter = isEnabled) BOOL enabled; + +/** + A Boolean value indicating whether the network activity indicator manager is currently active. +*/ +@property (readonly, nonatomic, assign, getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible; + +/** + A time interval indicating the minimum duration of networking activity that should occur before the activity indicator is displayed. The default value 1 second. If the network activity indicator should be displayed immediately when network activity occurs, this value should be set to 0 seconds. + + Apple's HIG describes the following: + + > Display the network activity indicator to provide feedback when your app accesses the network for more than a couple of seconds. If the operation finishes sooner than that, you don’t have to show the network activity indicator, because the indicator is likely to disappear before users notice its presence. + + */ +@property (nonatomic, assign) NSTimeInterval activationDelay; + +/** + A time interval indicating the duration of time of no networking activity required before the activity indicator is disabled. This allows for continuous display of the network activity indicator across multiple requests. The default value is 0.17 seconds. + */ + +@property (nonatomic, assign) NSTimeInterval completionDelay; + +/** + Returns the shared network activity indicator manager object for the system. + + @return The systemwide network activity indicator manager. + */ ++ (instancetype)sharedManager; + +/** + Increments the number of active network requests. If this number was zero before incrementing, this will start animating the status bar network activity indicator. + */ +- (void)incrementActivityCount; + +/** + Decrements the number of active network requests. If this number becomes zero after decrementing, this will stop animating the status bar network activity indicator. + */ +- (void)decrementActivityCount; + +/** + Set the a custom method to be executed when the network activity indicator manager should be hidden/shown. By default, this is null, and the UIApplication Network Activity Indicator will be managed automatically. If this block is set, it is the responsiblity of the caller to manager the network activity indicator going forward. + + @param block A block to be executed when the network activity indicator status changes. + */ +- (void)setNetworkingActivityActionWithBlock:(nullable void (^)(BOOL networkActivityIndicatorVisible))block; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m new file mode 100644 index 0000000..e77508e --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m @@ -0,0 +1,261 @@ +// AFNetworkActivityIndicatorManager.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFNetworkActivityIndicatorManager.h" + +#if TARGET_OS_IOS +#import "AFURLSessionManager.h" + +typedef NS_ENUM(NSInteger, AFNetworkActivityManagerState) { + AFNetworkActivityManagerStateNotActive, + AFNetworkActivityManagerStateDelayingStart, + AFNetworkActivityManagerStateActive, + AFNetworkActivityManagerStateDelayingEnd +}; + +static NSTimeInterval const kDefaultAFNetworkActivityManagerActivationDelay = 1.0; +static NSTimeInterval const kDefaultAFNetworkActivityManagerCompletionDelay = 0.17; + +static NSURLRequest * AFNetworkRequestFromNotification(NSNotification *notification) { + if ([[notification object] respondsToSelector:@selector(originalRequest)]) { + return [(NSURLSessionTask *)[notification object] originalRequest]; + } else { + return nil; + } +} + +typedef void (^AFNetworkActivityActionBlock)(BOOL networkActivityIndicatorVisible); + +@interface AFNetworkActivityIndicatorManager () +@property (readwrite, nonatomic, assign) NSInteger activityCount; +@property (readwrite, nonatomic, strong) NSTimer *activationDelayTimer; +@property (readwrite, nonatomic, strong) NSTimer *completionDelayTimer; +@property (readonly, nonatomic, getter = isNetworkActivityOccurring) BOOL networkActivityOccurring; +@property (nonatomic, copy) AFNetworkActivityActionBlock networkActivityActionBlock; +@property (nonatomic, assign) AFNetworkActivityManagerState currentState; +@property (nonatomic, assign, getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible; + +- (void)updateCurrentStateForNetworkActivityChange; +@end + +@implementation AFNetworkActivityIndicatorManager + ++ (instancetype)sharedManager { + static AFNetworkActivityIndicatorManager *_sharedManager = nil; + static dispatch_once_t oncePredicate; + dispatch_once(&oncePredicate, ^{ + _sharedManager = [[self alloc] init]; + }); + + return _sharedManager; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + self.currentState = AFNetworkActivityManagerStateNotActive; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidStart:) name:AFNetworkingTaskDidResumeNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingTaskDidSuspendNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingTaskDidCompleteNotification object:nil]; + self.activationDelay = kDefaultAFNetworkActivityManagerActivationDelay; + self.completionDelay = kDefaultAFNetworkActivityManagerCompletionDelay; + + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [_activationDelayTimer invalidate]; + [_completionDelayTimer invalidate]; +} + +- (void)setEnabled:(BOOL)enabled { + _enabled = enabled; + if (enabled == NO) { + [self setCurrentState:AFNetworkActivityManagerStateNotActive]; + } +} + +- (void)setNetworkingActivityActionWithBlock:(void (^)(BOOL networkActivityIndicatorVisible))block { + self.networkActivityActionBlock = block; +} + +- (BOOL)isNetworkActivityOccurring { + @synchronized(self) { + return self.activityCount > 0; + } +} + +- (void)setNetworkActivityIndicatorVisible:(BOOL)networkActivityIndicatorVisible { + if (_networkActivityIndicatorVisible != networkActivityIndicatorVisible) { + [self willChangeValueForKey:@"networkActivityIndicatorVisible"]; + @synchronized(self) { + _networkActivityIndicatorVisible = networkActivityIndicatorVisible; + } + [self didChangeValueForKey:@"networkActivityIndicatorVisible"]; + if (self.networkActivityActionBlock) { + self.networkActivityActionBlock(networkActivityIndicatorVisible); + } else { + [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:networkActivityIndicatorVisible]; + } + } +} + +- (void)setActivityCount:(NSInteger)activityCount { + @synchronized(self) { + _activityCount = activityCount; + } + + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateCurrentStateForNetworkActivityChange]; + }); +} + +- (void)incrementActivityCount { + [self willChangeValueForKey:@"activityCount"]; + @synchronized(self) { + _activityCount++; + } + [self didChangeValueForKey:@"activityCount"]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateCurrentStateForNetworkActivityChange]; + }); +} + +- (void)decrementActivityCount { + [self willChangeValueForKey:@"activityCount"]; + @synchronized(self) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + _activityCount = MAX(_activityCount - 1, 0); +#pragma clang diagnostic pop + } + [self didChangeValueForKey:@"activityCount"]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateCurrentStateForNetworkActivityChange]; + }); +} + +- (void)networkRequestDidStart:(NSNotification *)notification { + if ([AFNetworkRequestFromNotification(notification) URL]) { + [self incrementActivityCount]; + } +} + +- (void)networkRequestDidFinish:(NSNotification *)notification { + if ([AFNetworkRequestFromNotification(notification) URL]) { + [self decrementActivityCount]; + } +} + +#pragma mark - Internal State Management +- (void)setCurrentState:(AFNetworkActivityManagerState)currentState { + @synchronized(self) { + if (_currentState != currentState) { + [self willChangeValueForKey:@"currentState"]; + _currentState = currentState; + switch (currentState) { + case AFNetworkActivityManagerStateNotActive: + [self cancelActivationDelayTimer]; + [self cancelCompletionDelayTimer]; + [self setNetworkActivityIndicatorVisible:NO]; + break; + case AFNetworkActivityManagerStateDelayingStart: + [self startActivationDelayTimer]; + break; + case AFNetworkActivityManagerStateActive: + [self cancelCompletionDelayTimer]; + [self setNetworkActivityIndicatorVisible:YES]; + break; + case AFNetworkActivityManagerStateDelayingEnd: + [self startCompletionDelayTimer]; + break; + } + } + [self didChangeValueForKey:@"currentState"]; + } +} + +- (void)updateCurrentStateForNetworkActivityChange { + if (self.enabled) { + switch (self.currentState) { + case AFNetworkActivityManagerStateNotActive: + if (self.isNetworkActivityOccurring) { + [self setCurrentState:AFNetworkActivityManagerStateDelayingStart]; + } + break; + case AFNetworkActivityManagerStateDelayingStart: + //No op. Let the delay timer finish out. + break; + case AFNetworkActivityManagerStateActive: + if (!self.isNetworkActivityOccurring) { + [self setCurrentState:AFNetworkActivityManagerStateDelayingEnd]; + } + break; + case AFNetworkActivityManagerStateDelayingEnd: + if (self.isNetworkActivityOccurring) { + [self setCurrentState:AFNetworkActivityManagerStateActive]; + } + break; + } + } +} + +- (void)startActivationDelayTimer { + self.activationDelayTimer = [NSTimer + timerWithTimeInterval:self.activationDelay target:self selector:@selector(activationDelayTimerFired) userInfo:nil repeats:NO]; + [[NSRunLoop mainRunLoop] addTimer:self.activationDelayTimer forMode:NSRunLoopCommonModes]; +} + +- (void)activationDelayTimerFired { + if (self.networkActivityOccurring) { + [self setCurrentState:AFNetworkActivityManagerStateActive]; + } else { + [self setCurrentState:AFNetworkActivityManagerStateNotActive]; + } +} + +- (void)startCompletionDelayTimer { + [self.completionDelayTimer invalidate]; + self.completionDelayTimer = [NSTimer timerWithTimeInterval:self.completionDelay target:self selector:@selector(completionDelayTimerFired) userInfo:nil repeats:NO]; + [[NSRunLoop mainRunLoop] addTimer:self.completionDelayTimer forMode:NSRunLoopCommonModes]; +} + +- (void)completionDelayTimerFired { + [self setCurrentState:AFNetworkActivityManagerStateNotActive]; +} + +- (void)cancelActivationDelayTimer { + [self.activationDelayTimer invalidate]; +} + +- (void)cancelCompletionDelayTimer { + [self.completionDelayTimer invalidate]; +} + +@end + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h new file mode 100644 index 0000000..d424c9b --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h @@ -0,0 +1,48 @@ +// UIActivityIndicatorView+AFNetworking.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if TARGET_OS_IOS || TARGET_OS_TV + +#import + +/** + This category adds methods to the UIKit framework's `UIActivityIndicatorView` class. The methods in this category provide support for automatically starting and stopping animation depending on the loading state of a session task. + */ +@interface UIActivityIndicatorView (AFNetworking) + +///---------------------------------- +/// @name Animating for Session Tasks +///---------------------------------- + +/** + Binds the animating state to the state of the specified task. + + @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled. + */ +- (void)setAnimatingWithStateOfTask:(nullable NSURLSessionTask *)task; + +@end + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m new file mode 100644 index 0000000..ed704ed --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m @@ -0,0 +1,124 @@ +// UIActivityIndicatorView+AFNetworking.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIActivityIndicatorView+AFNetworking.h" +#import + +#if TARGET_OS_IOS || TARGET_OS_TV + +#import "AFURLSessionManager.h" + +@interface AFActivityIndicatorViewNotificationObserver : NSObject +@property (readonly, nonatomic, weak) UIActivityIndicatorView *activityIndicatorView; +- (instancetype)initWithActivityIndicatorView:(UIActivityIndicatorView *)activityIndicatorView; + +- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task; + +@end + +@implementation UIActivityIndicatorView (AFNetworking) + +- (AFActivityIndicatorViewNotificationObserver *)af_notificationObserver { + AFActivityIndicatorViewNotificationObserver *notificationObserver = objc_getAssociatedObject(self, @selector(af_notificationObserver)); + if (notificationObserver == nil) { + notificationObserver = [[AFActivityIndicatorViewNotificationObserver alloc] initWithActivityIndicatorView:self]; + objc_setAssociatedObject(self, @selector(af_notificationObserver), notificationObserver, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return notificationObserver; +} + +- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task { + [[self af_notificationObserver] setAnimatingWithStateOfTask:task]; +} + +@end + +@implementation AFActivityIndicatorViewNotificationObserver + +- (instancetype)initWithActivityIndicatorView:(UIActivityIndicatorView *)activityIndicatorView +{ + self = [super init]; + if (self) { + _activityIndicatorView = activityIndicatorView; + } + return self; +} + +- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; + + if (task) { + if (task.state != NSURLSessionTaskStateCompleted) { + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" +#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" + if (task.state == NSURLSessionTaskStateRunning) { + [self.activityIndicatorView startAnimating]; + } else { + [self.activityIndicatorView stopAnimating]; + } +#pragma clang diagnostic pop + + [notificationCenter addObserver:self selector:@selector(af_startAnimating) name:AFNetworkingTaskDidResumeNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingTaskDidCompleteNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingTaskDidSuspendNotification object:task]; + } + } +} + +#pragma mark - + +- (void)af_startAnimating { + dispatch_async(dispatch_get_main_queue(), ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" + [self.activityIndicatorView startAnimating]; +#pragma clang diagnostic pop + }); +} + +- (void)af_stopAnimating { + dispatch_async(dispatch_get_main_queue(), ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" + [self.activityIndicatorView stopAnimating]; +#pragma clang diagnostic pop + }); +} + +#pragma mark - + +- (void)dealloc { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; +} + +@end + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h new file mode 100644 index 0000000..d33e0d4 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h @@ -0,0 +1,175 @@ +// UIButton+AFNetworking.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if TARGET_OS_IOS || TARGET_OS_TV + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class AFImageDownloader; + +/** + This category adds methods to the UIKit framework's `UIButton` class. The methods in this category provide support for loading remote images and background images asynchronously from a URL. + + @warning Compound values for control `state` (such as `UIControlStateHighlighted | UIControlStateDisabled`) are unsupported. + */ +@interface UIButton (AFNetworking) + +///------------------------------------ +/// @name Accessing the Image Downloader +///------------------------------------ + +/** + Set the shared image downloader used to download images. + + @param imageDownloader The shared image downloader used to download images. +*/ ++ (void)setSharedImageDownloader:(AFImageDownloader *)imageDownloader; + +/** + The shared image downloader used to download images. + */ ++ (AFImageDownloader *)sharedImageDownloader; + +///-------------------- +/// @name Setting Image +///-------------------- + +/** + Asynchronously downloads an image from the specified URL, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the image request. + */ +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url; + +/** + Asynchronously downloads an image from the specified URL, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the button will not change its image until the image request finishes. + */ +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(nullable UIImage *)placeholderImage; + +/** + Asynchronously downloads an image from the specified URL request, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + If a success block is specified, it is the responsibility of the block to set the image of the button before returning. If no success block is specified, the default behavior of setting the image with `setImage:forState:` is applied. + + @param state The control state. + @param urlRequest The URL request used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the button will not change its image until the image request finishes. + @param success A block to be executed when the image data task finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the image created from the response data of request. If the image was returned from cache, the response parameter will be `nil`. + @param failure A block object to be executed when the image data task finishes unsuccessfully, or that finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the error object describing the network or parsing error that occurred. + */ +- (void)setImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(nullable UIImage *)placeholderImage + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *image))success + failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure; + + +///------------------------------- +/// @name Setting Background Image +///------------------------------- + +/** + Asynchronously downloads an image from the specified URL, and sets it as the background image for the specified state once the request is finished. Any previous background image request for the receiver will be cancelled. + + If the background image is cached locally, the background image is set immediately, otherwise the specified placeholder background image will be set immediately, and then the remote background image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the background image request. + */ +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url; + +/** + Asynchronously downloads an image from the specified URL, and sets it as the background image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the background image request. + @param placeholderImage The background image to be set initially, until the background image request finishes. If `nil`, the button will not change its background image until the background image request finishes. + */ +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(nullable UIImage *)placeholderImage; + +/** + Asynchronously downloads an image from the specified URL request, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + If a success block is specified, it is the responsibility of the block to set the image of the button before returning. If no success block is specified, the default behavior of setting the image with `setBackgroundImage:forState:` is applied. + + @param state The control state. + @param urlRequest The URL request used for the image request. + @param placeholderImage The background image to be set initially, until the background image request finishes. If `nil`, the button will not change its background image until the background image request finishes. + @param success A block to be executed when the image data task finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the image created from the response data of request. If the image was returned from cache, the response parameter will be `nil`. + @param failure A block object to be executed when the image data task finishes unsuccessfully, or that finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the error object describing the network or parsing error that occurred. + */ +- (void)setBackgroundImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(nullable UIImage *)placeholderImage + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *image))success + failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure; + + +///------------------------------ +/// @name Canceling Image Loading +///------------------------------ + +/** + Cancels any executing image task for the specified control state of the receiver, if one exists. + + @param state The control state. + */ +- (void)cancelImageDownloadTaskForState:(UIControlState)state; + +/** + Cancels any executing background image task for the specified control state of the receiver, if one exists. + + @param state The control state. + */ +- (void)cancelBackgroundImageDownloadTaskForState:(UIControlState)state; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m new file mode 100644 index 0000000..5bc49dd --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m @@ -0,0 +1,305 @@ +// UIButton+AFNetworking.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIButton+AFNetworking.h" + +#import + +#if TARGET_OS_IOS || TARGET_OS_TV + +#import "UIImageView+AFNetworking.h" +#import "AFImageDownloader.h" + +@interface UIButton (_AFNetworking) +@end + +@implementation UIButton (_AFNetworking) + +#pragma mark - + +static char AFImageDownloadReceiptNormal; +static char AFImageDownloadReceiptHighlighted; +static char AFImageDownloadReceiptSelected; +static char AFImageDownloadReceiptDisabled; + +static const char * af_imageDownloadReceiptKeyForState(UIControlState state) { + switch (state) { + case UIControlStateHighlighted: + return &AFImageDownloadReceiptHighlighted; + case UIControlStateSelected: + return &AFImageDownloadReceiptSelected; + case UIControlStateDisabled: + return &AFImageDownloadReceiptDisabled; + case UIControlStateNormal: + default: + return &AFImageDownloadReceiptNormal; + } +} + +- (AFImageDownloadReceipt *)af_imageDownloadReceiptForState:(UIControlState)state { + return (AFImageDownloadReceipt *)objc_getAssociatedObject(self, af_imageDownloadReceiptKeyForState(state)); +} + +- (void)af_setImageDownloadReceipt:(AFImageDownloadReceipt *)imageDownloadReceipt + forState:(UIControlState)state +{ + objc_setAssociatedObject(self, af_imageDownloadReceiptKeyForState(state), imageDownloadReceipt, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +static char AFBackgroundImageDownloadReceiptNormal; +static char AFBackgroundImageDownloadReceiptHighlighted; +static char AFBackgroundImageDownloadReceiptSelected; +static char AFBackgroundImageDownloadReceiptDisabled; + +static const char * af_backgroundImageDownloadReceiptKeyForState(UIControlState state) { + switch (state) { + case UIControlStateHighlighted: + return &AFBackgroundImageDownloadReceiptHighlighted; + case UIControlStateSelected: + return &AFBackgroundImageDownloadReceiptSelected; + case UIControlStateDisabled: + return &AFBackgroundImageDownloadReceiptDisabled; + case UIControlStateNormal: + default: + return &AFBackgroundImageDownloadReceiptNormal; + } +} + +- (AFImageDownloadReceipt *)af_backgroundImageDownloadReceiptForState:(UIControlState)state { + return (AFImageDownloadReceipt *)objc_getAssociatedObject(self, af_backgroundImageDownloadReceiptKeyForState(state)); +} + +- (void)af_setBackgroundImageDownloadReceipt:(AFImageDownloadReceipt *)imageDownloadReceipt + forState:(UIControlState)state +{ + objc_setAssociatedObject(self, af_backgroundImageDownloadReceiptKeyForState(state), imageDownloadReceipt, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +#pragma mark - + +@implementation UIButton (AFNetworking) + ++ (AFImageDownloader *)sharedImageDownloader { + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(sharedImageDownloader)) ?: [AFImageDownloader defaultInstance]; +#pragma clang diagnostic pop +} + ++ (void)setSharedImageDownloader:(AFImageDownloader *)imageDownloader { + objc_setAssociatedObject(self, @selector(sharedImageDownloader), imageDownloader, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url +{ + [self setImageForState:state withURL:url placeholderImage:nil]; +} + +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(UIImage *)placeholderImage +{ + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; + + [self setImageForState:state withURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; +} + +- (void)setImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(nullable UIImage *)placeholderImage + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *image))success + failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure +{ + if ([self isActiveTaskURLEqualToURLRequest:urlRequest forState:state]) { + return; + } + + [self cancelImageDownloadTaskForState:state]; + + AFImageDownloader *downloader = [[self class] sharedImageDownloader]; + id imageCache = downloader.imageCache; + + //Use the image from the image cache if it exists + UIImage *cachedImage = [imageCache imageforRequest:urlRequest withAdditionalIdentifier:nil]; + if (cachedImage) { + if (success) { + success(urlRequest, nil, cachedImage); + } else { + [self setImage:cachedImage forState:state]; + } + [self af_setImageDownloadReceipt:nil forState:state]; + } else { + if (placeholderImage) { + [self setImage:placeholderImage forState:state]; + } + + __weak __typeof(self)weakSelf = self; + NSUUID *downloadID = [NSUUID UUID]; + AFImageDownloadReceipt *receipt; + receipt = [downloader + downloadImageForURLRequest:urlRequest + withReceiptID:downloadID + success:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, UIImage * _Nonnull responseObject) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[strongSelf af_imageDownloadReceiptForState:state].receiptID isEqual:downloadID]) { + if (success) { + success(request, response, responseObject); + } else if(responseObject) { + [strongSelf setImage:responseObject forState:state]; + } + [strongSelf af_setImageDownloadReceipt:nil forState:state]; + } + + } + failure:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, NSError * _Nonnull error) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[strongSelf af_imageDownloadReceiptForState:state].receiptID isEqual:downloadID]) { + if (failure) { + failure(request, response, error); + } + [strongSelf af_setImageDownloadReceipt:nil forState:state]; + } + }]; + + [self af_setImageDownloadReceipt:receipt forState:state]; + } +} + +#pragma mark - + +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url +{ + [self setBackgroundImageForState:state withURL:url placeholderImage:nil]; +} + +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(nullable UIImage *)placeholderImage +{ + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; + + [self setBackgroundImageForState:state withURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; +} + +- (void)setBackgroundImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(nullable UIImage *)placeholderImage + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *image))success + failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure +{ + if ([self isActiveBackgroundTaskURLEqualToURLRequest:urlRequest forState:state]) { + return; + } + + [self cancelBackgroundImageDownloadTaskForState:state]; + + AFImageDownloader *downloader = [[self class] sharedImageDownloader]; + id imageCache = downloader.imageCache; + + //Use the image from the image cache if it exists + UIImage *cachedImage = [imageCache imageforRequest:urlRequest withAdditionalIdentifier:nil]; + if (cachedImage) { + if (success) { + success(urlRequest, nil, cachedImage); + } else { + [self setBackgroundImage:cachedImage forState:state]; + } + [self af_setBackgroundImageDownloadReceipt:nil forState:state]; + } else { + if (placeholderImage) { + [self setBackgroundImage:placeholderImage forState:state]; + } + + __weak __typeof(self)weakSelf = self; + NSUUID *downloadID = [NSUUID UUID]; + AFImageDownloadReceipt *receipt; + receipt = [downloader + downloadImageForURLRequest:urlRequest + withReceiptID:downloadID + success:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, UIImage * _Nonnull responseObject) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[strongSelf af_backgroundImageDownloadReceiptForState:state].receiptID isEqual:downloadID]) { + if (success) { + success(request, response, responseObject); + } else if(responseObject) { + [strongSelf setBackgroundImage:responseObject forState:state]; + } + [strongSelf af_setBackgroundImageDownloadReceipt:nil forState:state]; + } + + } + failure:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, NSError * _Nonnull error) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[strongSelf af_backgroundImageDownloadReceiptForState:state].receiptID isEqual:downloadID]) { + if (failure) { + failure(request, response, error); + } + [strongSelf af_setBackgroundImageDownloadReceipt:nil forState:state]; + } + }]; + + [self af_setBackgroundImageDownloadReceipt:receipt forState:state]; + } +} + +#pragma mark - + +- (void)cancelImageDownloadTaskForState:(UIControlState)state { + AFImageDownloadReceipt *receipt = [self af_imageDownloadReceiptForState:state]; + if (receipt != nil) { + [[self.class sharedImageDownloader] cancelTaskForImageDownloadReceipt:receipt]; + [self af_setImageDownloadReceipt:nil forState:state]; + } +} + +- (void)cancelBackgroundImageDownloadTaskForState:(UIControlState)state { + AFImageDownloadReceipt *receipt = [self af_backgroundImageDownloadReceiptForState:state]; + if (receipt != nil) { + [[self.class sharedImageDownloader] cancelTaskForImageDownloadReceipt:receipt]; + [self af_setBackgroundImageDownloadReceipt:nil forState:state]; + } +} + +- (BOOL)isActiveTaskURLEqualToURLRequest:(NSURLRequest *)urlRequest forState:(UIControlState)state { + AFImageDownloadReceipt *receipt = [self af_imageDownloadReceiptForState:state]; + return [receipt.task.originalRequest.URL.absoluteString isEqualToString:urlRequest.URL.absoluteString]; +} + +- (BOOL)isActiveBackgroundTaskURLEqualToURLRequest:(NSURLRequest *)urlRequest forState:(UIControlState)state { + AFImageDownloadReceipt *receipt = [self af_backgroundImageDownloadReceiptForState:state]; + return [receipt.task.originalRequest.URL.absoluteString isEqualToString:urlRequest.URL.absoluteString]; +} + + +@end + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h new file mode 100644 index 0000000..14744cd --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h @@ -0,0 +1,35 @@ +// +// UIImage+AFNetworking.h +// +// +// Created by Paulo Ferreira on 08/07/15. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if TARGET_OS_IOS || TARGET_OS_TV + +#import + +@interface UIImage (AFNetworking) + ++ (UIImage*) safeImageWithData:(NSData*)data; + +@end + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h new file mode 100644 index 0000000..8929252 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h @@ -0,0 +1,109 @@ +// UIImageView+AFNetworking.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if TARGET_OS_IOS || TARGET_OS_TV + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class AFImageDownloader; + +/** + This category adds methods to the UIKit framework's `UIImageView` class. The methods in this category provide support for loading remote images asynchronously from a URL. + */ +@interface UIImageView (AFNetworking) + +///------------------------------------ +/// @name Accessing the Image Downloader +///------------------------------------ + +/** + Set the shared image downloader used to download images. + + @param imageDownloader The shared image downloader used to download images. + */ ++ (void)setSharedImageDownloader:(AFImageDownloader *)imageDownloader; + +/** + The shared image downloader used to download images. + */ ++ (AFImageDownloader *)sharedImageDownloader; + +///-------------------- +/// @name Setting Image +///-------------------- + +/** + Asynchronously downloads an image from the specified URL, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + By default, URL requests have a `Accept` header field value of "image / *", a cache policy of `NSURLCacheStorageAllowed` and a timeout interval of 30 seconds, and are set not handle cookies. To configure URL requests differently, use `setImageWithURLRequest:placeholderImage:success:failure:` + + @param url The URL used for the image request. + */ +- (void)setImageWithURL:(NSURL *)url; + +/** + Asynchronously downloads an image from the specified URL, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + By default, URL requests have a `Accept` header field value of "image / *", a cache policy of `NSURLCacheStorageAllowed` and a timeout interval of 30 seconds, and are set not handle cookies. To configure URL requests differently, use `setImageWithURLRequest:placeholderImage:success:failure:` + + @param url The URL used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the image view will not change its image until the image request finishes. + */ +- (void)setImageWithURL:(NSURL *)url + placeholderImage:(nullable UIImage *)placeholderImage; + +/** + Asynchronously downloads an image from the specified URL request, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + If a success block is specified, it is the responsibility of the block to set the image of the image view before returning. If no success block is specified, the default behavior of setting the image with `self.image = image` is applied. + + @param urlRequest The URL request used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the image view will not change its image until the image request finishes. + @param success A block to be executed when the image data task finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the image created from the response data of request. If the image was returned from cache, the response parameter will be `nil`. + @param failure A block object to be executed when the image data task finishes unsuccessfully, or that finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the error object describing the network or parsing error that occurred. + */ +- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(nullable UIImage *)placeholderImage + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *image))success + failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure; + +/** + Cancels any executing image operation for the receiver, if one exists. + */ +- (void)cancelImageDownloadTask; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m new file mode 100644 index 0000000..5934d68 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m @@ -0,0 +1,161 @@ +// UIImageView+AFNetworking.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIImageView+AFNetworking.h" + +#import + +#if TARGET_OS_IOS || TARGET_OS_TV + +#import "AFImageDownloader.h" + +@interface UIImageView (_AFNetworking) +@property (readwrite, nonatomic, strong, setter = af_setActiveImageDownloadReceipt:) AFImageDownloadReceipt *af_activeImageDownloadReceipt; +@end + +@implementation UIImageView (_AFNetworking) + +- (AFImageDownloadReceipt *)af_activeImageDownloadReceipt { + return (AFImageDownloadReceipt *)objc_getAssociatedObject(self, @selector(af_activeImageDownloadReceipt)); +} + +- (void)af_setActiveImageDownloadReceipt:(AFImageDownloadReceipt *)imageDownloadReceipt { + objc_setAssociatedObject(self, @selector(af_activeImageDownloadReceipt), imageDownloadReceipt, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +#pragma mark - + +@implementation UIImageView (AFNetworking) + ++ (AFImageDownloader *)sharedImageDownloader { + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(sharedImageDownloader)) ?: [AFImageDownloader defaultInstance]; +#pragma clang diagnostic pop +} + ++ (void)setSharedImageDownloader:(AFImageDownloader *)imageDownloader { + objc_setAssociatedObject(self, @selector(sharedImageDownloader), imageDownloader, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (void)setImageWithURL:(NSURL *)url { + [self setImageWithURL:url placeholderImage:nil]; +} + +- (void)setImageWithURL:(NSURL *)url + placeholderImage:(UIImage *)placeholderImage +{ + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; + + [self setImageWithURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; +} + +- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(UIImage *)placeholderImage + success:(void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *image))success + failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure +{ + + if ([urlRequest URL] == nil) { + [self cancelImageDownloadTask]; + self.image = placeholderImage; + return; + } + + if ([self isActiveTaskURLEqualToURLRequest:urlRequest]){ + return; + } + + [self cancelImageDownloadTask]; + + AFImageDownloader *downloader = [[self class] sharedImageDownloader]; + id imageCache = downloader.imageCache; + + //Use the image from the image cache if it exists + UIImage *cachedImage = [imageCache imageforRequest:urlRequest withAdditionalIdentifier:nil]; + if (cachedImage) { + if (success) { + success(urlRequest, nil, cachedImage); + } else { + self.image = cachedImage; + } + [self clearActiveDownloadInformation]; + } else { + if (placeholderImage) { + self.image = placeholderImage; + } + + __weak __typeof(self)weakSelf = self; + NSUUID *downloadID = [NSUUID UUID]; + AFImageDownloadReceipt *receipt; + receipt = [downloader + downloadImageForURLRequest:urlRequest + withReceiptID:downloadID + success:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, UIImage * _Nonnull responseObject) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([strongSelf.af_activeImageDownloadReceipt.receiptID isEqual:downloadID]) { + if (success) { + success(request, response, responseObject); + } else if(responseObject) { + strongSelf.image = responseObject; + } + [strongSelf clearActiveDownloadInformation]; + } + + } + failure:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, NSError * _Nonnull error) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([strongSelf.af_activeImageDownloadReceipt.receiptID isEqual:downloadID]) { + if (failure) { + failure(request, response, error); + } + [strongSelf clearActiveDownloadInformation]; + } + }]; + + self.af_activeImageDownloadReceipt = receipt; + } +} + +- (void)cancelImageDownloadTask { + if (self.af_activeImageDownloadReceipt != nil) { + [[self.class sharedImageDownloader] cancelTaskForImageDownloadReceipt:self.af_activeImageDownloadReceipt]; + [self clearActiveDownloadInformation]; + } +} + +- (void)clearActiveDownloadInformation { + self.af_activeImageDownloadReceipt = nil; +} + +- (BOOL)isActiveTaskURLEqualToURLRequest:(NSURLRequest *)urlRequest { + return [self.af_activeImageDownloadReceipt.task.originalRequest.URL.absoluteString isEqualToString:urlRequest.URL.absoluteString]; +} + +@end + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h new file mode 100644 index 0000000..febacfc --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h @@ -0,0 +1,42 @@ +// UIKit+AFNetworking.h +// +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if TARGET_OS_IOS || TARGET_OS_TV +#import + +#ifndef _UIKIT_AFNETWORKING_ + #define _UIKIT_AFNETWORKING_ + +#if TARGET_OS_IOS + #import "AFAutoPurgingImageCache.h" + #import "AFImageDownloader.h" + #import "AFNetworkActivityIndicatorManager.h" + #import "UIRefreshControl+AFNetworking.h" + #import "UIWebView+AFNetworking.h" +#endif + + #import "UIActivityIndicatorView+AFNetworking.h" + #import "UIButton+AFNetworking.h" + #import "UIImageView+AFNetworking.h" + #import "UIProgressView+AFNetworking.h" +#endif /* _UIKIT_AFNETWORKING_ */ +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h new file mode 100644 index 0000000..8ea0a73 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h @@ -0,0 +1,64 @@ +// UIProgressView+AFNetworking.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if TARGET_OS_IOS || TARGET_OS_TV + +#import + +NS_ASSUME_NONNULL_BEGIN + + +/** + This category adds methods to the UIKit framework's `UIProgressView` class. The methods in this category provide support for binding the progress to the upload and download progress of a session task. + */ +@interface UIProgressView (AFNetworking) + +///------------------------------------ +/// @name Setting Session Task Progress +///------------------------------------ + +/** + Binds the progress to the upload progress of the specified session task. + + @param task The session task. + @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. + */ +- (void)setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)task + animated:(BOOL)animated; + +/** + Binds the progress to the download progress of the specified session task. + + @param task The session task. + @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. + */ +- (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task + animated:(BOOL)animated; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m new file mode 100644 index 0000000..058755e --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m @@ -0,0 +1,118 @@ +// UIProgressView+AFNetworking.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIProgressView+AFNetworking.h" + +#import + +#if TARGET_OS_IOS || TARGET_OS_TV + +#import "AFURLSessionManager.h" + +static void * AFTaskCountOfBytesSentContext = &AFTaskCountOfBytesSentContext; +static void * AFTaskCountOfBytesReceivedContext = &AFTaskCountOfBytesReceivedContext; + +#pragma mark - + +@implementation UIProgressView (AFNetworking) + +- (BOOL)af_uploadProgressAnimated { + return [(NSNumber *)objc_getAssociatedObject(self, @selector(af_uploadProgressAnimated)) boolValue]; +} + +- (void)af_setUploadProgressAnimated:(BOOL)animated { + objc_setAssociatedObject(self, @selector(af_uploadProgressAnimated), @(animated), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (BOOL)af_downloadProgressAnimated { + return [(NSNumber *)objc_getAssociatedObject(self, @selector(af_downloadProgressAnimated)) boolValue]; +} + +- (void)af_setDownloadProgressAnimated:(BOOL)animated { + objc_setAssociatedObject(self, @selector(af_downloadProgressAnimated), @(animated), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (void)setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)task + animated:(BOOL)animated +{ + [task addObserver:self forKeyPath:@"state" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesSentContext]; + [task addObserver:self forKeyPath:@"countOfBytesSent" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesSentContext]; + + [self af_setUploadProgressAnimated:animated]; +} + +- (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task + animated:(BOOL)animated +{ + [task addObserver:self forKeyPath:@"state" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesReceivedContext]; + [task addObserver:self forKeyPath:@"countOfBytesReceived" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesReceivedContext]; + + [self af_setDownloadProgressAnimated:animated]; +} + +#pragma mark - NSKeyValueObserving + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(id)object + change:(__unused NSDictionary *)change + context:(void *)context +{ + if (context == AFTaskCountOfBytesSentContext || context == AFTaskCountOfBytesReceivedContext) { + if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesSent))]) { + if ([object countOfBytesExpectedToSend] > 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self setProgress:[object countOfBytesSent] / ([object countOfBytesExpectedToSend] * 1.0f) animated:self.af_uploadProgressAnimated]; + }); + } + } + + if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesReceived))]) { + if ([object countOfBytesExpectedToReceive] > 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self setProgress:[object countOfBytesReceived] / ([object countOfBytesExpectedToReceive] * 1.0f) animated:self.af_downloadProgressAnimated]; + }); + } + } + + if ([keyPath isEqualToString:NSStringFromSelector(@selector(state))]) { + if ([(NSURLSessionTask *)object state] == NSURLSessionTaskStateCompleted) { + @try { + [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(state))]; + + if (context == AFTaskCountOfBytesSentContext) { + [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesSent))]; + } + + if (context == AFTaskCountOfBytesReceivedContext) { + [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesReceived))]; + } + } + @catch (NSException * __unused exception) {} + } + } + } +} + +@end + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h new file mode 100644 index 0000000..215eafc --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h @@ -0,0 +1,53 @@ +// UIRefreshControl+AFNetworking.m +// +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if TARGET_OS_IOS + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + This category adds methods to the UIKit framework's `UIRefreshControl` class. The methods in this category provide support for automatically beginning and ending refreshing depending on the loading state of a session task. + */ +@interface UIRefreshControl (AFNetworking) + +///----------------------------------- +/// @name Refreshing for Session Tasks +///----------------------------------- + +/** + Binds the refreshing state to the state of the specified task. + + @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled. + */ +- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m new file mode 100644 index 0000000..aba6d61 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m @@ -0,0 +1,122 @@ +// UIRefreshControl+AFNetworking.m +// +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIRefreshControl+AFNetworking.h" +#import + +#if TARGET_OS_IOS + +#import "AFURLSessionManager.h" + +@interface AFRefreshControlNotificationObserver : NSObject +@property (readonly, nonatomic, weak) UIRefreshControl *refreshControl; +- (instancetype)initWithActivityRefreshControl:(UIRefreshControl *)refreshControl; + +- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task; + +@end + +@implementation UIRefreshControl (AFNetworking) + +- (AFRefreshControlNotificationObserver *)af_notificationObserver { + AFRefreshControlNotificationObserver *notificationObserver = objc_getAssociatedObject(self, @selector(af_notificationObserver)); + if (notificationObserver == nil) { + notificationObserver = [[AFRefreshControlNotificationObserver alloc] initWithActivityRefreshControl:self]; + objc_setAssociatedObject(self, @selector(af_notificationObserver), notificationObserver, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return notificationObserver; +} + +- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task { + [[self af_notificationObserver] setRefreshingWithStateOfTask:task]; +} + +@end + +@implementation AFRefreshControlNotificationObserver + +- (instancetype)initWithActivityRefreshControl:(UIRefreshControl *)refreshControl +{ + self = [super init]; + if (self) { + _refreshControl = refreshControl; + } + return self; +} + +- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; + + if (task) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" +#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" + if (task.state == NSURLSessionTaskStateRunning) { + [self.refreshControl beginRefreshing]; + + [notificationCenter addObserver:self selector:@selector(af_beginRefreshing) name:AFNetworkingTaskDidResumeNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidCompleteNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidSuspendNotification object:task]; + } else { + [self.refreshControl endRefreshing]; + } +#pragma clang diagnostic pop + } +} + +#pragma mark - + +- (void)af_beginRefreshing { + dispatch_async(dispatch_get_main_queue(), ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" + [self.refreshControl beginRefreshing]; +#pragma clang diagnostic pop + }); +} + +- (void)af_endRefreshing { + dispatch_async(dispatch_get_main_queue(), ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" + [self.refreshControl endRefreshing]; +#pragma clang diagnostic pop + }); +} + +#pragma mark - + +- (void)dealloc { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; +} + +@end + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h new file mode 100644 index 0000000..b9a56af --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h @@ -0,0 +1,80 @@ +// UIWebView+AFNetworking.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if TARGET_OS_IOS + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class AFHTTPSessionManager; + +/** + This category adds methods to the UIKit framework's `UIWebView` class. The methods in this category provide increased control over the request cycle, including progress monitoring and success / failure handling. + + @discussion When using these category methods, make sure to assign `delegate` for the web view, which implements `–webView:shouldStartLoadWithRequest:navigationType:` appropriately. This allows for tapped links to be loaded through AFNetworking, and can ensure that `canGoBack` & `canGoForward` update their values correctly. + */ +@interface UIWebView (AFNetworking) + +/** + The session manager used to download all requests. + */ +@property (nonatomic, strong) AFHTTPSessionManager *sessionManager; + +/** + Asynchronously loads the specified request. + + @param request A URL request identifying the location of the content to load. This must not be `nil`. + @param progress A progress object monitoring the current download progress. + @param success A block object to be executed when the request finishes loading successfully. This block returns the HTML string to be loaded by the web view, and takes two arguments: the response, and the response string. + @param failure A block object to be executed when the data task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. + */ +- (void)loadRequest:(NSURLRequest *)request + progress:(NSProgress * _Nullable __autoreleasing * _Nullable)progress + success:(nullable NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success + failure:(nullable void (^)(NSError *error))failure; + +/** + Asynchronously loads the data associated with a particular request with a specified MIME type and text encoding. + + @param request A URL request identifying the location of the content to load. This must not be `nil`. + @param MIMEType The MIME type of the content. Defaults to the content type of the response if not specified. + @param textEncodingName The IANA encoding name, as in `utf-8` or `utf-16`. Defaults to the response text encoding if not specified. +@param progress A progress object monitoring the current download progress. + @param success A block object to be executed when the request finishes loading successfully. This block returns the data to be loaded by the web view and takes two arguments: the response, and the downloaded data. + @param failure A block object to be executed when the data task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. + */ +- (void)loadRequest:(NSURLRequest *)request + MIMEType:(nullable NSString *)MIMEType + textEncodingName:(nullable NSString *)textEncodingName + progress:(NSProgress * _Nullable __autoreleasing * _Nullable)progress + success:(nullable NSData * (^)(NSHTTPURLResponse *response, NSData *data))success + failure:(nullable void (^)(NSError *error))failure; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m new file mode 100644 index 0000000..751c499 --- /dev/null +++ b/Autorization:Registration Example/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m @@ -0,0 +1,162 @@ +// UIWebView+AFNetworking.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIWebView+AFNetworking.h" + +#import + +#if TARGET_OS_IOS + +#import "AFHTTPSessionManager.h" +#import "AFURLResponseSerialization.h" +#import "AFURLRequestSerialization.h" + +@interface UIWebView (_AFNetworking) +@property (readwrite, nonatomic, strong, setter = af_setURLSessionTask:) NSURLSessionDataTask *af_URLSessionTask; +@end + +@implementation UIWebView (_AFNetworking) + +- (NSURLSessionDataTask *)af_URLSessionTask { + return (NSURLSessionDataTask *)objc_getAssociatedObject(self, @selector(af_URLSessionTask)); +} + +- (void)af_setURLSessionTask:(NSURLSessionDataTask *)af_URLSessionTask { + objc_setAssociatedObject(self, @selector(af_URLSessionTask), af_URLSessionTask, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +#pragma mark - + +@implementation UIWebView (AFNetworking) + +- (AFHTTPSessionManager *)sessionManager { + static AFHTTPSessionManager *_af_defaultHTTPSessionManager = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultHTTPSessionManager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; + _af_defaultHTTPSessionManager.requestSerializer = [AFHTTPRequestSerializer serializer]; + _af_defaultHTTPSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(sessionManager)) ?: _af_defaultHTTPSessionManager; +#pragma clang diagnostic pop +} + +- (void)setSessionManager:(AFHTTPSessionManager *)sessionManager { + objc_setAssociatedObject(self, @selector(sessionManager), sessionManager, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (AFHTTPResponseSerializer *)responseSerializer { + static AFHTTPResponseSerializer *_af_defaultResponseSerializer = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultResponseSerializer = [AFHTTPResponseSerializer serializer]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(responseSerializer)) ?: _af_defaultResponseSerializer; +#pragma clang diagnostic pop +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + objc_setAssociatedObject(self, @selector(responseSerializer), responseSerializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (void)loadRequest:(NSURLRequest *)request + progress:(NSProgress * _Nullable __autoreleasing * _Nullable)progress + success:(NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success + failure:(void (^)(NSError *error))failure +{ + [self loadRequest:request MIMEType:nil textEncodingName:nil progress:progress success:^NSData *(NSHTTPURLResponse *response, NSData *data) { + NSStringEncoding stringEncoding = NSUTF8StringEncoding; + if (response.textEncodingName) { + CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName); + if (encoding != kCFStringEncodingInvalidId) { + stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding); + } + } + + NSString *string = [[NSString alloc] initWithData:data encoding:stringEncoding]; + if (success) { + string = success(response, string); + } + + return [string dataUsingEncoding:stringEncoding]; + } failure:failure]; +} + +- (void)loadRequest:(NSURLRequest *)request + MIMEType:(NSString *)MIMEType + textEncodingName:(NSString *)textEncodingName + progress:(NSProgress * _Nullable __autoreleasing * _Nullable)progress + success:(NSData * (^)(NSHTTPURLResponse *response, NSData *data))success + failure:(void (^)(NSError *error))failure +{ + NSParameterAssert(request); + + if (self.af_URLSessionTask.state == NSURLSessionTaskStateRunning || self.af_URLSessionTask.state == NSURLSessionTaskStateSuspended) { + [self.af_URLSessionTask cancel]; + } + self.af_URLSessionTask = nil; + + __weak __typeof(self)weakSelf = self; + NSURLSessionDataTask *dataTask; + dataTask = [self.sessionManager + GET:request.URL.absoluteString + parameters:nil + progress:nil + success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (success) { + success((NSHTTPURLResponse *)task.response, responseObject); + } + [strongSelf loadData:responseObject MIMEType:MIMEType textEncodingName:textEncodingName baseURL:[task.currentRequest URL]]; + + if ([strongSelf.delegate respondsToSelector:@selector(webViewDidStartLoad:)]) { + [strongSelf.delegate webViewDidFinishLoad:strongSelf]; + } + } + failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) { + if (failure) { + failure(error); + } + }]; + self.af_URLSessionTask = dataTask; + if (progress != nil) { + *progress = [self.sessionManager downloadProgressForTask:dataTask]; + } + [self.af_URLSessionTask resume]; + + if ([self.delegate respondsToSelector:@selector(webViewDidStartLoad:)]) { + [self.delegate webViewDidStartLoad:self]; + } +} + +@end + +#endif \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Crashlytics/Crashlytics.framework/README b/Autorization:Registration Example/Pods/Crashlytics/Crashlytics.framework/README new file mode 100644 index 0000000..3ebf767 --- /dev/null +++ b/Autorization:Registration Example/Pods/Crashlytics/Crashlytics.framework/README @@ -0,0 +1 @@ +We've now combined all our supported platforms into a single podspec. As a result, we moved our submit script to a new location for Cocoapods projects: ${PODS_ROOT}/Crashlytics/submit. To avoid breaking functionality that references the old location of the submit, we've placed this dummy script that calls to the correct location, while providing a helpful warning if it is invoked. This bridge for backwards compatibility will be removed in a future release, so please heed the warning! diff --git a/Autorization:Registration Example/Pods/Crashlytics/Crashlytics.framework/submit b/Autorization:Registration Example/Pods/Crashlytics/Crashlytics.framework/submit new file mode 100755 index 0000000..b7de4e3 --- /dev/null +++ b/Autorization:Registration Example/Pods/Crashlytics/Crashlytics.framework/submit @@ -0,0 +1,6 @@ +if [[ -z $PODS_ROOT ]]; then +echo "error: The submit binary delivered by cocoapods is in a new location, under '$"{"PODS_ROOT"}"/Crashlytics/submit'. This script was put in place for backwards compatibility, but it relies on PODS_ROOT, which does not have a value in your current setup. Please update the path to the submit binary to fix this issue." +else +echo "warning: The submit script is now located at '$"{"PODS_ROOT"}"/Crashlytics/submit'. To remove this warning, update your path to point to this new location." +sh "${PODS_ROOT}/Crashlytics/submit" "$@" +fi diff --git a/Autorization:Registration Example/Pods/Crashlytics/README.md b/Autorization:Registration Example/Pods/Crashlytics/README.md new file mode 100644 index 0000000..226377d --- /dev/null +++ b/Autorization:Registration Example/Pods/Crashlytics/README.md @@ -0,0 +1,38 @@ +![Crashlytics Header](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-crashlytics-header.png) + +Part of [Twitter Fabric](https://www.fabric.io), [Crashlytics](http://try.crashlytics.com/) offers the most powerful, yet lightest weight crash reporting solution for iOS. Crashlytics also provides real-time analytics through [Answers](https://answers.io/) and app distributions to testers using [Beta](http://try.crashlytics.com/beta/). + +## Setup + +1. Visit https://fabric.io/sign_up to create your Fabric account and to download Fabric.app + +1. Open Fabric.app, login and select the Crashlytics SDK. + + ![Fabric Plugin](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-plugin.png) + +1. The Fabric app automatically detects when a project uses CocoaPods and gives you the option to install via the Podfile or Xcode. + + ![Fabric Installation Options](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-pod-installation-option.png) + +1. Select the Podfile option and follow the installation instructions to update your Podfile. **Note:** the Crashlytics Pod includes Answers. If you have Answers included as a separate Pod it should be removed from your Podfile to avoid duplicate symbol errors. + + `pod 'Fabric'` + `pod 'Crashlytics'` + +1. Run `pod install` + +1. Add a Run Script Build Phase and build your app. + + ![Fabric Run Script Build Phase](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-rsbp.png) + +1. Initialize the SDK by inserting code outlined in the Fabric.app. + +1. Run your app to finish the installation. + +## Resources + +* [Documentation](https://docs.fabric.io/ios/crashlytics/index.html) +* [Forums](https://twittercommunity.com/c/fabric/crashlytics) +* [Website](http://try.crashlytics.com/) +* Follow us on Twitter: [@fabric](https://twitter.com/fabric) and [@crashlytics](https://twitter.com/crashlytics) +* Follow us on Periscope: [Fabric](https://periscope.tv/fabric) and [TwitterDev](https://periscope.tv/twitterdev) diff --git a/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics new file mode 100755 index 0000000..5cd0a33 Binary files /dev/null and b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics differ diff --git a/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/ANSCompatibility.h b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/ANSCompatibility.h new file mode 100644 index 0000000..6ec011d --- /dev/null +++ b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/ANSCompatibility.h @@ -0,0 +1,31 @@ +// +// ANSCompatibility.h +// AnswersKit +// +// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. +// + +#pragma once + +#if !__has_feature(nullability) +#define nonnull +#define nullable +#define _Nullable +#define _Nonnull +#endif + +#ifndef NS_ASSUME_NONNULL_BEGIN +#define NS_ASSUME_NONNULL_BEGIN +#endif + +#ifndef NS_ASSUME_NONNULL_END +#define NS_ASSUME_NONNULL_END +#endif + +#if __has_feature(objc_generics) +#define ANS_GENERIC_NSARRAY(type) NSArray +#define ANS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary +#else +#define ANS_GENERIC_NSARRAY(type) NSArray +#define ANS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary +#endif diff --git a/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Answers.h b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Answers.h new file mode 100644 index 0000000..710eb50 --- /dev/null +++ b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Answers.h @@ -0,0 +1,210 @@ +// +// Answers.h +// Crashlytics +// +// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. +// + +#import +#import "ANSCompatibility.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * This class exposes the Answers Events API, allowing you to track key + * user user actions and metrics in your app. + */ +@interface Answers : NSObject + +/** + * Log a Sign Up event to see users signing up for your app in real-time, understand how + * many users are signing up with different methods and their success rate signing up. + * + * @param signUpMethodOrNil The method by which a user logged in, e.g. Twitter or Digits. + * @param signUpSucceededOrNil The ultimate success or failure of the login + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logSignUpWithMethod:(nullable NSString *)signUpMethodOrNil + success:(nullable NSNumber *)signUpSucceededOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log an Log In event to see users logging into your app in real-time, understand how many + * users are logging in with different methods and their success rate logging into your app. + * + * @param loginMethodOrNil The method by which a user logged in, e.g. email, Twitter or Digits. + * @param loginSucceededOrNil The ultimate success or failure of the login + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logLoginWithMethod:(nullable NSString *)loginMethodOrNil + success:(nullable NSNumber *)loginSucceededOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Share event to see users sharing from your app in real-time, letting you + * understand what content they're sharing from the type or genre down to the specific id. + * + * @param shareMethodOrNil The method by which a user shared, e.g. email, Twitter, SMS. + * @param contentNameOrNil The human readable name for this piece of content. + * @param contentTypeOrNil The type of content shared. + * @param contentIdOrNil The unique identifier for this piece of content. Useful for finding the top shared item. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logShareWithMethod:(nullable NSString *)shareMethodOrNil + contentName:(nullable NSString *)contentNameOrNil + contentType:(nullable NSString *)contentTypeOrNil + contentId:(nullable NSString *)contentIdOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log an Invite Event to track how users are inviting other users into + * your application. + * + * @param inviteMethodOrNil The method of invitation, e.g. GameCenter, Twitter, email. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logInviteWithMethod:(nullable NSString *)inviteMethodOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Purchase event to see your revenue in real-time, understand how many users are making purchases, see which + * items are most popular, and track plenty of other important purchase-related metrics. + * + * @param itemPriceOrNil The purchased item's price. + * @param currencyOrNil The ISO4217 currency code. Example: USD + * @param purchaseSucceededOrNil Was the purchase succesful or unsuccesful + * @param itemNameOrNil The human-readable form of the item's name. Example: + * @param itemTypeOrNil The type, or genre of the item. Example: Song + * @param itemIdOrNil The machine-readable, unique item identifier Example: SKU + * @param customAttributesOrNil A dictionary of custom attributes to associate with this purchase. + */ ++ (void)logPurchaseWithPrice:(nullable NSDecimalNumber *)itemPriceOrNil + currency:(nullable NSString *)currencyOrNil + success:(nullable NSNumber *)purchaseSucceededOrNil + itemName:(nullable NSString *)itemNameOrNil + itemType:(nullable NSString *)itemTypeOrNil + itemId:(nullable NSString *)itemIdOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Level Start Event to track where users are in your game. + * + * @param levelNameOrNil The level name + * @param customAttributesOrNil A dictionary of custom attributes to associate with this level start event. + */ ++ (void)logLevelStart:(nullable NSString *)levelNameOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Level End event to track how users are completing levels in your game. + * + * @param levelNameOrNil The name of the level completed, E.G. "1" or "Training" + * @param scoreOrNil The score the user completed the level with. + * @param levelCompletedSuccesfullyOrNil A boolean representing whether or not the level was completed succesfully. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logLevelEnd:(nullable NSString *)levelNameOrNil + score:(nullable NSNumber *)scoreOrNil + success:(nullable NSNumber *)levelCompletedSuccesfullyOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log an Add to Cart event to see users adding items to a shopping cart in real-time, understand how + * many users start the purchase flow, see which items are most popular, and track plenty of other important + * purchase-related metrics. + * + * @param itemPriceOrNil The purchased item's price. + * @param currencyOrNil The ISO4217 currency code. Example: USD + * @param itemNameOrNil The human-readable form of the item's name. Example: + * @param itemTypeOrNil The type, or genre of the item. Example: Song + * @param itemIdOrNil The machine-readable, unique item identifier Example: SKU + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logAddToCartWithPrice:(nullable NSDecimalNumber *)itemPriceOrNil + currency:(nullable NSString *)currencyOrNil + itemName:(nullable NSString *)itemNameOrNil + itemType:(nullable NSString *)itemTypeOrNil + itemId:(nullable NSString *)itemIdOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Start Checkout event to see users moving through the purchase funnel in real-time, understand how many + * users are doing this and how much they're spending per checkout, and see how it related to other important + * purchase-related metrics. + * + * @param totalPriceOrNil The total price of the cart. + * @param currencyOrNil The ISO4217 currency code. Example: USD + * @param itemCountOrNil The number of items in the cart. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logStartCheckoutWithPrice:(nullable NSDecimalNumber *)totalPriceOrNil + currency:(nullable NSString *)currencyOrNil + itemCount:(nullable NSNumber *)itemCountOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Rating event to see users rating content within your app in real-time and understand what + * content is most engaging, from the type or genre down to the specific id. + * + * @param ratingOrNil The integer rating given by the user. + * @param contentNameOrNil The human readable name for this piece of content. + * @param contentTypeOrNil The type of content shared. + * @param contentIdOrNil The unique identifier for this piece of content. Useful for finding the top shared item. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logRating:(nullable NSNumber *)ratingOrNil + contentName:(nullable NSString *)contentNameOrNil + contentType:(nullable NSString *)contentTypeOrNil + contentId:(nullable NSString *)contentIdOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Content View event to see users viewing content within your app in real-time and + * understand what content is most engaging, from the type or genre down to the specific id. + * + * @param contentNameOrNil The human readable name for this piece of content. + * @param contentTypeOrNil The type of content shared. + * @param contentIdOrNil The unique identifier for this piece of content. Useful for finding the top shared item. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logContentViewWithName:(nullable NSString *)contentNameOrNil + contentType:(nullable NSString *)contentTypeOrNil + contentId:(nullable NSString *)contentIdOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Search event allows you to see users searching within your app in real-time and understand + * exactly what they're searching for. + * + * @param queryOrNil The user's query. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logSearchWithQuery:(nullable NSString *)queryOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Custom Event to see user actions that are uniquely important for your app in real-time, to see how often + * they're performing these actions with breakdowns by different categories you add. Use a human-readable name for + * the name of the event, since this is how the event will appear in Answers. + * + * @param eventName The human-readable name for the event. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. Attribute keys + * must be NSString and and values must be NSNumber or NSString. + * @discussion How we treat NSNumbers: + * We will provide information about the distribution of values over time. + * + * How we treat NSStrings: + * NSStrings are used as categorical data, allowing comparison across different category values. + * Strings are limited to a maximum length of 100 characters, attributes over this length will be + * truncated. + * + * When tracking the Tweet views to better understand user engagement, sending the tweet's length + * and the type of media present in the tweet allows you to track how tweet length and the type of media influence + * engagement. + */ ++ (void)logCustomEventWithName:(NSString *)eventName + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSAttributes.h b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSAttributes.h new file mode 100644 index 0000000..1526b0d --- /dev/null +++ b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSAttributes.h @@ -0,0 +1,33 @@ +// +// CLSAttributes.h +// Crashlytics +// +// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. +// + +#pragma once + +#define CLS_DEPRECATED(x) __attribute__ ((deprecated(x))) + +#if !__has_feature(nullability) + #define nonnull + #define nullable + #define _Nullable + #define _Nonnull +#endif + +#ifndef NS_ASSUME_NONNULL_BEGIN + #define NS_ASSUME_NONNULL_BEGIN +#endif + +#ifndef NS_ASSUME_NONNULL_END + #define NS_ASSUME_NONNULL_END +#endif + +#if __has_feature(objc_generics) + #define CLS_GENERIC_NSARRAY(type) NSArray + #define CLS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary +#else + #define CLS_GENERIC_NSARRAY(type) NSArray + #define CLS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary +#endif diff --git a/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSLogging.h b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSLogging.h new file mode 100644 index 0000000..59590d5 --- /dev/null +++ b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSLogging.h @@ -0,0 +1,64 @@ +// +// CLSLogging.h +// Crashlytics +// +// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. +// +#ifdef __OBJC__ +#import "CLSAttributes.h" +#import + +NS_ASSUME_NONNULL_BEGIN +#endif + + + +/** + * + * The CLS_LOG macro provides as easy way to gather more information in your log messages that are + * sent with your crash data. CLS_LOG prepends your custom log message with the function name and + * line number where the macro was used. If your app was built with the DEBUG preprocessor macro + * defined CLS_LOG uses the CLSNSLog function which forwards your log message to NSLog and CLSLog. + * If the DEBUG preprocessor macro is not defined CLS_LOG uses CLSLog only. + * + * Example output: + * -[AppDelegate login:] line 134 $ login start + * + * If you would like to change this macro, create a new header file, unset our define and then define + * your own version. Make sure this new header file is imported after the Crashlytics header file. + * + * #undef CLS_LOG + * #define CLS_LOG(__FORMAT__, ...) CLSNSLog... + * + **/ +#ifdef __OBJC__ +#ifdef DEBUG +#define CLS_LOG(__FORMAT__, ...) CLSNSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) +#else +#define CLS_LOG(__FORMAT__, ...) CLSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) +#endif +#endif + +/** + * + * Add logging that will be sent with your crash data. This logging will not show up in the system.log + * and will only be visible in your Crashlytics dashboard. + * + **/ + +#ifdef __OBJC__ +OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); +OBJC_EXTERN void CLSLogv(NSString *format, va_list ap) NS_FORMAT_FUNCTION(1,0); + +/** + * + * Add logging that will be sent with your crash data. This logging will show up in the system.log + * and your Crashlytics dashboard. It is not recommended for Release builds. + * + **/ +OBJC_EXTERN void CLSNSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); +OBJC_EXTERN void CLSNSLogv(NSString *format, va_list ap) NS_FORMAT_FUNCTION(1,0); + + +NS_ASSUME_NONNULL_END +#endif diff --git a/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSReport.h b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSReport.h new file mode 100644 index 0000000..6e3a515 --- /dev/null +++ b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSReport.h @@ -0,0 +1,103 @@ +// +// CLSReport.h +// Crashlytics +// +// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. +// + +#import +#import "CLSAttributes.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * The CLSCrashReport protocol is deprecated. See the CLSReport class and the CrashyticsDelegate changes for details. + **/ +@protocol CLSCrashReport + +@property (nonatomic, copy, readonly) NSString *identifier; +@property (nonatomic, copy, readonly) NSDictionary *customKeys; +@property (nonatomic, copy, readonly) NSString *bundleVersion; +@property (nonatomic, copy, readonly) NSString *bundleShortVersionString; +@property (nonatomic, copy, readonly) NSDate *crashedOnDate; +@property (nonatomic, copy, readonly) NSString *OSVersion; +@property (nonatomic, copy, readonly) NSString *OSBuildVersion; + +@end + +/** + * The CLSReport exposes an interface to the phsyical report that Crashlytics has created. You can + * use this class to get information about the event, and can also set some values after the + * event has occured. + **/ +@interface CLSReport : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + * Returns the session identifier for the report. + **/ +@property (nonatomic, copy, readonly) NSString *identifier; + +/** + * Returns the custom key value data for the report. + **/ +@property (nonatomic, copy, readonly) NSDictionary *customKeys; + +/** + * Returns the CFBundleVersion of the application that generated the report. + **/ +@property (nonatomic, copy, readonly) NSString *bundleVersion; + +/** + * Returns the CFBundleShortVersionString of the application that generated the report. + **/ +@property (nonatomic, copy, readonly) NSString *bundleShortVersionString; + +/** + * Returns the date that the report was created. + **/ +@property (nonatomic, copy, readonly) NSDate *dateCreated; + +/** + * Returns the os version that the application crashed on. + **/ +@property (nonatomic, copy, readonly) NSString *OSVersion; + +/** + * Returns the os build version that the application crashed on. + **/ +@property (nonatomic, copy, readonly) NSString *OSBuildVersion; + +/** + * Returns YES if the report contains any crash information, otherwise returns NO. + **/ +@property (nonatomic, assign, readonly) BOOL isCrash; + +/** + * You can use this method to set, after the event, additional custom keys. The rules + * and semantics for this method are the same as those documented in Crashlytics.h. Be aware + * that the maximum size and count of custom keys is still enforced, and you can overwrite keys + * and/or cause excess keys to be deleted by using this method. + **/ +- (void)setObjectValue:(nullable id)value forKey:(NSString *)key; + +/** + * Record an application-specific user identifier. See Crashlytics.h for details. + **/ +@property (nonatomic, copy, nullable) NSString * userIdentifier; + +/** + * Record a user name. See Crashlytics.h for details. + **/ +@property (nonatomic, copy, nullable) NSString * userName; + +/** + * Record a user email. See Crashlytics.h for details. + **/ +@property (nonatomic, copy, nullable) NSString * userEmail; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSStackFrame.h b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSStackFrame.h new file mode 100644 index 0000000..a9c0f29 --- /dev/null +++ b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSStackFrame.h @@ -0,0 +1,37 @@ +// +// CLSStackFrame.h +// Crashlytics +// +// Copyright 2015 Crashlytics, Inc. All rights reserved. +// + +#import +#import "CLSAttributes.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * + * This class is used in conjunction with -[Crashlytics recordCustomExceptionName:reason:frameArray:] to + * record information about non-ObjC/C++ exceptions. All information included here will be displayed + * in the Crashlytics UI, and can influence crash grouping. Be particularly careful with the use of the + * address property. If set, Crashlytics will attempt symbolication and could overwrite other properities + * in the process. + * + **/ +@interface CLSStackFrame : NSObject + ++ (instancetype)stackFrame; ++ (instancetype)stackFrameWithAddress:(NSUInteger)address; ++ (instancetype)stackFrameWithSymbol:(NSString *)symbol; + +@property (nonatomic, copy, nullable) NSString *symbol; +@property (nonatomic, copy, nullable) NSString *library; +@property (nonatomic, copy, nullable) NSString *fileName; +@property (nonatomic, assign) uint32_t lineNumber; +@property (nonatomic, assign) uint64_t offset; +@property (nonatomic, assign) uint64_t address; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h new file mode 100644 index 0000000..6f2e3f6 --- /dev/null +++ b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h @@ -0,0 +1,263 @@ +// +// Crashlytics.h +// Crashlytics +// +// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. +// + +#import + +#import "CLSAttributes.h" +#import "CLSLogging.h" +#import "CLSReport.h" +#import "CLSStackFrame.h" +#import "Answers.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol CrashlyticsDelegate; + +/** + * Crashlytics. Handles configuration and initialization of Crashlytics. + */ +@interface Crashlytics : NSObject + +@property (nonatomic, readonly, copy) NSString *APIKey; +@property (nonatomic, readonly, copy) NSString *version; +@property (nonatomic, assign) BOOL debugMode; + +/** + * + * The delegate can be used to influence decisions on reporting and behavior, as well as reacting + * to previous crashes. + * + * Make certain that the delegate is setup before starting Crashlytics with startWithAPIKey:... or + * via +[Fabric with:...]. Failure to do will result in missing any delegate callbacks that occur + * synchronously during start. + * + **/ +@property (nonatomic, assign, nullable) id delegate; + +/** + * The recommended way to install Crashlytics into your application is to place a call to +startWithAPIKey: + * in your -application:didFinishLaunchingWithOptions: or -applicationDidFinishLaunching: + * method. + * + * Note: Starting with 3.0, the submission process has been significantly improved. The delay parameter + * is no longer required to throttle submissions on launch, performance will be great without it. + * + * @param apiKey The Crashlytics API Key for this app + * + * @return The singleton Crashlytics instance + */ ++ (Crashlytics *)startWithAPIKey:(NSString *)apiKey; ++ (Crashlytics *)startWithAPIKey:(NSString *)apiKey afterDelay:(NSTimeInterval)delay CLS_DEPRECATED("Crashlytics no longer needs or uses the delay parameter. Please use +startWithAPIKey: instead."); + +/** + * If you need the functionality provided by the CrashlyticsDelegate protocol, you can use + * these convenience methods to activate the framework and set the delegate in one call. + * + * @param apiKey The Crashlytics API Key for this app + * @param delegate A delegate object which conforms to CrashlyticsDelegate. + * + * @return The singleton Crashlytics instance + */ ++ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(nullable id)delegate; ++ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(nullable id)delegate afterDelay:(NSTimeInterval)delay CLS_DEPRECATED("Crashlytics no longer needs or uses the delay parameter. Please use +startWithAPIKey:delegate: instead."); + +/** + * Access the singleton Crashlytics instance. + * + * @return The singleton Crashlytics instance + */ ++ (Crashlytics *)sharedInstance; + +/** + * The easiest way to cause a crash - great for testing! + */ +- (void)crash; + +/** + * The easiest way to cause a crash with an exception - great for testing. + */ +- (void)throwException; + +/** + * Specify a user identifier which will be visible in the Crashlytics UI. + * + * Many of our customers have requested the ability to tie crashes to specific end-users of their + * application in order to facilitate responses to support requests or permit the ability to reach + * out for more information. We allow you to specify up to three separate values for display within + * the Crashlytics UI - but please be mindful of your end-user's privacy. + * + * We recommend specifying a user identifier - an arbitrary string that ties an end-user to a record + * in your system. This could be a database id, hash, or other value that is meaningless to a + * third-party observer but can be indexed and queried by you. + * + * Optionally, you may also specify the end-user's name or username, as well as email address if you + * do not have a system that works well with obscured identifiers. + * + * Pursuant to our EULA, this data is transferred securely throughout our system and we will not + * disseminate end-user data unless required to by law. That said, if you choose to provide end-user + * contact information, we strongly recommend that you disclose this in your application's privacy + * policy. Data privacy is of our utmost concern. + * + * @param identifier An arbitrary user identifier string which ties an end-user to a record in your system. + */ +- (void)setUserIdentifier:(nullable NSString *)identifier; + +/** + * Specify a user name which will be visible in the Crashlytics UI. + * Please be mindful of your end-user's privacy and see if setUserIdentifier: can fulfil your needs. + * @see setUserIdentifier: + * + * @param name An end user's name. + */ +- (void)setUserName:(nullable NSString *)name; + +/** + * Specify a user email which will be visible in the Crashlytics UI. + * Please be mindful of your end-user's privacy and see if setUserIdentifier: can fulfil your needs. + * + * @see setUserIdentifier: + * + * @param email An end user's email address. + */ +- (void)setUserEmail:(nullable NSString *)email; + ++ (void)setUserIdentifier:(nullable NSString *)identifier CLS_DEPRECATED("Please access this method via +sharedInstance"); ++ (void)setUserName:(nullable NSString *)name CLS_DEPRECATED("Please access this method via +sharedInstance"); ++ (void)setUserEmail:(nullable NSString *)email CLS_DEPRECATED("Please access this method via +sharedInstance"); + +/** + * Set a value for a for a key to be associated with your crash data which will be visible in the Crashlytics UI. + * When setting an object value, the object is converted to a string. This is typically done by calling + * -[NSObject description]. + * + * @param value The object to be associated with the key + * @param key The key with which to associate the value + */ +- (void)setObjectValue:(nullable id)value forKey:(NSString *)key; + +/** + * Set an int value for a key to be associated with your crash data which will be visible in the Crashlytics UI. + * + * @param value The integer value to be set + * @param key The key with which to associate the value + */ +- (void)setIntValue:(int)value forKey:(NSString *)key; + +/** + * Set an BOOL value for a key to be associated with your crash data which will be visible in the Crashlytics UI. + * + * @param value The BOOL value to be set + * @param key The key with which to associate the value + */ +- (void)setBoolValue:(BOOL)value forKey:(NSString *)key; + +/** + * Set an float value for a key to be associated with your crash data which will be visible in the Crashlytics UI. + * + * @param value The float value to be set + * @param key The key with which to associate the value + */ +- (void)setFloatValue:(float)value forKey:(NSString *)key; + ++ (void)setObjectValue:(nullable id)value forKey:(NSString *)key CLS_DEPRECATED("Please access this method via +sharedInstance"); ++ (void)setIntValue:(int)value forKey:(NSString *)key CLS_DEPRECATED("Please access this method via +sharedInstance"); ++ (void)setBoolValue:(BOOL)value forKey:(NSString *)key CLS_DEPRECATED("Please access this method via +sharedInstance"); ++ (void)setFloatValue:(float)value forKey:(NSString *)key CLS_DEPRECATED("Please access this method via +sharedInstance"); + +/** + * This method can be used to record a single exception structure in a report. This is particularly useful + * when your code interacts with non-native languages like Lua, C#, or Javascript. This call can be + * expensive and should only be used shortly before process termination. This API is not intended be to used + * to log NSException objects. All safely-reportable NSExceptions are automatically captured by + * Crashlytics. + * + * @param name The name of the custom exception + * @param reason The reason this exception occured + * @param frameArray An array of CLSStackFrame objects + */ +- (void)recordCustomExceptionName:(NSString *)name reason:(nullable NSString *)reason frameArray:(CLS_GENERIC_NSARRAY(CLSStackFrame *) *)frameArray; + +/** + * + * This allows you to record a non-fatal event, described by an NSError object. These events will be grouped and + * displayed similarly to crashes. Keep in mind that this method can be expensive. Also, the total number of + * NSErrors that can be recorded during your app's life-cycle is limited by a fixed-size circular buffer. If the + * buffer is overrun, the oldest data is dropped. Errors are relayed to Crashlytics on a subsequent launch + * of your application. + * + * You can also use the -recordError:withAdditionalUserInfo: to include additional context not represented + * by the NSError instance itself. + * + **/ +- (void)recordError:(NSError *)error; +- (void)recordError:(NSError *)error withAdditionalUserInfo:(nullable CLS_GENERIC_NSDICTIONARY(NSString *, id) *)userInfo; + +- (void)logEvent:(NSString *)eventName CLS_DEPRECATED("Please refer to Answers +logCustomEventWithName:"); +- (void)logEvent:(NSString *)eventName attributes:(nullable NSDictionary *) attributes CLS_DEPRECATED("Please refer to Answers +logCustomEventWithName:"); ++ (void)logEvent:(NSString *)eventName CLS_DEPRECATED("Please refer to Answers +logCustomEventWithName:"); ++ (void)logEvent:(NSString *)eventName attributes:(nullable NSDictionary *) attributes CLS_DEPRECATED("Please refer to Answers +logCustomEventWithName:"); + +@end + +/** + * + * The CrashlyticsDelegate protocol provides a mechanism for your application to take + * action on events that occur in the Crashlytics crash reporting system. You can make + * use of these calls by assigning an object to the Crashlytics' delegate property directly, + * or through the convenience +startWithAPIKey:delegate: method. + * + */ +@protocol CrashlyticsDelegate +@optional + + +- (void)crashlyticsDidDetectCrashDuringPreviousExecution:(Crashlytics *)crashlytics CLS_DEPRECATED("Please refer to -crashlyticsDidDetectReportForLastExecution:"); +- (void)crashlytics:(Crashlytics *)crashlytics didDetectCrashDuringPreviousExecution:(id )crash CLS_DEPRECATED("Please refer to -crashlyticsDidDetectReportForLastExecution:"); + +/** + * + * Called when a Crashlytics instance has determined that the last execution of the + * application ended in a crash. This is called synchronously on Crashlytics + * initialization. Your delegate must invoke the completionHandler, but does not need to do so + * synchronously, or even on the main thread. Invoking completionHandler with NO will cause the + * detected report to be deleted and not submitted to Crashlytics. This is useful for + * implementing permission prompts, or other more-complex forms of logic around submitting crashes. + * + * @warning Failure to invoke the completionHandler will prevent submissions from being reported. Watch out. + * + * @warning Just implementing this delegate method will disable all forms of synchronous report submission. This can + * impact the reliability of reporting crashes very early in application launch. + * + * @param report The CLSReport object representing the last detected crash + * @param completionHandler The completion handler to call when your logic has completed. + * + */ +- (void)crashlyticsDidDetectReportForLastExecution:(CLSReport *)report completionHandler:(void (^)(BOOL submit))completionHandler; + +/** + * If your app is running on an OS that supports it (OS X 10.9+, iOS 7.0+), Crashlytics will submit + * most reports using out-of-process background networking operations. This results in a significant + * improvement in reliability of reporting, as well as power and performance wins for your users. + * If you don't want this functionality, you can disable by returning NO from this method. + * + * @warning Background submission is not supported for extensions on iOS or OS X. + * + * @param crashlytics The Crashlytics singleton instance + * + * @return Return NO if you don't want out-of-process background network operations. + * + */ +- (BOOL)crashlyticsCanUseBackgroundSessions:(Crashlytics *)crashlytics; + +@end + +/** + * `CrashlyticsKit` can be used as a parameter to `[Fabric with:@[CrashlyticsKit]];` in Objective-C. In Swift, use Crashlytics.sharedInstance() + */ +#define CrashlyticsKit [Crashlytics sharedInstance] + +NS_ASSUME_NONNULL_END diff --git a/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist new file mode 100644 index 0000000..add4126 --- /dev/null +++ b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist @@ -0,0 +1,55 @@ + + + + + BuildMachineOSBuild + 14F1021 + CFBundleDevelopmentRegion + English + CFBundleExecutable + Crashlytics + CFBundleIdentifier + com.twitter.crashlytics.ios + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Crashlytics + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.7.0 + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + iPhoneOS + + CFBundleVersion + 102 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 13B137 + DTPlatformName + iphoneos + DTPlatformVersion + 9.1 + DTSDKBuild + 13B137 + DTSDKName + iphoneos9.1 + DTXcode + 0710 + DTXcodeBuild + 7B91b + MinimumOSVersion + 6.0 + NSHumanReadableCopyright + Copyright © 2015 Crashlytics, Inc. All rights reserved. + UIDeviceFamily + + 1 + 2 + + + diff --git a/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Modules/module.modulemap b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Modules/module.modulemap new file mode 100644 index 0000000..da0845e --- /dev/null +++ b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/Modules/module.modulemap @@ -0,0 +1,14 @@ +framework module Crashlytics { + header "Crashlytics.h" + header "Answers.h" + header "ANSCompatibility.h" + header "CLSLogging.h" + header "CLSReport.h" + header "CLSStackFrame.h" + header "CLSAttributes.h" + + export * + + link "z" + link "c++" +} diff --git a/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/run b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/run new file mode 100755 index 0000000..9058ea6 --- /dev/null +++ b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/run @@ -0,0 +1,28 @@ +#!/bin/sh + +# run +# +# Copyright (c) 2015 Crashlytics. All rights reserved. + +# Figure out where we're being called from +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +# Quote path in case of spaces or special chars +DIR="\"${DIR}" + +PATH_SEP="/" +VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" +UPLOAD_COMMAND="uploadDSYM\" $@ run-script" + +# Ensure params are as expected, run in sync mode to validate +eval $DIR$PATH_SEP$VALIDATE_COMMAND +return_code=$? + +if [[ $return_code != 0 ]]; then + exit $return_code +fi + +# Verification passed, upload dSYM in background to prevent Xcode from waiting +# Note: Validation is performed again before upload. +# Output can still be found in Console.app +eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & diff --git a/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/submit b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/submit new file mode 100755 index 0000000..e487d4d Binary files /dev/null and b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/submit differ diff --git a/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM new file mode 100755 index 0000000..c459eb0 Binary files /dev/null and b/Autorization:Registration Example/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM differ diff --git a/Autorization:Registration Example/Pods/Crashlytics/submit b/Autorization:Registration Example/Pods/Crashlytics/submit new file mode 100755 index 0000000..96208a2 Binary files /dev/null and b/Autorization:Registration Example/Pods/Crashlytics/submit differ diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/LICENSE b/Autorization:Registration Example/Pods/FSHelpers+Swift/LICENSE new file mode 100644 index 0000000..8ed8bde --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2015 Flatstack + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/README.md b/Autorization:Registration Example/Pods/FSHelpers+Swift/README.md new file mode 100644 index 0000000..77dbb0c --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/README.md @@ -0,0 +1,16 @@ +FSHelper +================= + +## Installation + +Helpers is available through [CocoaPods](http://cocoapods.org). To install +it, simply add the following line to your Podfile: + + pod "FSHelpers+Swift" + +or + + pod "FSHelper" + +## License +FSHelper is released under the MIT license. See [LICENSE](LICENSE) for details. diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Array.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Array.swift new file mode 100644 index 0000000..a4d0b8c --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Array.swift @@ -0,0 +1,50 @@ +// +// FSExtensions+Array.swift +// SwiftHelpers +// +// Created by Kruperfone on 31.07.15. +// Copyright (c) 2015 FlatStack. All rights reserved. +// + +import Foundation + +public extension Array { + + public mutating func fs_appendIfExist (object: Element?) { + guard let lObject = object else {return} + self.append(lObject) + } + + public func fs_objectAtIndexOrNil (index:Int) -> Element? { + guard index < self.count && index >= 0 else {return nil} + return self[index] + } + + public func fs_shuffle () -> Array { + var array:Array = self + + for i in 0 ..< array.count { + let remainingCount = array.count - i + let exchangeIndex = i + Int(arc4random_uniform(UInt32(remainingCount))) + + guard i != exchangeIndex else {continue} + swap(&array[i], &array[exchangeIndex]) + } + + return array + } +} + +public func + (left: Array, right: Array) -> Array { + var result: Array = left + for value in right { + result.append(value) + } + return result +} + +public func += (inout left: Array, right: Array) { + for value in right { + left.append(value) + } +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Dictionary.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Dictionary.swift new file mode 100644 index 0000000..d7c67e5 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Dictionary.swift @@ -0,0 +1,37 @@ +// +// FSExtensions+Dictionary.swift +// SwiftHelpers +// +// Created by Kruperfone on 31.07.15. +// Copyright (c) 2015 FlatStack. All rights reserved. +// + +import Foundation + +public extension Dictionary { + + public mutating func fs_updateIfExist (object: Value?, forKey key: Key) { + guard let lObject = object else {return} + self.updateValue(lObject, forKey: key) + } + + public func fs_objectForKey(key:Key, orDefault def:Value) -> Value { + guard let value = self[key] else {return def} + return value + } + +} + +public func + (left: Dictionary, right: Dictionary) -> Dictionary { + var result: Dictionary = left + for (k, v) in right { + result.updateValue(v, forKey: k) + } + return result +} + +public func += (inout left: Dictionary, right: Dictionary) { + for (k, v) in right { + left.updateValue(v, forKey: k) + } +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Double.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Double.swift new file mode 100644 index 0000000..44d6580 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Double.swift @@ -0,0 +1,17 @@ +// +// FSE+Double.swift +// SwiftHelpers +// +// Created by Kruperfone on 31.07.15. +// Copyright (c) 2015 FlatStack. All rights reserved. +// + +import Foundation + +public extension Double { + public var fs_dispatchTime: dispatch_time_t { + get { + return dispatch_time(DISPATCH_TIME_NOW,Int64(self * Double(NSEC_PER_SEC))) + } + } +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Enumerations.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Enumerations.swift new file mode 100644 index 0000000..3308825 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Enumerations.swift @@ -0,0 +1,23 @@ +// +// FSE+Enumerations.swift +// FSHelpers +// +// Created by Sergey Nikolaev on 04.05.16. +// Copyright © 2016 FlatStack. All rights reserved. +// + +import Foundation + +// MARK: Raw Representable +public extension RawRepresentable { + public init?(_ rawValue: RawValue) { + self.init(rawValue: rawValue) + } +} + +public extension RawRepresentable where Self.RawValue == Int { + public static var allCases: [Self] { + var i = -1 + return Array( AnyGenerator{i += 1;return self.init(rawValue: i)}) + } +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+NSDate.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+NSDate.swift new file mode 100644 index 0000000..7bd6a71 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+NSDate.swift @@ -0,0 +1,192 @@ +// +// FSE+NSDate.swift +// SwiftHelpers +// +// Created by Kruperfone on 31.07.15. +// Copyright (c) 2015 FlatStack. All rights reserved. +// + +import Foundation + +public enum FSTimePeriod:NSTimeInterval { + case Second = 1 + case Minute = 60 + case Hour = 3600 + case Day = 86400 + case Week = 604800 +} + +// MARK: Time Period +private func FS_ConvertToInterval (value: Any, period: FSTimePeriod) -> NSTimeInterval { + guard let number = value as? NSNumber else {return 0} + let interval = NSTimeInterval(number.doubleValue) + return interval * period.rawValue +} + +public extension IntegerType { + public var fs_seconds : NSTimeInterval {return FS_ConvertToInterval(self, period: .Second)} + public var fs_minutes : NSTimeInterval {return FS_ConvertToInterval(self, period: .Minute)} + public var fs_hours : NSTimeInterval {return FS_ConvertToInterval(self, period: .Hour)} + public var fs_days : NSTimeInterval {return FS_ConvertToInterval(self, period: .Day)} + public var fs_weeks : NSTimeInterval {return FS_ConvertToInterval(self, period: .Week)} +} + +public extension FloatingPointType { + public var fs_seconds : NSTimeInterval {return FS_ConvertToInterval(self, period: .Second)} + public var fs_minutes : NSTimeInterval {return FS_ConvertToInterval(self, period: .Minute)} + public var fs_hours : NSTimeInterval {return FS_ConvertToInterval(self, period: .Hour)} + public var fs_days : NSTimeInterval {return FS_ConvertToInterval(self, period: .Day)} + public var fs_weeks : NSTimeInterval {return FS_ConvertToInterval(self, period: .Week)} +} + +public enum FSDatePeriod:Int { + case Unknow = -1 + case Today = 0 + case Tomorrow = 1 + case ThisWeek = 2 + + public init (date:NSDate) { + + if date.fs_isDateToday() { + self = .Today + return + } + + if date.fs_isTomorrow() { + self = .Tomorrow + return + } + + if date.fs_isThisWeek() { + self = .ThisWeek + return + } + + self = .Unknow + } +} + +public extension NSTimeInterval { + public var fs_timezone: NSTimeInterval { + let calendar = NSCalendar.currentCalendar() + let date = NSDate(timeIntervalSince1970: self) + + let timezoneOffset = NSTimeInterval(calendar.timeZone.secondsFromGMT) + let daylightOffset = calendar.timeZone.isDaylightSavingTimeForDate(date) ? calendar.timeZone.daylightSavingTimeOffset : 0 + + return timezoneOffset + daylightOffset + } +} + +public extension NSDate { + + public var fs_timezone: NSTimeInterval { + return self.timeIntervalSince1970.fs_timezone + } + + public func fs_isDateToday () -> Bool { + return NSDate().fs_midnightDate() == self.fs_midnightDate() + } + + public func fs_isTomorrow () -> Bool { + return self.fs_isEqualToDateIgnoringTime(NSDate().fs_tomorrow) + } + + public func fs_isThisWeek () -> Bool { + return self.fs_isSameWeekAsDate(NSDate()) + } + + public func fs_midnightDate () -> NSDate { + + let timestamp = self.timeIntervalSince1970 + self.fs_timezone + let midnightTimestamp = timestamp - timestamp%(FSTimePeriod.Day.rawValue) + + let result = NSDate(timeIntervalSince1970: midnightTimestamp - midnightTimestamp.fs_timezone) + return result + } + + public func fs_isSameWeekAsDate(date:NSDate) -> Bool + { + //Compare by date components is not working becouse it's start week from monday + + let calendar = NSCalendar.currentCalendar() + let timezone = NSTimeInterval(calendar.timeZone.secondsFromGMT) + let daylight = {(date: NSDate) -> NSTimeInterval in + return calendar.timeZone.isDaylightSavingTimeForDate(date) ? calendar.timeZone.daylightSavingTimeOffset : 0 + } + + //Getting interval without timezones + let greenwichInterval = self.timeIntervalSince1970 + timezone + daylight(self) + //Getting midnight +0 interval + let interval = greenwichInterval - greenwichInterval%(24*60*60) + + //Calculate number of week (since 1 January 1970 (Thursday)) + let numberOfWeeks: Int = { + + let wholeWeeks = Int(interval/FSTimePeriod.Week.rawValue) + + //Getting previous thursday interval + let thursday = NSTimeInterval(wholeWeeks)*FSTimePeriod.Week.rawValue + + //Calculate difference (in days) between current time and previous Thursday + let differenseDays = Int((interval - thursday)/FSTimePeriod.Day.rawValue) + //Calculate max difference in days. Based on calendar firstday index (1-7 where 1 is Sunday). Thursday index is 4. + let maxDifference = 1 + calendar.firstWeekday + + if differenseDays <= maxDifference { + //If differenct less or equal to max difference, than previous Thursday and current date is same week + return wholeWeeks + } else { + //If difference greather than max difference - interval in the next week + return wholeWeeks + 1 + } + }() + + //Get timestamp of current week Thursday + let weekInterval = NSTimeInterval(numberOfWeeks) * FSTimePeriod.Week.rawValue + //Calculate days which we must deduct to get first weekday + let correctionDays: NSTimeInterval = 5 - NSTimeInterval(calendar.firstWeekday) + //Convert correction days to time interval in seconds + let correctionInterval = correctionDays*FSTimePeriod.Day.rawValue + //Get first weekday timestamp (Sunday for USA and Monday for Russia for example) + let firstWeekday = weekInterval - correctionInterval + + //Get timestamp of the first weekday and last weekday + let minMidnightInterval = firstWeekday + let maxMidnightInterval = minMidnightInterval + FSTimePeriod.Week.rawValue - 1 + + //Calculate timezone modifiers + let minTimezoneOffset: NSTimeInterval = { + let date = NSDate(timeIntervalSince1970: minMidnightInterval) + return -(timezone + daylight(date)) + }() + let maxTimezoneOffset: NSTimeInterval = { + let date = NSDate(timeIntervalSince1970: maxMidnightInterval) + return -(timezone + daylight(date)) + }() + + //Add timezone to midnight intervals + let minInterval = UInt(minMidnightInterval + minTimezoneOffset) + let maxInterval = UInt(maxMidnightInterval + maxTimezoneOffset) + + //Get timestamp of comperation date + let dateInterval = UInt(date.timeIntervalSince1970) + + //Check if date is in week interval + return dateInterval >= minInterval && dateInterval <= maxInterval + } + + public func fs_isEqualToDateIgnoringTime (date:NSDate) -> Bool { + return self.fs_midnightDate() == date.fs_midnightDate() + } + + public func fs_dateByAddingDays (days: Int) -> NSDate { + let timeInterval:NSTimeInterval = self.timeIntervalSinceReferenceDate + FSTimePeriod.Day.rawValue * NSTimeInterval(days) + let newDate = NSDate(timeIntervalSinceReferenceDate: timeInterval) + return newDate + } + + public var fs_tomorrow: NSDate { + return self.fs_dateByAddingDays(1) + } +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+NSObject.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+NSObject.swift new file mode 100644 index 0000000..7f6a323 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+NSObject.swift @@ -0,0 +1,20 @@ +// +// FSE+NSObject.swift +// FSHelpers +// +// Created by Sergey Nikolaev on 04.05.16. +// Copyright © 2016 FlatStack. All rights reserved. +// + +import Foundation + +public extension NSObject { + + public class var fs_className: String { + return NSStringFromClass(self).componentsSeparatedByString(".").last! + } + + public var fs_className: String { + return self.dynamicType.fs_className + } +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Range.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Range.swift new file mode 100644 index 0000000..25d3686 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+Range.swift @@ -0,0 +1,24 @@ +// +// FSE+Range.swift +// FSHelpers +// +// Created by Sergey Nikolaev on 04.05.16. +// Copyright © 2016 FlatStack. All rights reserved. +// + +import Foundation + +public extension Range where Element: IntegerType { + + public func FSGenerateIndexPaths (section: Int) -> [NSIndexPath] { + guard let start = self.startIndex as? Int else {return []} + guard let end = self.endIndex as? Int else {return []} + + var indexPaths: [NSIndexPath] = [] + for i in start ..< end { + indexPaths.append(NSIndexPath(forRow: i, inSection: section)) + } + + return indexPaths + } +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+String.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+String.swift new file mode 100644 index 0000000..2b64062 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+String.swift @@ -0,0 +1,119 @@ +// +// FSExtensions+String.swift +// SwiftHelpers +// +// Created by Kruperfone on 31.07.15. +// Copyright (c) 2015 FlatStack. All rights reserved. +// + +import UIKit + +public extension String { + + public func fs_toDouble () -> Double? {return Double(self)} + public func fs_toInt () -> Int? {return Int(self)} + + public var fs_length: Int { + return self.characters.count + } + + public func fs_getRowHeight (font: UIFont) -> CGFloat { + return self.fs_getStringHeight(font, width: CGFloat.max) + } + + public func fs_getLineCount (font: UIFont) -> Int { + let rowHeight = self.fs_getRowHeight(font) + return Int(ceil(rowHeight / font.lineHeight)) + } + + public func fs_URLEncodedString () -> String? { + return self.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLHostAllowedCharacterSet()) + } + + public func fs_URLDecodedString () -> String? { + return self.stringByRemovingPercentEncoding + } + + public func fs_emailValidate () -> Bool { + let emailRegEx = "(?:[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])" + + let regExPredicate:NSPredicate = NSPredicate(format: "SELF MATCHES %@", emailRegEx) + + return regExPredicate.evaluateWithObject(self.lowercaseString) + } + + public func fs_getStringWidth (font: UIFont, height: CGFloat) -> CGFloat { + + let boundingSize:CGSize = CGSizeMake(CGFloat.max, height) + + let attributes = [NSFontAttributeName:font] + + let options : NSStringDrawingOptions = unsafeBitCast( + NSStringDrawingOptions.UsesLineFragmentOrigin.rawValue | + NSStringDrawingOptions.UsesFontLeading.rawValue, + NSStringDrawingOptions.self) + + let text = self as NSString + + let rect = text.boundingRectWithSize(boundingSize, options:options, attributes: attributes, context:nil) + + return ceil(rect.size.width) + } + + public func fs_getStringHeight (font: UIFont, width: CGFloat) -> CGFloat { + + let boundingSize:CGSize = CGSizeMake(width, CGFloat.max) + + let attributes = [NSFontAttributeName:font] + + let options : NSStringDrawingOptions = unsafeBitCast( + NSStringDrawingOptions.UsesLineFragmentOrigin.rawValue | + NSStringDrawingOptions.UsesFontLeading.rawValue, + NSStringDrawingOptions.self) + + let text = self as NSString + + let rect = text.boundingRectWithSize(boundingSize, options:options, attributes: attributes, context:nil) + + return ceil(rect.size.height) + } + + public func fs_getStringBetweenString (firstString: String, secondString: String) -> String? { + var string = self + + guard let lFirstRange = self.rangeOfString(firstString) else {return nil} + let strinBefore = self.substringToIndex(lFirstRange.endIndex) + string = self.stringByReplacingOccurrencesOfString(strinBefore, withString: "") + + guard let lSecondRange = string.rangeOfString(secondString) else {return nil} + let stringAfter = string.substringFromIndex(lSecondRange.startIndex) + string = string.stringByReplacingOccurrencesOfString(stringAfter, withString: "") + + return string + } + + public var fs_localizedString: String { + let localized = NSLocalizedString(self.fs_localizedStringFormat, comment: "") + return localized + } + + internal var fs_localizedStringFormat: String { + + let uppercase = self.uppercaseString + let formatted = uppercase.stringByReplacingOccurrencesOfString(" ", withString: "_", options: .LiteralSearch, range: nil) + + return formatted + } + + public subscript (i: Int) -> Character { + return self[self.startIndex.advancedBy(i)] + } + + public subscript (i: Int) -> String { + return String(self[i] as Character) + } + + public subscript (range: Range) -> String { + return self.substringWithRange(Range(self.startIndex.advancedBy(range.startIndex) ..< self.startIndex.advancedBy(range.endIndex))) + } +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UIAlertView.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UIAlertView.swift new file mode 100644 index 0000000..8a14153 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UIAlertView.swift @@ -0,0 +1,17 @@ +// +// FSE+UIAlertView.swift +// FSHelpers +// +// Created by Sergey Nikolaev on 05.01.16. +// Copyright © 2016 FlatStack. All rights reserved. +// + +import UIKit + +public extension UIAlertController { + + func fs_show () { + guard let root = UIApplication.sharedApplication().delegate?.window??.rootViewController else {return} + root.showViewController(self, sender: self) + } +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UIColor.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UIColor.swift new file mode 100644 index 0000000..12ebb25 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UIColor.swift @@ -0,0 +1,64 @@ +// +// FSE+UIColor.swift +// SwiftHelpers +// +// Created by Kruperfone on 31.07.15. +// Copyright (c) 2015 FlatStack. All rights reserved. +// + +import UIKit + +public extension UIColor { + + convenience public init? (fs_hexString: String, alpha: CGFloat = 1) { + + let regex: NSRegularExpression = try! NSRegularExpression(pattern: "[^a-fA-F|0-9]", options: []) + + let match: Int = regex.numberOfMatchesInString(fs_hexString, options: NSMatchingOptions.ReportCompletion, range: NSMakeRange(0, fs_hexString.characters.count)) + + if (match != 0) { + self.init() + return nil + } + + var cString: String = fs_hexString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet() as NSCharacterSet).uppercaseString + + if (cString.hasPrefix("#")) { + cString = cString.substringFromIndex(cString.startIndex.advancedBy(1)) + } + + if (cString.characters.count != 6) { + self.init() + return nil + } + + var rgbValue: UInt32 = 0 + NSScanner(string: cString).scanHexInt(&rgbValue) + + self.init( + red : CGFloat((rgbValue & 0xFF0000) >> 16) / 255, + green : CGFloat((rgbValue & 0x00FF00) >> 8) / 255, + blue : CGFloat((rgbValue & 0x0000FF) >> 0) / 255, + alpha : alpha + ) + } + + public func fs_hexString () -> String { + + // Special case, as white doesn't fall into the RGB color space + if (self == UIColor.whiteColor()) { + return "ffffff" + } + + var red : CGFloat = 0 + var blue : CGFloat = 0 + var green : CGFloat = 0 + var alpha : CGFloat = 0 + + self.getRed(&(red), green: &green, blue: &blue, alpha: &alpha) + + let hexString = NSString(format: "%02x%02x%02x", (Int(red*255)), (Int(green*255)), (Int(blue*255))) as String + + return hexString + } +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UIImage.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UIImage.swift new file mode 100644 index 0000000..95e7618 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UIImage.swift @@ -0,0 +1,174 @@ +// +// FSE+UIImage.swift +// Authorization-module +// +// Created by Kruperfone on 23.09.15. +// Copyright © 2015 Flatstack. All rights reserved. +// + +import UIKit + +public struct FSBitmapPixel { + public var r: UInt8 + public var g: UInt8 + public var b: UInt8 + public var a: UInt8 + + public init (value: UInt32) { + self.r = UInt8((value >> 0) & 0xFF) + self.g = UInt8((value >> 8) & 0xFF) + self.b = UInt8((value >> 16) & 0xFF) + self.a = UInt8((value >> 24) & 0xFF) + } + + public init (color: UIColor) { + var red: CGFloat = -1 + var green: CGFloat = -1 + var blue: CGFloat = -1 + var alpha: CGFloat = -1 + + color.getRed(&red, green: &green, blue: &blue, alpha: &alpha) + + self.r = UInt8(red * 255) + self.g = UInt8(green * 255) + self.b = UInt8(blue * 255) + self.a = UInt8(alpha * 255) + } + + public var value: UInt32 { + let red = UInt32(self.r) << 0 + let green = UInt32(self.g) << 8 + let blue = UInt32(self.b) << 16 + let alpha = UInt32(self.a) << 24 + + let result = red+green+blue+alpha + + return result + } + + public var color: UIColor { + return UIColor( + red: CGFloat(self.r)/255, + green: CGFloat(self.g)/255, + blue: CGFloat(self.b)/255, + alpha: CGFloat(self.a)/255) + } + + public var description: String { + return "\(self.r)|\(self.g)|\(self.b)|\(self.a)" + } + + public var brightness: UInt8 { + return UInt8((CGFloat(self.brightness32)/(255*3))*255) + } + + private var brightness32: UInt32 { + return UInt32(self.r) + UInt32(self.g) + UInt32(self.b) + } +} + +public class FSBitmap: NSObject { + + private var bytesPerRow: Int { + return Int(self.size.width) + } + + public var data: UnsafeMutablePointer + public var size: (width: Int, height: Int) + + public init (data: UnsafeMutablePointer, size: (width: Int, height: Int)) { + self.size = size + self.data = data + super.init() + } + + public init (size: (width: Int, height: Int)) { + self.size = size + self.data = UnsafeMutablePointer(calloc(self.size.width*self.size.height, sizeof(UInt32))) + super.init() + } + + convenience public init (size: CGSize) { + self.init(size: (width: Int(size.width), height: Int(size.height))) + } + + public func getCGImage () -> CGImage { + let width = self.size.width + let height = self.size.height + + let bitsPerComponent = 8 + let bytesPerPixel = 4 + let bitsPerPixel = bytesPerPixel * 8 + let bytesPerRow = width * bytesPerPixel + + let colorSpace = CGColorSpaceCreateDeviceRGB() + + let renderingIntent = CGColorRenderingIntent.RenderingIntentDefault + + let bitmapInfo = CGBitmapInfo(rawValue: CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue).rawValue | CGBitmapInfo.ByteOrder32Big.rawValue) + + let bitmapData = self.data + + let bufferLength = width * height * bytesPerPixel + let provider = CGDataProviderCreateWithData(nil, bitmapData, bufferLength, nil) + + let image = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpace, bitmapInfo, provider, nil, true, renderingIntent) + + return image! + } + + public func getUIImage (scale: CGFloat = UIScreen.mainScreen().scale, orientation: UIImageOrientation = UIImageOrientation.Up) -> UIImage { + let image = self.getCGImage() + return UIImage(CGImage: image, scale: scale, orientation: orientation) + } + + public func getPixel (x: Int, _ y: Int) -> FSBitmapPixel { + return FSBitmapPixel(value: self.data[self.index(x, y)]) + } + + public func setPixel (pixel: FSBitmapPixel, point: (x: Int, y: Int)) { + self.data[self.index(point.x, point.y)] = pixel.value + } + + private func index (x: Int, _ y: Int) -> Int { + return self.bytesPerRow*y + x + } +} + +public extension UIImage { + + public func fs_getBitmap () -> FSBitmap { + let imageRef: CGImageRef? = self.CGImage + + //Get image width, height + let pixelsWide = CGImageGetWidth(imageRef) + let pixelsHigh = CGImageGetHeight(imageRef) + + // Declare the number of bytes per row. Each pixel in the bitmap in this + // example is represented by 4 bytes; 8 bits each of red, green, blue, and alpha. + let bytesPerPixel = 4 + let bitsPerComponent = 8 + + let bitmapBytesPerRow = Int(pixelsWide) * bytesPerPixel + + // Use the generic RGB color space. + let colorSpace = CGColorSpaceCreateDeviceRGB() + + // Allocate memory for image data. This is the destination in memory + // where any drawing to the bitmap context will be rendered. + let bitmapData = UnsafeMutablePointer(calloc(pixelsWide*pixelsHigh, sizeof(UInt32))) + + let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue).rawValue | CGBitmapInfo.ByteOrder32Big.rawValue + + let context = CGBitmapContextCreate(bitmapData, pixelsWide, pixelsHigh, bitsPerComponent, bitmapBytesPerRow, colorSpace, bitmapInfo) + CGContextDrawImage(context, CGRectMake(0, 0, CGFloat(pixelsWide), CGFloat(pixelsHigh)), imageRef) + + return FSBitmap(data: bitmapData, size: (pixelsWide, pixelsHigh)) + } + + public var fs_base64: String { + let imageData = UIImagePNGRepresentation(self)! + let base64String = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) + return base64String + } +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UITableView.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UITableView.swift new file mode 100644 index 0000000..99c4828 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UITableView.swift @@ -0,0 +1,17 @@ +// +// FSExtensions+UITableView.swift +// SwiftHelpers +// +// Created by Kruperfone on 31.07.15. +// Copyright (c) 2015 FlatStack. All rights reserved. +// + +import UIKit + +public extension UITableView { + public func fs_deselectSelectedRow (animated:Bool) { + if ((self.indexPathForSelectedRow) != nil) { + self.deselectRowAtIndexPath(self.indexPathForSelectedRow!, animated: animated) + } + } +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UITextField.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UITextField.swift new file mode 100644 index 0000000..3b5e070 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UITextField.swift @@ -0,0 +1,15 @@ +// +// FSE+UITextField.swift +// FSHelpers +// +// Created by Sergey Nikolaev on 04.05.16. +// Copyright © 2016 FlatStack. All rights reserved. +// + +import UIKit + +extension UITextField { + var fs_isEmpty: Bool { + return self.text?.characters.count == 0 + } +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UITextView.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UITextView.swift new file mode 100644 index 0000000..e84b674 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UITextView.swift @@ -0,0 +1,148 @@ +// +// FSE+UITextField.swift +// SwiftHelpers +// +// Created by Kruperfone on 31.07.15. +// Copyright (c) 2015 FlatStack. All rights reserved. +// + +import UIKit + +public class FSTextView :UITextView { + + private(set) var placeholderLabel:UILabel = UILabel() + + @IBInspectable public var placeholderColor:UIColor { + set (value) { + self.placeholderLabel.textColor = value + } + get { + return self.placeholderLabel.textColor + } + } + + @IBInspectable public var placeholder: String? { + set (value) { + self.placeholderLabel.text = value + } + get { + return self.placeholderLabel.text + } + } + + override public var bounds: CGRect { + didSet { + self.placeholderLabel.preferredMaxLayoutWidth = self.frame.width + } + } + + deinit { + NSNotificationCenter.defaultCenter().removeObserver(self) + self.removeObserver(self, forKeyPath: "text") + } + + override init(frame: CGRect, textContainer: NSTextContainer?) { + super.init(frame: frame, textContainer: textContainer) + self.initialize() + } + + required public init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + self.initialize() + } + + private func initialize () { + self.setupInsets() + self.setupPlaceholder() + + self.addObserver(self, forKeyPath: "text", options: NSKeyValueObservingOptions.New, context: nil) + + NSNotificationCenter.defaultCenter().addObserver(self, selector: "textViewDidBeginEditing:", name: UITextViewTextDidBeginEditingNotification, object: self) + NSNotificationCenter.defaultCenter().addObserver(self, selector: "textViewDidChange:", name: UITextViewTextDidChangeNotification, object: self) + NSNotificationCenter.defaultCenter().addObserver(self, selector: "textViewDidEndEditing:", name: UITextViewTextDidEndEditingNotification, object: self) + } + + private func setupInsets () { + self.textContainerInset = UIEdgeInsetsMake(-4,0,0,0) + self.textContainer.lineFragmentPadding = 0 + } + + private func setupPlaceholder () { + self.placeholderLabel.preferredMaxLayoutWidth = self.frame.width + self.placeholderLabel.translatesAutoresizingMaskIntoConstraints = false + self.placeholderLabel.textColor = FSRGBA(198, 198, 204, 1) + self.placeholderLabel.userInteractionEnabled = false + self.placeholderLabel.numberOfLines = 0 + self.placeholderLabel.font = self.font + + self.addSubview(self.placeholderLabel) + + let insets = self.textContainerInset + let views = ["label": self.placeholderLabel] + let metrics = ["LEFT": insets.left, "TOP": insets.top, "RIGHT": insets.right, "BOTTOM": insets.bottom] + + var constraints:[NSLayoutConstraint] = [] + + constraints += NSLayoutConstraint.constraintsWithVisualFormat("H:|-LEFT-[label]-RIGHT-|", options: [], metrics: metrics, views: views) + constraints += NSLayoutConstraint.constraintsWithVisualFormat("V:|-TOP-[label]-(>=BOTTOM)-|", options: [], metrics: metrics, views: views) + for constraint in constraints { + constraint.priority = 751 + } + + self.addConstraints(constraints) + self.textViewDidChange(nil) + } + + override class public func fs_getTextHeight (forText text:String, width:CGFloat, font:UIFont) -> CGFloat { + let textView = FSTextView(frame: CGRectMake(0, 0, width, 0)) + textView.font = font + textView.text = text + return textView.fs_textHeight + } + + override public var fs_textHeight:CGFloat { + return super.fs_textHeight + } + + override public func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer) { + if keyPath == "text" || object as? NSObject == self { + self.textViewDidChange(nil) + } else { + super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context) + } + } + + //MARK: - Notifications + func textViewDidBeginEditing (sender: AnyObject?) { + + } + + func textViewDidChange (sender: AnyObject?) { + if self.text.characters.count == 0 { + self.placeholderLabel.hidden = false + } else { + self.placeholderLabel.hidden = true + } + } + + func textViewDidEndEditing (sender: AnyObject?) { + + } + +} + +extension UITextView { + + class public func fs_getTextHeight (forText text:String, width:CGFloat, font:UIFont) -> CGFloat { + + let textView = UITextView(frame: CGRectMake(0, 0, width, 0)) + textView.font = font + textView.text = text + return textView.fs_textHeight + } + + public var fs_textHeight:CGFloat { + let size = self.sizeThatFits(CGSizeMake(self.fs_width, CGFloat.max)) + return size.height + 1 + } +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UIView.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UIView.swift new file mode 100644 index 0000000..2eacd6b --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSExtensions/FSE+UIView.swift @@ -0,0 +1,153 @@ +// +// FSExtensions+UIView.swift +// SwiftHelpers +// +// Created by Kruperfone on 31.07.15. +// Copyright (c) 2015 FlatStack. All rights reserved. +// + +import UIKit + +public extension UIView { + + //MARK: - Set size + + var fs_size: CGSize { + set (value) {self.frame.size = value} + get {return self.frame.size} + } + + var fs_width:CGFloat { + set (value) {self.fs_size = CGSizeMake(value, frame.size.height)} + get {return self.frame.size.width} + } + + var fs_height:CGFloat { + set (value) {self.fs_size = CGSizeMake(frame.size.width, value)} + get {return self.frame.size.height} + } + + //MARK: - Set origin + + var fs_origin: CGPoint { + set (value) {self.frame.origin = value} + get {return self.frame.origin} + } + + var fs_x: CGFloat { + set (value) {self.fs_origin = CGPointMake(value, frame.origin.y)} + get {return self.frame.origin.x} + } + + var fs_y: CGFloat { + set (value) {self.fs_origin = CGPointMake(frame.origin.x, value)} + get {return self.frame.origin.y} + } + + //MARK: - Other + + func fs_findAndResignFirstResponder () -> Bool { + if self.isFirstResponder() { + self.resignFirstResponder() + return true + } + + for view in subviews { + if view.fs_findAndResignFirstResponder() { + return true + } + } + + return false + } + + var fs_allSubviews: [UIView] { + var arr:[UIView] = [self] + + for view in subviews { + arr += view.fs_allSubviews + } + + return arr + } +} + +//MARK: - Extensions for Storyboard +public extension UIView { + + @IBInspectable var fs_cornerRadius: CGFloat { + set(newValue) { self.layer.cornerRadius = newValue } + get { return self.layer.cornerRadius } + } + + @IBInspectable var fs_borderColor: UIColor { + set(newValue) { self.layer.borderColor = newValue.CGColor } + get { return UIColor(CGColor: self.layer.borderColor!) } + } + + @IBInspectable var fs_borderWidth: CGFloat { + set(newValue) { self.layer.borderWidth = newValue } + get { return self.layer.borderWidth } + } + + @IBInspectable var fs_shadowColor: UIColor { + set(newValue) { self.layer.shadowColor = newValue.CGColor } + get { return UIColor(CGColor: self.layer.shadowColor!) } + } + + @IBInspectable var fs_shadowOffset: CGSize { + set(newValue) { self.layer.shadowOffset = newValue } + get { return self.layer.shadowOffset} + } + + @IBInspectable var fs_shadowOpacity: Float { + set(newValue) { self.layer.shadowOpacity = newValue } + get { return self.layer.shadowOpacity} + } + + @IBInspectable var fs_shadowRadius: CGFloat { + set(newValue) { self.layer.shadowRadius = newValue } + get { return self.layer.shadowRadius} + } + + @IBInspectable var fs_masksToBounds: Bool { + set(newValue) { self.layer.masksToBounds = newValue } + get { return self.layer.masksToBounds } + } +} + +//MARK: - Collection View Animated Reload +public extension UICollectionView { + + /** + - parameter options: UIViewAnimationOptionTransition's only available + */ + func fs_reloadDataWithAnimation(duration: NSTimeInterval = 0.2, options: UIViewAnimationOptions, completion: ((Bool) -> Void)?) { + + UIView.transitionWithView(self, + duration: duration, + options: options, + animations: { [weak self] () -> Void in + self?.reloadData() + }, + completion: completion) + } +} + +//MARK: - Table View Animated Reload +public extension UITableView { + + /** + - parameter options: UIViewAnimationOptionTransition's only available + */ + func fs_reloadDataWithAnimation(duration: NSTimeInterval = 0.2, options: UIViewAnimationOptions, completion: ((Bool) -> Void)?) { + + UIView.transitionWithView(self, + duration: duration, + options: options, + animations: { [weak self] () -> Void in + self?.reloadData() + }, + completion: completion) + } +} \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSHelpers.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSHelpers.swift new file mode 100755 index 0000000..8b0c49b --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSHelpers.swift @@ -0,0 +1,205 @@ +// +// FSHelpers.swift +// Authorization-module +// +// Created by Kruperfone on 08.12.14. +// Copyright (c) 2014 Flatstack. All rights reserved. +// + + +import UIKit + +//MARK: - Application Directory + +public func FSApplicationDirectoryPath (directoryToSearch:NSSearchPathDirectory) -> String { + return NSSearchPathForDirectoriesInDomains(directoryToSearch, NSSearchPathDomainMask.UserDomainMask, true).first! +} + +public func FSApplicationDirectoryURL (directoryToSearch:NSSearchPathDirectory) -> NSURL { + return NSURL(string: FSApplicationDirectoryPath(directoryToSearch))! +} + +public func FSPrintDocumentsPath () { + print("\n*******************************************\nDOCUMENTS\n\(NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0])\n*******************************************\n") +} + +//MARK: - Interface + +public var FSScreenBounds: CGRect { + return UIScreen.mainScreen().bounds +} + +public var FSIsIPad: Bool { + return UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad +} + +public var FSIsIPhone: Bool { + return UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Phone +} + +public var FSScaleFactor: CGFloat { + return UIScreen.mainScreen().scale +} + +public var FSIsRetina: Bool { + return FSScaleFactor == 2 +} + +public var FSDeviceOrientation: UIDeviceOrientation { + return UIDevice.currentDevice().orientation +} + +//MARK: - App Version +public let FSAppVersion = NSBundle.mainBundle().infoDictionary?.fs_objectForKey("CFBundleShortVersionString", orDefault: "0") as! String +public let FSBuildNumber = NSBundle.mainBundle().infoDictionary?.fs_objectForKey("CFBundleVersion", orDefault: "0") as! String + +//MARK: - System Version + +public func FSSystemVersionEqualTo(version: String) -> Bool { + return UIDevice.currentDevice().systemVersion.compare(version, + options: NSStringCompareOptions.NumericSearch) == NSComparisonResult.OrderedSame +} + +public func FSSystemVersionGreatherThan(version: String) -> Bool { + return UIDevice.currentDevice().systemVersion.compare(version, + options: NSStringCompareOptions.NumericSearch) == NSComparisonResult.OrderedDescending +} + +public func FSSystemVersionGreatherThanOrEqualTo(version: String) -> Bool { + return UIDevice.currentDevice().systemVersion.compare(version, + options: NSStringCompareOptions.NumericSearch) != NSComparisonResult.OrderedAscending +} + +public func FSSystemVersionLessThan(version: String) -> Bool { + return UIDevice.currentDevice().systemVersion.compare(version, + options: NSStringCompareOptions.NumericSearch) == NSComparisonResult.OrderedAscending +} + +public func FSSystemVersionLessThanOrEqualTo(version: String) -> Bool { + return UIDevice.currentDevice().systemVersion.compare(version, + options: NSStringCompareOptions.NumericSearch) != NSComparisonResult.OrderedDescending +} + +//MARK: - Images and colors + +public func FSRGBA (r:CGFloat, _ g:CGFloat, _ b:CGFloat, _ a:CGFloat) -> UIColor { + return UIColor(red: r/255, green: g/255, blue: b/255, alpha: a) +} + +public func FSImageFromColor (color:UIColor) -> UIImage { + + let rect:CGRect = CGRectMake(0, 0, 1, 1) + UIGraphicsBeginImageContext(rect.size) + let context:CGContextRef = UIGraphicsGetCurrentContext()! + + CGContextSetFillColorWithColor(context, color.CGColor) + CGContextFillRect(context, rect) + + let image:UIImage = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + + return image +} + +public func FSRandomColor () -> UIColor { + let red = CGFloat(arc4random_uniform(255))/255.0 + let green = CGFloat(arc4random_uniform(255))/255.0 + let blue = CGFloat(arc4random_uniform(255))/255.0 + + return UIColor(red: red, green: green, blue: blue, alpha: 1) +} + +//MARK: - GCD + +public func FSDispatch_after_short (delay:Double, block:dispatch_block_t) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), block); +} + +//MARK: - iOS settings + +// App settigns +public func APP_SETTINGS_URL() -> NSURL? { + return NSURL(string: UIApplicationOpenSettingsURLString) +} + +public func CAN_OPEN_SETTINGS_APP() -> Bool { + if let url = APP_SETTINGS_URL() { + return UIApplication.sharedApplication().canOpenURL(url) + } + + return false +} + +public func OPEN_SETTINGS_APP() -> Bool { + if let url = APP_SETTINGS_URL() where CAN_OPEN_SETTINGS_APP() { + return UIApplication.sharedApplication().openURL(url) + } + + return false +} + +// WIFI settings +public func WIFI_SETTINGS_URL() -> NSURL? { + return NSURL(string: "prefs:root=WIFI") +} + +public func CAN_OPEN_WIFI_SETTINGS() -> Bool { + if let url = WIFI_SETTINGS_URL() { + return UIApplication.sharedApplication().canOpenURL(url) + } + + return false +} + +public func OPEN_WIFI_SETTINGS() -> Bool { + if let url = WIFI_SETTINGS_URL() where CAN_OPEN_WIFI_SETTINGS() { + return UIApplication.sharedApplication().openURL(url) + } + + return false +} + +//MARK: - Other + +public var FSGregorianCalendar: NSCalendar {return NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!} + +/** + Try to make call with input number + + - parameter number: phone number (string) + + - returns: 'true' if can open URL and 'false' if not or if can't initialize URL from input number + */ +public func FSMakePhoneCall (number: String) -> Bool { + let callURLString = "tel://\(number)" + guard let URL = NSURL(string: callURLString) else {return false} + + guard UIApplication.sharedApplication().canOpenURL(URL) else { + return false + } + + UIApplication.sharedApplication().openURL(URL) + return true +} + +public func FSGetRandomBool() -> Bool { + return arc4random()%2 == 0 +} + +public func FSGetInfoDictionaryValue (key: String) -> AnyObject? { + return NSBundle.mainBundle().infoDictionary?[key] +} + +public func FSDLog(message: String, function: String = #function, file: String = #file, line: Int = #line) { + #if DEBUG + print("Message \"\(message)\" (File: \(file), Function: \(function), Line: \(line))") + #endif +} + +public func FSLog(format: String, _ args: CVarArgType...) { + #if DEBUG + withVaList(args) { (pointer: CVaListPointer) -> Void in + NSLogv(format, pointer) + } + #endif +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSHelpersAutolayout.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSHelpersAutolayout.swift new file mode 100644 index 0000000..d420e79 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSHelpersAutolayout.swift @@ -0,0 +1,75 @@ +// +// FSHelpersAutolayout.swift +// FSHelpers +// +// Created by Sergey Nikolaev on 04.01.16. +// Copyright © 2016 FlatStack. All rights reserved. +// + +import UIKit + +public func FSVisualConstraints ( + format : String, + options : NSLayoutFormatOptions = .DirectionLeadingToTrailing, + metrics : [String : AnyObject]? = nil, + views : [String : AnyObject]) -> [NSLayoutConstraint] +{ + let constraints = NSLayoutConstraint.constraintsWithVisualFormat(format, options: options, metrics: metrics, views: views) + return constraints +} + +public func FSEdgesConstraints (view: UIView, edges: UIEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0)) -> [NSLayoutConstraint] { + + let dict = ["view": view] + let metrics = ["LEFT": edges.left, "TOP": edges.top, "RIGHT": edges.right, "BOTTOM": edges.bottom] + + var constraints:[NSLayoutConstraint] = [] + + constraints += FSVisualConstraints("H:|-LEFT-[view]-RIGHT-|", options: [], metrics: metrics, views: dict) + constraints += FSVisualConstraints("V:|-TOP-[view]-BOTTOM-|", options: [], metrics: metrics, views: dict) + + return constraints +} + +public func FSSizeConstraints (view:UIView, size:CGSize) -> [NSLayoutConstraint] { + let dict = ["view":view] + let metrics = ["WIDTH":size.width, "HEIGHT":size.height] + + var constraints:[NSLayoutConstraint] = [] + + constraints += FSVisualConstraints("H:[view(WIDTH)]", options: [], metrics: metrics, views: dict) + constraints += FSVisualConstraints("V:[view(HEIGHT)]", options: [], metrics: metrics, views: dict) + + return constraints +} + +public func FSCenterConstraints (view: UIView, centerOffset: CGPoint = CGPointZero) -> [NSLayoutConstraint] { + return [ + NSLayoutConstraint(item: view, attribute: .CenterX, relatedBy: .Equal, toItem: view.superview!, attribute: .CenterX, multiplier: 1, constant: centerOffset.x), + NSLayoutConstraint(item: view, attribute: .CenterY, relatedBy: .Equal, toItem: view.superview!, attribute: .CenterY, multiplier: 1, constant: centerOffset.y) + ] +} + +public func FSCenterYConstraint (view: UIView, offset: CGFloat = 0) -> NSLayoutConstraint { + return NSLayoutConstraint(item: view, attribute: .CenterY, relatedBy: .Equal, toItem: view.superview, attribute: .CenterY, multiplier: 1, constant: offset) +} + +public func FSCenterXConstraint (view: UIView, offset: CGFloat = 0) -> NSLayoutConstraint { + return NSLayoutConstraint(item: view, attribute: .CenterX, relatedBy: .Equal, toItem: view.superview, attribute: .CenterX, multiplier: 1, constant: offset) +} + +public func FSProportionalWidthConstraint (firstView: UIView, secondView: UIView, multipler: CGFloat, constant: CGFloat) -> NSLayoutConstraint { + return NSLayoutConstraint(item: firstView, attribute: .Width, relatedBy: .Equal, toItem: secondView, attribute: .Width, multiplier: multipler, constant: constant) +} + +public func FSProportionalHeightConstraint (firstView: UIView, secondView: UIView, multipler: CGFloat, constant: CGFloat) -> NSLayoutConstraint { + return NSLayoutConstraint(item: firstView, attribute: .Height, relatedBy: .Equal, toItem: secondView, attribute: .Height, multiplier: multipler, constant: constant) +} + +public func FSProportionalHeightToWidthConstraint (firstView: UIView, secondView: UIView, multipler: CGFloat, constant: CGFloat) -> NSLayoutConstraint { + return NSLayoutConstraint(item: firstView, attribute: .Height, relatedBy: .Equal, toItem: secondView, attribute: .Width, multiplier: multipler, constant: constant) +} + +public func FSProportionalWidthToHeightConstraint (firstView: UIView, secondView: UIView, multipler: CGFloat, constant: CGFloat) -> NSLayoutConstraint { + return NSLayoutConstraint(item: firstView, attribute: .Width, relatedBy: .Equal, toItem: secondView, attribute: .Height, multiplier: multipler, constant: constant) +} diff --git a/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSProtocols/FSKeyboardScrollSupport.swift b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSProtocols/FSKeyboardScrollSupport.swift new file mode 100644 index 0000000..ecc3b28 --- /dev/null +++ b/Autorization:Registration Example/Pods/FSHelpers+Swift/Swift/Helpers/FSProtocols/FSKeyboardScrollSupport.swift @@ -0,0 +1,106 @@ +// +// FSKeyboardScrollSupport.swift +// FSHelpers +// +// Created by Kruperfone on 09.11.15. +// Copyright © 2015 Flatstack. All rights reserved. +// + +import UIKit + +/* + You must did not forget to call KeyboardScrollSupportKeyboardWillHide: method in your `deinit` +*/ + +public protocol FSKeyboardScrollSupport { + /// Scroll view with content that can be under keyboard + var fs_keyboardScrollSupportScrollView : UIScrollView? {get} + /// Active editable view on the ScrollView + var fs_keyboardScrollSupportActiveField : UIView? {get} + + func fs_keyboardScrollSupportRegisterForNotifications () + func fs_keyboardScrollSupportRemoveNotifications () + + func fs_keyboardScrollSupportKeyboardWillShow (notif: NSNotification) + func fs_keyboardScrollSupportKeyboardWillHide (notif: NSNotification) +} + +public extension FSKeyboardScrollSupport { + var fs_keyboardScrollSupportActiveField : UIView? { + return nil + } +} + +public extension FSKeyboardScrollSupport where Self: AnyObject { + + func fs_keyboardScrollSupportRegisterForNotifications () { + + let center = NSNotificationCenter.defaultCenter() + + center.addObserver(self, selector: "fs_keyboardScrollSupportKeyboardWillShow:", name:UIKeyboardWillShowNotification, object: nil) + center.addObserver(self, selector: "fs_keyboardScrollSupportKeyboardWillHide:", name:UIKeyboardWillHideNotification, object: nil) + } + + func fs_keyboardScrollSupportRemoveNotifications () { + + let center = NSNotificationCenter.defaultCenter() + + center.removeObserver(self, name: UIKeyboardWillShowNotification, object: nil) + center.removeObserver(self, name: UIKeyboardWillHideNotification, object: nil) + } +} + +public extension FSKeyboardScrollSupport where Self: UIViewController { + + func fs_keyboardScrollSupportKeyboardWillShow (notif: NSNotification) { + + guard let scrollView = self.fs_keyboardScrollSupportScrollView else {return} + + guard let info = notif.userInfo else {return} + guard let value = info[UIKeyboardFrameEndUserInfoKey] as? NSValue else {return} + + let keyboardFrame = value.CGRectValue() + let contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardFrame.height, 0.0) + + scrollView.contentInset = contentInsets + scrollView.scrollIndicatorInsets = contentInsets + + // If active text field is hidden by keyboard, scroll it so it's visible + // Your app might not need or want this behavior. + guard let activeField = self.fs_keyboardScrollSupportActiveField else {return} + + // By default activeField must be subview of the scrollView + guard let superview = activeField.superview else {return} + guard superview == scrollView else {return} + + var viewRect = self.view.frame + viewRect.size.height -= keyboardFrame.height + + let convertedRect = superview.convertRect(activeField.frame, toView: self.view) + + if !CGRectContainsPoint(viewRect, convertedRect.origin) { + scrollView.scrollRectToVisible(activeField.frame, animated: true) + } + } + + func fs_keyboardScrollSupportKeyboardWillHide (notif: NSNotification) { + + guard let scrollView = self.fs_keyboardScrollSupportScrollView else {return} + + let contentInsets = UIEdgeInsetsZero + scrollView.contentInset = contentInsets + scrollView.scrollIndicatorInsets = contentInsets + } +} + +public extension FSKeyboardScrollSupport where Self: UITableViewController { + var fs_keyboardScrollSupportScrollView: UIScrollView? { + return self.tableView + } +} + +public extension FSKeyboardScrollSupport where Self: UICollectionViewController { + var fs_keyboardScrollSupportScrollView: UIScrollView? { + return self.collectionView + } +} diff --git a/Autorization:Registration Example/Pods/Fabric/Fabric.framework/README b/Autorization:Registration Example/Pods/Fabric/Fabric.framework/README new file mode 100644 index 0000000..3b1fbe2 --- /dev/null +++ b/Autorization:Registration Example/Pods/Fabric/Fabric.framework/README @@ -0,0 +1 @@ +We've now combined all our supported platforms into a single podspec. As a result, we moved our run script to a new location for Cocoapods projects: ${PODS_ROOT}/Fabric/run. To avoid breaking builds that reference the old location of the run script, we've placed this dummy script that calls to the correct location, while providing a helpful warning in Xcode if it is invoked. This bridge for backwards compatibility will be removed in a future release, so please heed the warning! diff --git a/Autorization:Registration Example/Pods/Fabric/Fabric.framework/run b/Autorization:Registration Example/Pods/Fabric/Fabric.framework/run new file mode 100755 index 0000000..b9edd17 --- /dev/null +++ b/Autorization:Registration Example/Pods/Fabric/Fabric.framework/run @@ -0,0 +1,6 @@ +if [[ -z $PODS_ROOT ]]; then + echo "error: The run binary delivered by cocoapods is in a new location, under '$"{"PODS_ROOT"}"/Fabric/run'. This script was put in place for backwards compatibility, but it relies on PODS_ROOT, which does not have a value in your current setup. Please update the path to the run binary to fix this issue." +else + echo "warning: The run script is now located at '$"{"PODS_ROOT"}"/Fabric/run'. To remove this warning, update your Run Script Build Phase to point to this new location." + sh "${PODS_ROOT}/Fabric/run" "$@" +fi diff --git a/Autorization:Registration Example/Pods/Fabric/README.md b/Autorization:Registration Example/Pods/Fabric/README.md new file mode 100644 index 0000000..14852f7 --- /dev/null +++ b/Autorization:Registration Example/Pods/Fabric/README.md @@ -0,0 +1,43 @@ +![Fabric Header](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-header.png) + +# Fabric + +## Overview + +[Fabric](https://www.fabric.io) provides developers with the tools they need to build the best apps. Developed and maintained by Twitter and the team that built Crashlytics, Fabric provides an easy way to manage all your SDKs so that you’ll never have to worry about tedious configurations or juggling different accounts. We let you get right into coding and building the next big app. + +For a full list of SDK provided through Fabric visit https://fabric.io/kits + +## Setup + +The Fabric Pod is a dependency for all Fabric SDKs and is included when installing any Fabric related Pods. General setup instructions are shown below; however, these vary depending on the selected SDK. + +1. Visit https://fabric.io/sign_up to create your Fabric account and to download Fabric.app + +1. Open Fabric.app, login and select an SDK to install. + + ![Fabric Plugin](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-plugin.png) + +1. The Fabric app automatically detects when a project uses CocoaPods and gives you the option to install via the Podfile or Xcode. + + ![Fabric Installation Options](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-pod-installation-option.png) + +1. Select the Podfile option and follow the installation instructions to update your Podfile. Note: the example below is for the Crashlytics SDK. The instructions will vary based on the selected SDK. + + ![Fabric Podfile Instructions](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-podfile-instructions.png) + +1. Add a Run Script Build Phase and build your app. + + ![Fabric Run Script Build Phase](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-rsbp.png) + +1. Initialize the SDK by inserting code outlined in the Fabric.app. + +1. Run your app to finish the installation. + +## Resources + +* [Documentation](https://docs.fabric.io/) +* [Forums](https://twittercommunity.com/c/fabric) +* [Website](https://www.fabric.io) +* Follow us on Twitter: [@fabric](https://twitter.com/fabric) +* Follow us on Periscope: [Fabric](https://periscope.tv/fabric) and [TwitterDev](https://periscope.tv/twitterdev) diff --git a/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Fabric b/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Fabric new file mode 100755 index 0000000..85b2922 Binary files /dev/null and b/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Fabric differ diff --git a/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Headers/FABAttributes.h b/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Headers/FABAttributes.h new file mode 100644 index 0000000..e35f9ce --- /dev/null +++ b/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Headers/FABAttributes.h @@ -0,0 +1,60 @@ +// +// FABAttributes.h +// Fabric +// +// Copyright (C) 2015 Twitter, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#pragma once + +#define FAB_UNAVAILABLE(x) __attribute__((unavailable(x))) + +#if __has_feature(nullability) + #define fab_nullable nullable + #define fab_nonnull nonnull + #define fab_null_unspecified null_unspecified + #define fab_null_resettable null_resettable + #define __fab_nullable __nullable + #define __fab_nonnull __nonnull + #define __fab_null_unspecified __null_unspecified +#else + #define fab_nullable + #define fab_nonnull + #define fab_null_unspecified + #define fab_null_resettable + #define __fab_nullable + #define __fab_nonnull + #define __fab_null_unspecified +#endif + +#ifndef NS_ASSUME_NONNULL_BEGIN + #define NS_ASSUME_NONNULL_BEGIN +#endif + +#ifndef NS_ASSUME_NONNULL_END + #define NS_ASSUME_NONNULL_END +#endif + + +/** + * The following macros are defined here to provide + * backwards compatability. If you are still using + * them you should migrate to the new versions that + * are defined above. + */ +#define FAB_NONNULL __fab_nonnull +#define FAB_NULLABLE __fab_nullable +#define FAB_START_NONNULL NS_ASSUME_NONNULL_BEGIN +#define FAB_END_NONNULL NS_ASSUME_NONNULL_END diff --git a/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Headers/Fabric.h b/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Headers/Fabric.h new file mode 100644 index 0000000..23955fd --- /dev/null +++ b/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Headers/Fabric.h @@ -0,0 +1,77 @@ +// +// Fabric.h +// Fabric +// +// Copyright (C) 2015 Twitter, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import +#import "FABAttributes.h" + +NS_ASSUME_NONNULL_BEGIN + +#if TARGET_OS_IPHONE +#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 + #error "Fabric's minimum iOS version is 6.0" +#endif +#else +#if __MAC_OS_X_VERSION_MIN_REQUIRED < 1070 + #error "Fabric's minimum OS X version is 10.7" +#endif +#endif + +/** + * Fabric Base. Coordinates configuration and starts all provided kits. + */ +@interface Fabric : NSObject + +/** + * Initialize Fabric and all provided kits. Call this method within your App Delegate's `application:didFinishLaunchingWithOptions:` and provide the kits you wish to use. + * + * For example, in Objective-C: + * + * `[Fabric with:@[[Crashlytics class], [Twitter class], [Digits class], [MoPub class]]];` + * + * Swift: + * + * `Fabric.with([Crashlytics.self(), Twitter.self(), Digits.self(), MoPub.self()])` + * + * Only the first call to this method is honored. Subsequent calls are no-ops. + * + * @param kitClasses An array of kit Class objects + * + * @return Returns the shared Fabric instance. In most cases this can be ignored. + */ ++ (instancetype)with:(NSArray *)kitClasses; + +/** + * Returns the Fabric singleton object. + */ ++ (instancetype)sharedSDK; + +/** + * This BOOL enables or disables debug logging, such as kit version information. The default value is NO. + */ +@property (nonatomic, assign) BOOL debug; + +/** + * Unavailable. Use `+sharedSDK` to retrieve the shared Fabric instance. + */ +- (id)init FAB_UNAVAILABLE("Use +sharedSDK to retrieve the shared Fabric instance."); + +@end + +NS_ASSUME_NONNULL_END + diff --git a/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Info.plist b/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Info.plist new file mode 100644 index 0000000..298e1dd --- /dev/null +++ b/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Info.plist @@ -0,0 +1,57 @@ + + + + + BuildMachineOSBuild + 14F1021 + CFBundleDevelopmentRegion + en + CFBundleExecutable + Fabric + CFBundleIdentifier + io.fabric.sdk.ios + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Fabric + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.6.7 + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + iPhoneOS + + CFBundleVersion + 53 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 13C75 + DTPlatformName + iphoneos + DTPlatformVersion + 9.2 + DTSDKBuild + 13C75 + DTSDKName + iphoneos9.2 + DTXcode + 0721 + DTXcodeBuild + 7C1002 + MinimumOSVersion + 6.0 + NSHumanReadableCopyright + Copyright © 2015 Twitter. All rights reserved. + UIDeviceFamily + + 3 + 2 + 1 + 4 + + + diff --git a/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Modules/module.modulemap b/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Modules/module.modulemap new file mode 100644 index 0000000..2a31223 --- /dev/null +++ b/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module Fabric { + umbrella header "Fabric.h" + + export * + module * { export * } +} \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/run b/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/run new file mode 100755 index 0000000..9058ea6 --- /dev/null +++ b/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/run @@ -0,0 +1,28 @@ +#!/bin/sh + +# run +# +# Copyright (c) 2015 Crashlytics. All rights reserved. + +# Figure out where we're being called from +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +# Quote path in case of spaces or special chars +DIR="\"${DIR}" + +PATH_SEP="/" +VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" +UPLOAD_COMMAND="uploadDSYM\" $@ run-script" + +# Ensure params are as expected, run in sync mode to validate +eval $DIR$PATH_SEP$VALIDATE_COMMAND +return_code=$? + +if [[ $return_code != 0 ]]; then + exit $return_code +fi + +# Verification passed, upload dSYM in background to prevent Xcode from waiting +# Note: Validation is performed again before upload. +# Output can still be found in Console.app +eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & diff --git a/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/uploadDSYM b/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/uploadDSYM new file mode 100755 index 0000000..5c5acb0 Binary files /dev/null and b/Autorization:Registration Example/Pods/Fabric/iOS/Fabric.framework/uploadDSYM differ diff --git a/Autorization:Registration Example/Pods/Fabric/run b/Autorization:Registration Example/Pods/Fabric/run new file mode 100755 index 0000000..9058ea6 --- /dev/null +++ b/Autorization:Registration Example/Pods/Fabric/run @@ -0,0 +1,28 @@ +#!/bin/sh + +# run +# +# Copyright (c) 2015 Crashlytics. All rights reserved. + +# Figure out where we're being called from +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +# Quote path in case of spaces or special chars +DIR="\"${DIR}" + +PATH_SEP="/" +VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" +UPLOAD_COMMAND="uploadDSYM\" $@ run-script" + +# Ensure params are as expected, run in sync mode to validate +eval $DIR$PATH_SEP$VALIDATE_COMMAND +return_code=$? + +if [[ $return_code != 0 ]]; then + exit $return_code +fi + +# Verification passed, upload dSYM in background to prevent Xcode from waiting +# Note: Validation is performed again before upload. +# Output can still be found in Console.app +eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & diff --git a/Autorization:Registration Example/Pods/Fabric/upload-symbols b/Autorization:Registration Example/Pods/Fabric/upload-symbols new file mode 100755 index 0000000..3340f0f Binary files /dev/null and b/Autorization:Registration Example/Pods/Fabric/upload-symbols differ diff --git a/Autorization:Registration Example/Pods/Fabric/uploadDSYM b/Autorization:Registration Example/Pods/Fabric/uploadDSYM new file mode 100755 index 0000000..010d87a Binary files /dev/null and b/Autorization:Registration Example/Pods/Fabric/uploadDSYM differ diff --git a/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/Core.h b/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/Core.h new file mode 100755 index 0000000..a6a1610 --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/Core.h @@ -0,0 +1,7 @@ +#import +#import + +#import "GGLConfiguration.h" +#import "GGLContext.h" +#import "GGLErrorCode.h" +#import "GMRConfiguration.h" diff --git a/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/GGLConfiguration.h b/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/GGLConfiguration.h new file mode 100755 index 0000000..bacd31a --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/GGLConfiguration.h @@ -0,0 +1,90 @@ +#import + +/** + * This class provides configuration fields of Google APIs. + */ +@interface GGLConfiguration : NSObject + +/** + * A secret iOS API key used for authenticating requests from your app, e.g. + * @"AIzaSyDdVgKwhZl0sTTTLZ7iTmt1r3N2cJLnaDk", used to identify your app to Google servers. + */ +@property(nonatomic, readonly, copy) NSString *apiKey; + +/** + * The OAuth2 client ID for iOS application used to authenticate Google users, for example + * @"12345.apps.googleusercontent.com", used for signing in with Google. + */ +@property(nonatomic, readonly, copy) NSString *clientID; + +/** + * The tracking ID for Google Analytics, e.g. @"UA-12345678-1", used to configure Google Analytics. + */ +@property(nonatomic, readonly, copy) NSString *trackingID; + +/** + * Mobile Ads' Ad Unit ID for a banner view, for example @"ca-app-pub-1234567890", used for + * displaying ads view. + */ +@property(nonatomic, readonly, copy) NSString *bannerAdUnitID; + +/** + * Mobile Ads' Ad Unit ID for an interstitial view, for example @"ca-app-pub-1234567890", used for + * displaying ads view. + */ +@property(nonatomic, readonly, copy) NSString *interstitialAdUnitID; + +/** + * The Project Number from the Google Developer's console, for example @"012345678901", used to + * configure Google Cloud Messaging. + */ +@property(nonatomic, readonly, copy) NSString *gcmSenderID; + +/** + * The Android client ID used in Google AppInvite when an iOS app has its Android version, for + * example @"12345.apps.googleusercontent.com". + */ +@property(nonatomic, readonly, copy) NSString *androidClientID; + +/** + * The Google App ID that is used to uniquely identify an instance of an app. + */ +@property(nonatomic, readonly, copy) NSString *googleAppID; + +/** + * Whether or not Ads was enabled in the developer console. + */ +@property(nonatomic, readonly) BOOL isAdsEnabled; + +/** + * Whether or not Analytics was enabled in the developer console. + */ +@property(nonatomic, readonly) BOOL isAnalyticsEnabled; + +/** + * Whether or not AppInvite was enabled in the developer console. + */ +@property(nonatomic, readonly) BOOL isAppInviteEnabled; + +/** + * Whether or not GCM was enabled in the developer console. + */ +@property(nonatomic, readonly) BOOL isGCMEnabled; + +/** + * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in + * GoogleService-Info.plist. + */ +@property(nonatomic, readonly) BOOL isMeasurementEnabled; + +/** + * Whether or not SignIn was enabled in the developer console. + */ +@property(nonatomic, readonly) BOOL isSignInEnabled; + +/** + * The version ID of the client library, e.g. @"1100000". + */ +@property(nonatomic, readonly, copy) NSString *libraryVersionID; + +@end diff --git a/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/GGLContext.h b/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/GGLContext.h new file mode 100755 index 0000000..503f980 --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/GGLContext.h @@ -0,0 +1,59 @@ +#import + +@class GGLConfiguration; + +/** + * Main entry point for Google API core configuration. Google services such as AdMob, Analytics, + * AppInvite, CloudMessaging, SignIn, etc can be configured via this class and its categories. + * See GGLContext+ServiceName for details on the individual APIs. Generally, you will import those + * files directly rather than import the GGLContext.h header itself. + * + * Once the appropriate categories are imported, you can configure all services via the + * |configureWithError:| method, for example: + * + *
+ * NSError* configureError;
+ * [[GGLContext sharedInstance] configureWithError: &configureError];
+ * if (configureError != nil) {
+ *   NSLog(@"Error configuring the Google context: %@", configureError);
+ * }
+ * 
+ * + * The method |configureWithError:| will read from the file GoogleServices-Info.plist bundled with + * your app target for the keys to configure each individual API. To generate your + * GoogleServices-Info.plist, please go to https://developers.google.com/mobile/add + * + * @see GGLContext (AdMob) + * @see GGLContext (Analytics) + * @see GGLContext (AppInvite) + * @see GGLContext (CloudMessaging) + * @see GGLContext (SignIn) + */ +@interface GGLContext : NSObject + +/** + * The configuration details for various Google APIs. + */ +@property(nonatomic, readonly, strong) GGLConfiguration *configuration; + +/** + * Get the shared instance of the GGLContext. + * @return the shared instance + */ ++ (instancetype)sharedInstance; + +/** + * Configures all the Google services integrated. This method should be called after the app is + * launched and before using other Google services. The services will be available in categories + * that extend this class, such as GGLContext+AdMob. + * + * @param error Pointer to an NSError that can be used an out param to report the status of this + * operation. After the call the error object will be nil if the operation is succesful, + * otherwise contains an appropriate NSError value. Parameter cannot be passed as nil + * + * @warning error must not be nil. + * + */ +- (void)configureWithError:(NSError **)error; + +@end diff --git a/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/GGLErrorCode.h b/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/GGLErrorCode.h new file mode 100755 index 0000000..c9ccd56 --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/GGLErrorCode.h @@ -0,0 +1,66 @@ +/** Error codes in Greenhouse error domain. */ +typedef enum { + /** + * Operation succeeded. + */ + kGGLErrorCodeSucceeded = 0, + /** + * Default failure error code. This is a catch all error and indicates something has gone very + * wrong. There is no remediation for this case. + **/ + kGGLErrorCodeUnknownFailure = -1, + + /** + * Indicates that the calling method did not do anything in response to the call. This occurs in + * situations where the caller asked state to be mutated into its current state or selector wasn't + * present but it isn't considered a critical failure.. + */ + kGGLErrorCodeNoOp = -2, + + // 100 series error codes are for GGLContext + /** + * Loading data from the GoogleService-Info.plist file failed. This is a fatal error and should + * not be ignored. Further calls to the API will fail and/or possibly cause crashes. + */ + kGGLErrorCodeInvalidPlistFile = -100, + + /** + * Configuration of AdMob subspec failed. Additional details on the reason for the failure + * appear in the related NSError. + */ + kGGLErrorCodeAdMobSubspecConfigFailed = -101, + + /** + * Configuration of Analytics subspec failed. Additional details on the reason for the failure + * appear in the related NSError. + */ + kGGLErrorCodeAnalyticsSubspecConfigFailed = -102, + + /** + * Configuration of AppInvite subspec failed. Additional details on the reason for the failure + * appear in the related NSError. + */ + kGGLErrorCodeAppInviteSubspecConfigFailed = -103, + + /** + * Configuration of CloudMessaging subspec failed. Additional details on the reason for the failure + * appear in the related NSError. + */ + kGGLErrorCodeCloudMessagingSubspecConfigFailed = -104, + + /** + * Configuration of SignIn subspec failed. Additional details on the reason for the failure appear + * in the related NSError. + */ + kGGLErrorCodeSignInSubspecConfigFailed = -105, + + /** + * Missing expected subspec error. + */ + kGGLErrorCodeMissingExpectedSubspec = -106, + + /** + * Invalid Google App ID error. + */ + kGGLErrorCodeInvalidAppID = -107, +} GGLErrorCode; diff --git a/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/GMRConfiguration.h b/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/GMRConfiguration.h new file mode 100755 index 0000000..c5eb836 --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/Headers/GGLCore/Public/GMRConfiguration.h @@ -0,0 +1,19 @@ +#import + +/** + * This class provides configuration fields for Google Measurement. + */ +@interface GMRConfiguration : NSObject + +/** + * Returns the shared instance of GMRConfiguration. + */ ++ (GMRConfiguration *)sharedInstance; + +/** + * Sets whether measurement and reporting are enabled for this app on this device. By default they + * are enabled. + */ +- (void)setIsEnabled:(BOOL)isEnabled; + +@end diff --git a/Autorization:Registration Example/Pods/Google/Headers/GGLSignIn/Public/GGLContext+SignIn.h b/Autorization:Registration Example/Pods/Google/Headers/GGLSignIn/Public/GGLContext+SignIn.h new file mode 100755 index 0000000..7322b4d --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/Headers/GGLSignIn/Public/GGLContext+SignIn.h @@ -0,0 +1,14 @@ +#import "GGLContext.h" + +/** + * This category extends |GGLContext| with the Google Sign In service. To + * integrate, import GGLContext+SignIn.h. + * + * [GIDSignIn sharedInstance] should be ready to use after calling + * -[[GGLContext sharedInstance] configureWithError:]. + * + * @see GGLContext + */ +@interface GGLContext (SignIn) + +@end diff --git a/Autorization:Registration Example/Pods/Google/Headers/GGLSignIn/Public/SignIn.h b/Autorization:Registration Example/Pods/Google/Headers/GGLSignIn/Public/SignIn.h new file mode 100755 index 0000000..ccd0559 --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/Headers/GGLSignIn/Public/SignIn.h @@ -0,0 +1,4 @@ +#import "Core.h" + +#import "GGLContext+SignIn.h" +#import "GoogleSignIn.h" diff --git a/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/AdMob-Module.h b/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/AdMob-Module.h new file mode 100755 index 0000000..c2e4495 --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/AdMob-Module.h @@ -0,0 +1,5 @@ +#if defined(__has_include) +# if __has_include() +# include +# endif +#endif diff --git a/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/Analytics-Module.h b/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/Analytics-Module.h new file mode 100755 index 0000000..47108cc --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/Analytics-Module.h @@ -0,0 +1,5 @@ +#if defined(__has_include) +# if __has_include() +# include +# endif +#endif diff --git a/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/AppInvite-Module.h b/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/AppInvite-Module.h new file mode 100755 index 0000000..e9196d0 --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/AppInvite-Module.h @@ -0,0 +1,5 @@ +#if defined(__has_include) +# if __has_include() +# include +# endif +#endif diff --git a/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/CloudMessaging-Module.h b/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/CloudMessaging-Module.h new file mode 100755 index 0000000..a55b09a --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/CloudMessaging-Module.h @@ -0,0 +1,5 @@ +#if defined(__has_include) +# if __has_include() +# include +# endif +#endif diff --git a/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/Core-Module.h b/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/Core-Module.h new file mode 100755 index 0000000..9b95145 --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/Core-Module.h @@ -0,0 +1,5 @@ +#if defined(__has_include) +# if __has_include() +# include +# endif +#endif diff --git a/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/SignIn-Module.h b/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/SignIn-Module.h new file mode 100755 index 0000000..cdba6f8 --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/Headers/ModuleHeaders/SignIn-Module.h @@ -0,0 +1,5 @@ +#if defined(__has_include) +# if __has_include() +# include +# endif +#endif diff --git a/Autorization:Registration Example/Pods/Google/Headers/module.modulemap b/Autorization:Registration Example/Pods/Google/Headers/module.modulemap new file mode 100755 index 0000000..3df592c --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/Headers/module.modulemap @@ -0,0 +1,27 @@ +module Google { + export * + module AdMob { + header "ModuleHeaders/AdMob-Module.h" + export * + } + module Analytics { + header "ModuleHeaders/Analytics-Module.h" + export * + } + module AppInvite { + header "ModuleHeaders/AppInvite-Module.h" + export * + } + module CloudMessaging { + header "ModuleHeaders/CloudMessaging-Module.h" + export * + } + module Core { + header "ModuleHeaders/Core-Module.h" + export * + } + module SignIn { + header "ModuleHeaders/SignIn-Module.h" + export * + } +} diff --git a/Autorization:Registration Example/Pods/Google/Libraries/libGGLCore.a b/Autorization:Registration Example/Pods/Google/Libraries/libGGLCore.a new file mode 100644 index 0000000..dcd2238 Binary files /dev/null and b/Autorization:Registration Example/Pods/Google/Libraries/libGGLCore.a differ diff --git a/Autorization:Registration Example/Pods/Google/Libraries/libGGLSignIn.a b/Autorization:Registration Example/Pods/Google/Libraries/libGGLSignIn.a new file mode 100644 index 0000000..f87653a Binary files /dev/null and b/Autorization:Registration Example/Pods/Google/Libraries/libGGLSignIn.a differ diff --git a/Autorization:Registration Example/Pods/Google/README.md b/Autorization:Registration Example/Pods/Google/README.md new file mode 100755 index 0000000..209a2bb --- /dev/null +++ b/Autorization:Registration Example/Pods/Google/README.md @@ -0,0 +1,86 @@ +# Google APIs for iOS + +Simplify your iOS development, grow your user base, and monetize more +effectively with Google services. + +Much more information can be found at https://developers.google.com/ios/. + +## Install a Google SDK using CocoaPods + +Google distributes several iOS specific APIs and SDKs via CocoaPods. +You can install the CocoaPods tool on OS X by running the following command from +the terminal. Detailed information is available in the [Getting Started +guide](https://guides.cocoapods.org/using/getting-started.html#getting-started). + +``` +$ sudo gem install cocoapods +``` + +## Try out an SDK + +You can try any of the SDKs with `pod try`. Run the following command and select +the SDK you are interested in when prompted: + +``` +$ pod try Google +``` + +Note that some SDKs may require credentials. More information is available in +the SDK-specific documentation at https://developers.google.com/ios/. + +### Add a Google SDK to your iOS app + +CocoaPods is used to install and manage dependencies in existing Xcode projects. + +1. Create an Xcode project, and save it to your local machine. +2. Create a file named `Podfile` in your project directory. This file defines + your project's dependencies, and is commonly referred to as a Podspec. +3. Open `Podfile`, and add your dependencies. A simple Podspec is shown here: + + ``` + platform :ios, '8.1' + pod 'Google' + ``` + +4. Save the file. +5. Open a terminal and `cd` to the directory containing the Podfile. + + ``` + $ cd /project/ + ``` + +6. Run the `pod install` command. This will install the SDKs specified in the + Podspec, along with any dependencies they may have. + + ``` + $ pod install + ``` + +7. Open your app's `.xcworkspace` file to launch Xcode. + Use this file for all development on your app. + +### CocoaPods published by Google + +Below is a complete list of the Podspecs published by Google. + +| CocoaPods published by Google | | +|-------------------------------|---------------------------------------------------------------------------------| +| Google APIs for iOS | [Google](https://cocoapods.org/pods/Google) | +| App Invites | [AppInvites](https://cocoapods.org/pods/AppInvites) | +| Google Analytics | [GoogleAnalytics](https://cocoapods.org/pods/GoogleAnalytics) | +| Google App Indexing | [GoogleAppIndexing](https://cocoapods.org/pods/GoogleAppIndexing) | +| Google Cloud Messaging | [GoogleCloudMessaging](https://cocoapods.org/pods/GoogleCloudMessaging) | +| Google Conversion Tracking | [GoogleConversionTracking](https://cocoapods.org/pods/GoogleConversionTracking) | +| Google Maps | [GoogleMaps](https://cocoapods.org/pods/GoogleMaps) | +| Google Mobile Ads | [GoogleMobileAds](https://cocoapods.org/pods/GoogleMobileAds) | +| Google IDFA Support | [GoogleIDFASupport](https://cocoapods.org/pods/GoogleIDFASupport) | +| Google Places | [GoogleMaps](https://cocoapods.org/pods/GoogleMaps) | +| Google Sign In | [GoogleSignIn](https://cocoapods.org/pods/GoogleSignIn) | +| Google Tag Manager | [GoogleTagManager](https://cocoapods.org/pods/GoogleTagManager) | +| Instance ID | [GGLInstanceID](https://cocoapods.org/pods/GGLInstanceID) | +| Google Cast | [google-cast-sdk](https://cocoapods.org/pods/google-cast-sdk) | +| Firebase | [Firebase](https://cocoapods.org/pods/Firebase) | +| Google Play Games Services | [GooglePlayGames](https://cocoapods.org/pods/GooglePlayGames) | +| GeoFire | [GeoFire](https://cocoapods.org/pods/GeoFire) | +| Google Interactive Media Ads | [GoogleAds-IMA-iOS-SDK](https://cocoapods.org/pods/GoogleAds-IMA-iOS-SDK) | + diff --git a/Autorization:Registration Example/Pods/GoogleAppUtilities/Frameworks/GoogleAppUtilities.framework/GoogleAppUtilities b/Autorization:Registration Example/Pods/GoogleAppUtilities/Frameworks/GoogleAppUtilities.framework/GoogleAppUtilities new file mode 100644 index 0000000..2a75aed Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleAppUtilities/Frameworks/GoogleAppUtilities.framework/GoogleAppUtilities differ diff --git a/Autorization:Registration Example/Pods/GoogleAuthUtilities/Frameworks/GoogleAuthUtilities.framework/GoogleAuthUtilities b/Autorization:Registration Example/Pods/GoogleAuthUtilities/Frameworks/GoogleAuthUtilities.framework/GoogleAuthUtilities new file mode 100644 index 0000000..097f2d2 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleAuthUtilities/Frameworks/GoogleAuthUtilities.framework/GoogleAuthUtilities differ diff --git a/Autorization:Registration Example/Pods/GoogleAuthUtilities/Frameworks/GoogleAuthUtilities.framework/Resources/GTMOAuth2ViewTouch.xib b/Autorization:Registration Example/Pods/GoogleAuthUtilities/Frameworks/GoogleAuthUtilities.framework/Resources/GTMOAuth2ViewTouch.xib new file mode 100644 index 0000000..2f2c4bb --- /dev/null +++ b/Autorization:Registration Example/Pods/GoogleAuthUtilities/Frameworks/GoogleAuthUtilities.framework/Resources/GTMOAuth2ViewTouch.xib @@ -0,0 +1,370 @@ + + + + 1792 + 12F2560 + 5056 + 1187.40 + 626.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 3733 + + + IBProxyObject + IBUIActivityIndicatorView + IBUIBarButtonItem + IBUIButton + IBUINavigationItem + IBUIView + IBUIWebView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + OAuth + IBCocoaTouchFramework + + + IBCocoaTouchFramework + 1 + + + + 292 + + + + 292 + {30, 30} + + + + NO + NO + IBCocoaTouchFramework + 0 + 0 + + 3 + MQA + + + {0, -2} + + + 2 + MC41OTYwNzg0NiAwLjY4NjI3NDUzIDAuOTUyOTQxMjQgMC42MDAwMDAwMgA + + + 3 + MC41AA + + + Helvetica-Bold + Helvetica + 2 + 24 + + + Helvetica-Bold + 24 + 16 + + + + + 292 + {{30, 0}, {30, 30}} + + + + NO + NO + IBCocoaTouchFramework + 0 + 0 + + + {0, -2} + + + 2 + MC41ODQzMTM3NSAwLjY3NDUwOTgyIDAuOTUyOTQxMjQgMC42MDAwMDAwMgA + + + + + + + {60, 30} + + + + + 3 + MSAwAA + + NO + NO + + 3 + 3 + + IBCocoaTouchFramework + + + + 274 + + + + 274 + {320, 460} + + + + 1 + MSAxIDEAA + + YES + YES + IBCocoaTouchFramework + 1 + YES + + + + 301 + {{150, 115}, {20, 20}} + + _NS:9 + NO + IBCocoaTouchFramework + NO + YES + 2 + + + {320, 460} + + + 3 + MQA + + 2 + + + IBCocoaTouchFramework + + + + NO + + + + rightBarButtonItem + + + + 20 + + + + navButtonsView + + + + 22 + + + + backButton + + + + 25 + + + + forwardButton + + + + 26 + + + + view + + + + 28 + + + + webView + + + + 29 + + + + initialActivityIndicator + + + + 33 + + + + delegate + + + + 9 + + + + rightBarButtonItem + + + + 14 + + + + goBack + + + 7 + + 18 + + + + goForward + + + 7 + + 19 + + + + + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 6 + + + + + + 10 + + + + + 15 + + + + + + + + + 16 + + + + + 17 + + + + + 27 + + + + + + + + + 4 + + + + + 31 + + + + + + + GTMOAuth2ViewControllerTouch + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + + + 0 + IBCocoaTouchFramework + YES + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + 3 + 3733 + + diff --git a/Autorization:Registration Example/Pods/GoogleInterchangeUtilities/Frameworks/GoogleInterchangeUtilities.framework/GoogleInterchangeUtilities b/Autorization:Registration Example/Pods/GoogleInterchangeUtilities/Frameworks/GoogleInterchangeUtilities.framework/GoogleInterchangeUtilities new file mode 100644 index 0000000..dc653b3 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleInterchangeUtilities/Frameworks/GoogleInterchangeUtilities.framework/GoogleInterchangeUtilities differ diff --git a/Autorization:Registration Example/Pods/GoogleNetworkingUtilities/Frameworks/GoogleNetworkingUtilities.framework/GoogleNetworkingUtilities b/Autorization:Registration Example/Pods/GoogleNetworkingUtilities/Frameworks/GoogleNetworkingUtilities.framework/GoogleNetworkingUtilities new file mode 100644 index 0000000..500af27 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleNetworkingUtilities/Frameworks/GoogleNetworkingUtilities.framework/GoogleNetworkingUtilities differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/CHANGELOG.md b/Autorization:Registration Example/Pods/GoogleSignIn/CHANGELOG.md new file mode 100644 index 0000000..2bf9b2e --- /dev/null +++ b/Autorization:Registration Example/Pods/GoogleSignIn/CHANGELOG.md @@ -0,0 +1,63 @@ +# 2016-03-04 -- v3.0.0 +- Provides |givenName| and |familyName| properties on |GIDProfileData|. +- Allows setting the |loginHint| property on |GIDSignIn| to prefill the user's + ID or email address in the sign-in flow. +- Removed the |UIViewController(SignIn)| category as well as the |delegate| + property from |GIDSignInButton|. +- Requires that |uiDelegate| has been set properly on |GIDSignIn| and that + SafariServices framework has been linked. +- Removes the dependency on StoreKit. +- Provides bitcode support. +- Requires Xcode 7.0 or above due to bitcode incompatibilities with Xcode 6. + +# 2015-10-26 -- v2.4.0 +- Updates sign-in button with the new Google logo. +- Supports domain restriction for sign-in. +- Allows refreshing ID tokens. + +# 2015-10-09 -- v2.3.2 +- No longer requires Xcode 7. + +# 2015-10-01 -- v2.3.1 +- Fixes a crash in |GIDProfileData|'s |imageURLWithDimension:|. + +# 2015-09-25 -- v2.3.0 +- Requires Xcode 7.0 or above. +- Uses SFSafariViewController for signing in on iOS 9. |uiDelegate| must be + set for this to work. +- Optimizes fetching user profile. +- Supports GTMFetcherAuthorizationProtocol in GIDAuthentication. + +# 2015-07-15 -- v2.2.0 +- Compatible with iOS 9 (beta). Note that this version of the Sign-In SDK does + not include bitcode, so you must set ENABLE_BITCODE to NO in your project if + you use Xcode 7. +- Adds descriptive identifiers for GIDSignInButton's Auto Layout constraints. +- |signInSilently| no longer requires setting |uiDelegate|. + +# 2015-06-17 -- v2.1.0 +- Fixes Auto Layout issues with GIDSignInButton. +- Adds API to refresh access token in GIDAuthentication. +- Better exception description for unassigned clientID in GIDSignIn. +- Other minor bug fixes. + +# 2015-05-28 -- v2.0.1 +- Bug fixes + +# 2015-05-21 -- v2.0.0 +- Supports sign-in via UIWebView rather than app switching to a browser, + configurable with the new |allowsSignInWithWebView| property. +- Now apps which have disabled the app switch to a browser via the + |allowsSignInWithBrowser| and in-app web view via |allowsSignInWithWebView| + properties have the option to display a prompt instructing the user to + download the Google app from the App Store. +- Fixes sign-in button sizing issue when auto-layout is enabled +- |signInSilently| now calls the delegate with error when |hasAuthInKeychain| + is |NO| as documented +- Other minor bug fixes + +# 2015-03-12 -- v1.0.0 +- New sign-in focused SDK with refreshed API +- Dynamically rendered sign-in button with contextual branding +- Basic profile support +- Added allowsSignInWithBrowser property diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDAuthentication.h b/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDAuthentication.h new file mode 100644 index 0000000..7ab00b8 --- /dev/null +++ b/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDAuthentication.h @@ -0,0 +1,72 @@ +/* + * GIDAuthentication.h + * Google Sign-In iOS SDK + * + * Copyright 2014 Google Inc. + * + * Use of this SDK is subject to the Google APIs Terms of Service: + * https://developers.google.com/terms/ + */ + +#import + +@protocol GTMFetcherAuthorizationProtocol; +@class GIDAuthentication; + +// @relates GIDAuthentication +// +// The callback block that takes a GIDAuthentication, or an error if attempt to refresh was +// unsuccessful. +typedef void (^GIDAuthenticationHandler)(GIDAuthentication *authentication, NSError *error); + +// @relates GIDAuthentication +// +// The callback block that takes an access token, or an error if attempt to refresh was +// unsuccessful. +typedef void (^GIDAccessTokenHandler)(NSString *accessToken, NSError *error); + +// This class represents the OAuth 2.0 entities needed for sign-in. +@interface GIDAuthentication : NSObject + +// The client ID associated with the authentication. +@property(nonatomic, readonly) NSString *clientID; + +// The OAuth2 access token to access Google services. +@property(nonatomic, readonly) NSString *accessToken; + +// The estimated expiration date of the access token. +@property(nonatomic, readonly) NSDate *accessTokenExpirationDate; + +// The OAuth2 refresh token to exchange for new access tokens. +@property(nonatomic, readonly) NSString *refreshToken; + +// An OpenID Connect ID token that identifies the user. Send this token to your server to +// authenticate the user there. For more information on this topic, see +// https://developers.google.com/identity/sign-in/ios/backend-auth +@property(nonatomic, readonly) NSString *idToken; + +// The estimated expiration date of the ID token. +@property(nonatomic, readonly) NSDate *idTokenExpirationDate; + +// Gets a new authorizer for GTLService, GTMSessionFetcher, or GTMHTTPFetcher. +- (id)fetcherAuthorizer; + +// Get a valid access token and a valid ID token, refreshing them first if they have expired or are +// about to expire. +- (void)getTokensWithHandler:(GIDAuthenticationHandler)handler; + +// Refreshes the access token and the ID token using the refresh token. +- (void)refreshTokensWithHandler:(GIDAuthenticationHandler)handler; + +// Gets the access token, which may be a new one from the refresh token if the original has already +// expired or is about to expire. Deprecated: use |getTokensWithHandler:| to get access tokens +// instead. +- (void)getAccessTokenWithHandler:(GIDAccessTokenHandler)handler + DEPRECATED_MSG_ATTRIBUTE("Use |getTokensWithHandler:| instead."); + +// Refreshes the access token with the refresh token. Deprecated: Use |refreshTokensWithHandler:| +// to refresh access tokens instead. +- (void)refreshAccessTokenWithHandler:(GIDAccessTokenHandler)handler + DEPRECATED_MSG_ATTRIBUTE("Use |refreshTokensWithHandler:| instead."); + +@end diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDGoogleUser.h b/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDGoogleUser.h new file mode 100644 index 0000000..9562a33 --- /dev/null +++ b/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDGoogleUser.h @@ -0,0 +1,38 @@ +/* + * GIDGoogleUser.h + * Google Sign-In iOS SDK + * + * Copyright 2014 Google Inc. + * + * Use of this SDK is subject to the Google APIs Terms of Service: + * https://developers.google.com/terms/ + */ + +#import + +@class GIDAuthentication; +@class GIDProfileData; + +// This class represents a user account. +@interface GIDGoogleUser : NSObject + +// The Google user ID. +@property(nonatomic, readonly) NSString *userID; + +// Representation of the Basic profile data. It is only available if |shouldFetchBasicProfile| +// is set and either |signInWithUser| or |SignIn| has been completed successfully. +@property(nonatomic, readonly) GIDProfileData *profile; + +// The authentication object for the user. +@property(nonatomic, readonly) GIDAuthentication *authentication; + +// The API scopes requested by the app in an array of |NSString|s. +@property(nonatomic, readonly) NSArray *accessibleScopes; + +// For Google Apps hosted accounts, the domain of the user. +@property(nonatomic, readonly) NSString *hostedDomain; + +// An OAuth2 authorization code for the home server. +@property(nonatomic, readonly) NSString *serverAuthCode; + +@end diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDProfileData.h b/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDProfileData.h new file mode 100644 index 0000000..8ffc995 --- /dev/null +++ b/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDProfileData.h @@ -0,0 +1,34 @@ +/* + * GIDProfileData.h + * Google Sign-In iOS SDK + * + * Copyright 2014 Google Inc. + * + * Use of this SDK is subject to the Google APIs Terms of Service: + * https://developers.google.com/terms/ + */ + +#import + +// This class represents the basic profile information of a GIDGoogleUser. +@interface GIDProfileData : NSObject + +// The Google user's email. +@property(nonatomic, readonly) NSString *email; + +// The Google user's full name. +@property(nonatomic, readonly) NSString *name; + +// The Google user's given name. +@property(nonatomic, readonly) NSString *givenName; + +// The Google user's family name. +@property(nonatomic, readonly) NSString *familyName; + +// Whether or not the user has profile image. +@property(nonatomic, readonly) BOOL hasImage; + +// Gets the user's profile image URL for the given dimension in pixels for each side of the square. +- (NSURL *)imageURLWithDimension:(NSUInteger)dimension; + +@end diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDSignIn.h b/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDSignIn.h new file mode 100644 index 0000000..167b38b --- /dev/null +++ b/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDSignIn.h @@ -0,0 +1,199 @@ +/* + * GIDSignIn.h + * Google Sign-In iOS SDK + * + * Copyright 2012 Google Inc. + * + * Use of this SDK is subject to the Google APIs Terms of Service: + * https://developers.google.com/terms/ + */ + +#import +#import + +@class GIDGoogleUser; +@class GIDSignIn; + +// The error domain for NSErrors returned by the Google Identity SDK. +extern NSString *const kGIDSignInErrorDomain; + +// A list of potential error codes returned from the Google Identity SDK. +typedef NS_ENUM(NSInteger, GIDSignInErrorCode) { + // Indicates an unknown error has occured. + kGIDSignInErrorCodeUnknown = -1, + // Indicates a problem reading or writing to the application keychain. + kGIDSignInErrorCodeKeychain = -2, + // Indicates no appropriate applications are installed on the user's device which can handle + // sign-in. This code will only ever be returned if using webview and switching to browser have + // both been disabled. + kGIDSignInErrorCodeNoSignInHandlersInstalled = -3, + // Indicates there are no auth tokens in the keychain. This error code will be returned by + // signInSilently if the user has never signed in before with the given scopes, or if they have + // since signed out. + kGIDSignInErrorCodeHasNoAuthInKeychain = -4, + // Indicates the user canceled the sign in request. + kGIDSignInErrorCodeCanceled = -5, +}; + +// A protocol implemented by the delegate of |GIDSignIn| to receive a refresh token or an error. +@protocol GIDSignInDelegate + +// The sign-in flow has finished and was successful if |error| is |nil|. +- (void)signIn:(GIDSignIn *)signIn + didSignInForUser:(GIDGoogleUser *)user + withError:(NSError *)error; + +@optional + +// Finished disconnecting |user| from the app successfully if |error| is |nil|. +- (void)signIn:(GIDSignIn *)signIn + didDisconnectWithUser:(GIDGoogleUser *)user + withError:(NSError *)error; + +@end + +// A protocol which may be implemented by consumers of |GIDSignIn| to be notified of when +// GIDSignIn has finished dispatching the sign-in request. +// +// This protocol is useful for developers who implement their own "Sign In with Google" button. +// Because there may be a brief delay between when the call to |signIn| is made, and when the +// app switch occurs, it is best practice to have the UI react to the user's input by displaying +// a spinner or other UI element. The |signInWillDispatch| method should be used to +// stop or hide the spinner. +@protocol GIDSignInUIDelegate + +@optional + +// The sign-in flow has finished selecting how to proceed, and the UI should no longer display +// a spinner or other "please wait" element. +- (void)signInWillDispatch:(GIDSignIn *)signIn error:(NSError *)error; + +// If implemented, this method will be invoked when sign in needs to display a view controller. +// The view controller should be displayed modally (via UIViewController's |presentViewController| +// method, and not pushed unto a navigation controller's stack. +- (void)signIn:(GIDSignIn *)signIn presentViewController:(UIViewController *)viewController; + +// If implemented, this method will be invoked when sign in needs to dismiss a view controller. +// Typically, this should be implemented by calling |dismissViewController| on the passed +// view controller. +- (void)signIn:(GIDSignIn *)signIn dismissViewController:(UIViewController *)viewController; + +@end + +// This class signs the user in with Google. It also provides single sign-on via a capable Google +// app if one is installed. +// +// For reference, please see "Google Sign-In for iOS" at +// https://developers.google.com/identity/sign-in/ios +// Here is sample code to use |GIDSignIn|: +// 1. Get a reference to the |GIDSignIn| shared instance: +// GIDSignIn *signIn = [GIDSignIn sharedInstance]; +// 2. Set the OAuth 2.0 scopes you want to request: +// [signIn setScopes:[NSArray arrayWithObject:@"https://www.googleapis.com/auth/plus.login"]]; +// 3. Call [signIn setDelegate:self]; +// 4. Set up delegate method |signIn:didSignInForUser:withError:|. +// 5. Call |handleURL| on the shared instance from |application:openUrl:...| in your app delegate. +// 6. Call |signIn| on the shared instance; +@interface GIDSignIn : NSObject + +// The authentication object for the current user, or |nil| if there is currently no logged in user. +@property(nonatomic, readonly) GIDGoogleUser *currentUser; + +// The object to be notified when authentication is finished. +@property(nonatomic, weak) id delegate; + +// The object to be notified when sign in dispatch selection is finished. +@property(nonatomic, weak) id uiDelegate; + +// The client ID of the app from the Google APIs console. Must set for sign-in to work. +@property(nonatomic, copy) NSString *clientID; + +// The API scopes requested by the app in an array of |NSString|s. The default value is |@[]|. +// +// This property is optional. If you set it, set it before calling |signIn|. +@property(nonatomic, copy) NSArray *scopes; + +// Whether or not to fetch basic profile data after signing in. The data is saved in the +// |GIDGoogleUser.profileData| object. +// +// Setting the flag will add "email" and "profile" to scopes. +// Defaults to |YES|. +@property(nonatomic, assign) BOOL shouldFetchBasicProfile; + +// Whether or not to switch to Chrome or Safari if no suitable Google apps are installed. +// Defaults to |YES|. +@property(nonatomic, assign) BOOL allowsSignInWithBrowser; + +// Whether or not to support sign-in via a web view. +// Defaults to |YES|. +@property(nonatomic, assign) BOOL allowsSignInWithWebView; + +// The language for sign-in, in the form of ISO 639-1 language code optionally followed by a dash +// and ISO 3166-1 alpha-2 region code, such as |@"it"| or |@"pt-PT"|. Only set if different from +// system default. +// +// This property is optional. If you set it, set it before calling |signIn|. +@property(nonatomic, copy) NSString *language; + +// The login hint to the authorization server, for example the user's ID, or email address, +// to be prefilled if possible. +// +// This property is optional. If you set it, set it before calling |signIn|. +@property(nonatomic, copy) NSString *loginHint; + +// The client ID of the home web server. This will be returned as the |audience| property of the +// OpenID Connect ID token. For more info on the ID token: +// https://developers.google.com/identity/sign-in/ios/backend-auth +// +// This property is optional. If you set it, set it before calling |signIn|. +@property(nonatomic, copy) NSString *serverClientID; + +// The OpenID2 realm of the home web server. This allows Google to include the user's OpenID +// Identifier in the OpenID Connect ID token. +// +// This property is optional. If you set it, set it before calling |signIn|. +@property(nonatomic, copy) NSString *openIDRealm; + +// The Google Apps domain to which users must belong to sign in. To verify, check |GIDGoogleUser|'s +// |hostedDomain| property. +// +// This property is optional. If you set it, set it before calling |signIn|. +@property(nonatomic, copy) NSString *hostedDomain; + +// Returns a shared |GIDSignIn| instance. ++ (GIDSignIn *)sharedInstance; + +// This method should be called from your |UIApplicationDelegate|'s +// |application:openURL:sourceApplication:annotation|. Returns |YES| if |GIDSignIn| handled this +// URL. +- (BOOL)handleURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation; + +// Checks whether the user has either currently signed in or has previous authentication saved in +// keychain. +- (BOOL)hasAuthInKeychain; + +// Attempts to sign in a previously authenticated user without interaction. The delegate will be +// called at the end of this process indicating success or failure. +- (void)signInSilently; + +// Starts the sign-in process. The delegate will be called at the end of this process. Note that +// this method should not be called when the app is starting up, (e.g in +// application:didFinishLaunchingWithOptions:). Instead use the |signInSilently| method. +- (void)signIn; + +// Marks current user as being in the signed out state. +- (void)signOut; + +// Disconnects the current user from the app and revokes previous authentication. If the operation +// succeeds, the OAuth 2.0 token is also removed from keychain. +- (void)disconnect; + +// DEPRECATED: this method always calls back with |NO| on iOS 9 or above. Do not use this method. +// Checks if a Google app to handle sign in requests is installed on the user's device on iOS 8 or +// below. +- (void)checkGoogleSignInAppInstalled:(void (^)(BOOL isInstalled))callback + DEPRECATED_MSG_ATTRIBUTE("This method always calls back with |NO| on iOS 9 or above."); + +@end diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDSignInButton.h b/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDSignInButton.h new file mode 100644 index 0000000..1e75fd6 --- /dev/null +++ b/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GIDSignInButton.h @@ -0,0 +1,51 @@ +/* + * GIDSignInButton.h + * Google Sign-In iOS SDK + * + * Copyright 2012 Google Inc. + * + * Use of this SDK is subject to the Google APIs Terms of Service: + * https://developers.google.com/terms/ + */ + +#import + +// The various layout styles supported by the GIDSignInButton. +// The minimum size of the button depends on the language used for text. +// The following dimensions (in points) fit for all languages: +// kGIDSignInButtonStyleStandard: 230 x 48 +// kGIDSignInButtonStyleWide: 312 x 48 +// kGIDSignInButtonStyleIconOnly: 48 x 48 (no text, fixed size) +typedef NS_ENUM(NSInteger, GIDSignInButtonStyle) { + kGIDSignInButtonStyleStandard = 0, + kGIDSignInButtonStyleWide = 1, + kGIDSignInButtonStyleIconOnly = 2 +}; + +// The various color schemes supported by the GIDSignInButton. +typedef NS_ENUM(NSInteger, GIDSignInButtonColorScheme) { + kGIDSignInButtonColorSchemeDark = 0, + kGIDSignInButtonColorSchemeLight = 1 +}; + +// This class provides the "Sign in with Google" button. You can instantiate this +// class programmatically or from a NIB file. You should set up the +// |GIDSignIn| shared instance with your client ID and any additional scopes, +// implement the delegate methods for |GIDSignIn|, and add this button to your +// view hierarchy. +@interface GIDSignInButton : UIControl + +// The layout style for the sign-in button. +// Possible values: +// - kGIDSignInButtonStyleStandard: 230 x 48 (default) +// - kGIDSignInButtonStyleWide: 312 x 48 +// - kGIDSignInButtonStyleIconOnly: 48 x 48 (no text, fixed size) +@property(nonatomic, assign) GIDSignInButtonStyle style; + +// The color scheme for the sign-in button. +// Possible values: +// - kGIDSignInButtonColorSchemeDark +// - kGIDSignInButtonColorSchemeLight (default) +@property(nonatomic, assign) GIDSignInButtonColorScheme colorScheme; + +@end diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GoogleSignIn.h b/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GoogleSignIn.h new file mode 100644 index 0000000..ddec570 --- /dev/null +++ b/Autorization:Registration Example/Pods/GoogleSignIn/Headers/Public/GoogleSignIn.h @@ -0,0 +1,15 @@ +// +// GoogleSignIn.h +// Google Sign-In iOS SDK +// +// Copyright 2015 Google Inc. +// +// Use of this SDK is subject to the Google APIs Terms of Service: +// https://developers.google.com/terms/ +// + +#import "GIDAuthentication.h" +#import "GIDGoogleUser.h" +#import "GIDProfileData.h" +#import "GIDSignIn.h" +#import "GIDSignInButton.h" diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Libraries/libGIPNSURL+FIFE_external.a b/Autorization:Registration Example/Pods/GoogleSignIn/Libraries/libGIPNSURL+FIFE_external.a new file mode 100644 index 0000000..11a902b Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Libraries/libGIPNSURL+FIFE_external.a differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Libraries/libSignIn_external.a b/Autorization:Registration Example/Pods/GoogleSignIn/Libraries/libSignIn_external.a new file mode 100644 index 0000000..350eb7f Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Libraries/libSignIn_external.a differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/README.md b/Autorization:Registration Example/Pods/GoogleSignIn/README.md new file mode 100644 index 0000000..68c6c57 --- /dev/null +++ b/Autorization:Registration Example/Pods/GoogleSignIn/README.md @@ -0,0 +1,8 @@ +# Google Sign-In SDK for iOS + +The Google Sign-In SDK allows users to sign in with their Google account from +third-party apps. + +Please visit [our developer +site](https://developers.google.com/identity/sign-in/ios/) for integration +instructions, documentation, support information, and terms of service. diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/Info.plist b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/Info.plist new file mode 100644 index 0000000..bb8965d Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/Info.plist differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/Roboto-Bold.ttf b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/Roboto-Bold.ttf new file mode 100755 index 0000000..68822ca Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/Roboto-Bold.ttf differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ar.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ar.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..7fdf528 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ar.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ca.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ca.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..519ab44 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ca.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/cs.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/cs.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..fe7dc9c Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/cs.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/da.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/da.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..e1a2f7e Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/da.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/de.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/de.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..4e8f09f Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/de.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/el.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/el.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..36fae01 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/el.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/en.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/en.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..fecad11 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/en.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/en_GB.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/en_GB.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..fecad11 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/en_GB.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/es.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/es.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..15a0abf Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/es.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/es_MX.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/es_MX.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..59d2dcb Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/es_MX.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/fi.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/fi.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..f383b94 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/fi.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/fr.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/fr.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..7cdd675 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/fr.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/google.png b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/google.png new file mode 100644 index 0000000..a13d4dc Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/google.png differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/google@2x.png b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/google@2x.png new file mode 100644 index 0000000..88a86b1 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/google@2x.png differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/google@3x.png b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/google@3x.png new file mode 100644 index 0000000..b4d4645 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/google@3x.png differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/gplus.png b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/gplus.png new file mode 100644 index 0000000..a612d53 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/gplus.png differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/gplus@2x.png b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/gplus@2x.png new file mode 100644 index 0000000..b2380df Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/gplus@2x.png differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/gplus@3x.png b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/gplus@3x.png new file mode 100644 index 0000000..0a449d3 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/gplus@3x.png differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/he.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/he.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..7ca16d5 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/he.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hr.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hr.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..4a25129 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hr.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hu.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hu.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..4312727 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hu.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/id.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/id.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..bb9f0f9 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/id.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/it.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/it.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..320a232 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/it.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ja.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ja.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..7fe6148 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ja.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ko.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ko.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..8f84f47 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ko.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ms.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ms.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..4ae20d2 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ms.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/nb.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/nb.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..18edcd0 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/nb.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/nl.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/nl.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..6d1c58e Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/nl.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pl.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pl.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..112ec3b Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pl.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..5941bec Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt_BR.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt_BR.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..5941bec Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt_BR.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt_PT.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt_PT.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..e98d74f Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt_PT.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ro.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ro.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..49814ea Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ro.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ru.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ru.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..549538f Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ru.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/sk.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/sk.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..4de8bb4 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/sk.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/sv.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/sv.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..f67b5b4 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/sv.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/th.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/th.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..0ff2fa3 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/th.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/tr.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/tr.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..2f3f1d5 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/tr.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/uk.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/uk.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..c684256 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/uk.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/vi.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/vi.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..f99e5c7 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/vi.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/zh_CN.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/zh_CN.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..b230411 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/zh_CN.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/zh_TW.lproj/GoogleSignIn.strings b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/zh_TW.lproj/GoogleSignIn.strings new file mode 100644 index 0000000..c8be012 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/zh_TW.lproj/GoogleSignIn.strings differ diff --git a/Autorization:Registration Example/Pods/GoogleSymbolUtilities/Frameworks/GoogleSymbolUtilities.framework/GoogleSymbolUtilities b/Autorization:Registration Example/Pods/GoogleSymbolUtilities/Frameworks/GoogleSymbolUtilities.framework/GoogleSymbolUtilities new file mode 100644 index 0000000..016a524 Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleSymbolUtilities/Frameworks/GoogleSymbolUtilities.framework/GoogleSymbolUtilities differ diff --git a/Autorization:Registration Example/Pods/GoogleUtilities/Frameworks/GoogleUtilities.framework/GoogleUtilities b/Autorization:Registration Example/Pods/GoogleUtilities/Frameworks/GoogleUtilities.framework/GoogleUtilities new file mode 100644 index 0000000..31efbac Binary files /dev/null and b/Autorization:Registration Example/Pods/GoogleUtilities/Frameworks/GoogleUtilities.framework/GoogleUtilities differ diff --git a/Autorization:Registration Example/Pods/Headers/Private/Google/Google/AdMob-Module.h b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/AdMob-Module.h new file mode 120000 index 0000000..3689879 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/AdMob-Module.h @@ -0,0 +1 @@ +../../../../Google/Headers/ModuleHeaders/AdMob-Module.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/Google/Google/Analytics-Module.h b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/Analytics-Module.h new file mode 120000 index 0000000..742cfc7 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/Analytics-Module.h @@ -0,0 +1 @@ +../../../../Google/Headers/ModuleHeaders/Analytics-Module.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/Google/Google/AppInvite-Module.h b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/AppInvite-Module.h new file mode 120000 index 0000000..cbff09f --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/AppInvite-Module.h @@ -0,0 +1 @@ +../../../../Google/Headers/ModuleHeaders/AppInvite-Module.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/Google/Google/CloudMessaging-Module.h b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/CloudMessaging-Module.h new file mode 120000 index 0000000..da4bcc5 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/CloudMessaging-Module.h @@ -0,0 +1 @@ +../../../../Google/Headers/ModuleHeaders/CloudMessaging-Module.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/Google/Google/Core-Module.h b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/Core-Module.h new file mode 120000 index 0000000..22b6560 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/Core-Module.h @@ -0,0 +1 @@ +../../../../Google/Headers/ModuleHeaders/Core-Module.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/Google/Google/Core.h b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/Core.h new file mode 120000 index 0000000..bb0b873 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/Core.h @@ -0,0 +1 @@ +../../../../Google/Headers/GGLCore/Public/Core.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GGLConfiguration.h b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GGLConfiguration.h new file mode 120000 index 0000000..5d49552 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GGLConfiguration.h @@ -0,0 +1 @@ +../../../../Google/Headers/GGLCore/Public/GGLConfiguration.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GGLContext+SignIn.h b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GGLContext+SignIn.h new file mode 120000 index 0000000..c15e01d --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GGLContext+SignIn.h @@ -0,0 +1 @@ +../../../../Google/Headers/GGLSignIn/Public/GGLContext+SignIn.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GGLContext.h b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GGLContext.h new file mode 120000 index 0000000..cb713d5 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GGLContext.h @@ -0,0 +1 @@ +../../../../Google/Headers/GGLCore/Public/GGLContext.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GGLErrorCode.h b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GGLErrorCode.h new file mode 120000 index 0000000..0eb2a9d --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GGLErrorCode.h @@ -0,0 +1 @@ +../../../../Google/Headers/GGLCore/Public/GGLErrorCode.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GMRConfiguration.h b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GMRConfiguration.h new file mode 120000 index 0000000..8737857 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/GMRConfiguration.h @@ -0,0 +1 @@ +../../../../Google/Headers/GGLCore/Public/GMRConfiguration.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/Google/Google/SignIn-Module.h b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/SignIn-Module.h new file mode 120000 index 0000000..9110536 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/SignIn-Module.h @@ -0,0 +1 @@ +../../../../Google/Headers/ModuleHeaders/SignIn-Module.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/Google/Google/SignIn.h b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/SignIn.h new file mode 120000 index 0000000..e683c30 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/Google/Google/SignIn.h @@ -0,0 +1 @@ +../../../../Google/Headers/GGLSignIn/Public/SignIn.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDAuthentication.h b/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDAuthentication.h new file mode 120000 index 0000000..4e91c75 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDAuthentication.h @@ -0,0 +1 @@ +../../../GoogleSignIn/Headers/Public/GIDAuthentication.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDGoogleUser.h b/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDGoogleUser.h new file mode 120000 index 0000000..e5a8dd5 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDGoogleUser.h @@ -0,0 +1 @@ +../../../GoogleSignIn/Headers/Public/GIDGoogleUser.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDProfileData.h b/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDProfileData.h new file mode 120000 index 0000000..7e2e4c5 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDProfileData.h @@ -0,0 +1 @@ +../../../GoogleSignIn/Headers/Public/GIDProfileData.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDSignIn.h b/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDSignIn.h new file mode 120000 index 0000000..ae221bd --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDSignIn.h @@ -0,0 +1 @@ +../../../GoogleSignIn/Headers/Public/GIDSignIn.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDSignInButton.h b/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDSignInButton.h new file mode 120000 index 0000000..40da695 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GIDSignInButton.h @@ -0,0 +1 @@ +../../../GoogleSignIn/Headers/Public/GIDSignInButton.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GoogleSignIn.h b/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GoogleSignIn.h new file mode 120000 index 0000000..8a866b8 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Private/GoogleSignIn/GoogleSignIn.h @@ -0,0 +1 @@ +../../../GoogleSignIn/Headers/Public/GoogleSignIn.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/Google/Google/AdMob-Module.h b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/AdMob-Module.h new file mode 120000 index 0000000..3689879 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/AdMob-Module.h @@ -0,0 +1 @@ +../../../../Google/Headers/ModuleHeaders/AdMob-Module.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/Google/Google/Analytics-Module.h b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/Analytics-Module.h new file mode 120000 index 0000000..742cfc7 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/Analytics-Module.h @@ -0,0 +1 @@ +../../../../Google/Headers/ModuleHeaders/Analytics-Module.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/Google/Google/AppInvite-Module.h b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/AppInvite-Module.h new file mode 120000 index 0000000..cbff09f --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/AppInvite-Module.h @@ -0,0 +1 @@ +../../../../Google/Headers/ModuleHeaders/AppInvite-Module.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/Google/Google/CloudMessaging-Module.h b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/CloudMessaging-Module.h new file mode 120000 index 0000000..da4bcc5 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/CloudMessaging-Module.h @@ -0,0 +1 @@ +../../../../Google/Headers/ModuleHeaders/CloudMessaging-Module.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/Google/Google/Core-Module.h b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/Core-Module.h new file mode 120000 index 0000000..22b6560 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/Core-Module.h @@ -0,0 +1 @@ +../../../../Google/Headers/ModuleHeaders/Core-Module.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/Google/Google/Core.h b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/Core.h new file mode 120000 index 0000000..bb0b873 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/Core.h @@ -0,0 +1 @@ +../../../../Google/Headers/GGLCore/Public/Core.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GGLConfiguration.h b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GGLConfiguration.h new file mode 120000 index 0000000..5d49552 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GGLConfiguration.h @@ -0,0 +1 @@ +../../../../Google/Headers/GGLCore/Public/GGLConfiguration.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GGLContext+SignIn.h b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GGLContext+SignIn.h new file mode 120000 index 0000000..c15e01d --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GGLContext+SignIn.h @@ -0,0 +1 @@ +../../../../Google/Headers/GGLSignIn/Public/GGLContext+SignIn.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GGLContext.h b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GGLContext.h new file mode 120000 index 0000000..cb713d5 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GGLContext.h @@ -0,0 +1 @@ +../../../../Google/Headers/GGLCore/Public/GGLContext.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GGLErrorCode.h b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GGLErrorCode.h new file mode 120000 index 0000000..0eb2a9d --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GGLErrorCode.h @@ -0,0 +1 @@ +../../../../Google/Headers/GGLCore/Public/GGLErrorCode.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GMRConfiguration.h b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GMRConfiguration.h new file mode 120000 index 0000000..8737857 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/GMRConfiguration.h @@ -0,0 +1 @@ +../../../../Google/Headers/GGLCore/Public/GMRConfiguration.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/Google/Google/SignIn-Module.h b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/SignIn-Module.h new file mode 120000 index 0000000..9110536 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/SignIn-Module.h @@ -0,0 +1 @@ +../../../../Google/Headers/ModuleHeaders/SignIn-Module.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/Google/Google/SignIn.h b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/SignIn.h new file mode 120000 index 0000000..e683c30 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/Google/Google/SignIn.h @@ -0,0 +1 @@ +../../../../Google/Headers/GGLSignIn/Public/SignIn.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDAuthentication.h b/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDAuthentication.h new file mode 120000 index 0000000..4e91c75 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDAuthentication.h @@ -0,0 +1 @@ +../../../GoogleSignIn/Headers/Public/GIDAuthentication.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDGoogleUser.h b/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDGoogleUser.h new file mode 120000 index 0000000..e5a8dd5 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDGoogleUser.h @@ -0,0 +1 @@ +../../../GoogleSignIn/Headers/Public/GIDGoogleUser.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDProfileData.h b/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDProfileData.h new file mode 120000 index 0000000..7e2e4c5 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDProfileData.h @@ -0,0 +1 @@ +../../../GoogleSignIn/Headers/Public/GIDProfileData.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDSignIn.h b/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDSignIn.h new file mode 120000 index 0000000..ae221bd --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDSignIn.h @@ -0,0 +1 @@ +../../../GoogleSignIn/Headers/Public/GIDSignIn.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDSignInButton.h b/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDSignInButton.h new file mode 120000 index 0000000..40da695 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GIDSignInButton.h @@ -0,0 +1 @@ +../../../GoogleSignIn/Headers/Public/GIDSignInButton.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GoogleSignIn.h b/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GoogleSignIn.h new file mode 120000 index 0000000..8a866b8 --- /dev/null +++ b/Autorization:Registration Example/Pods/Headers/Public/GoogleSignIn/GoogleSignIn.h @@ -0,0 +1 @@ +../../../GoogleSignIn/Headers/Public/GoogleSignIn.h \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInApplication.h b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInApplication.h new file mode 100644 index 0000000..c6f8ed6 --- /dev/null +++ b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInApplication.h @@ -0,0 +1,96 @@ +// LIALinkedInApplication.h +// +// Copyright (c) 2013 Ancientprogramming +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#import + +/** + * A LIALinkedInApplication defines the application which is granted access to the users linkedin data. + **/ +@interface LIALinkedInApplication : NSObject + +/** ************************************************************************************************ ** + * @name Initializers + ** ************************************************************************************************ **/ + +/** + * The default initializer. + * @param redirectURL Has to be a http or https url (required by LinkedIn), but other than that, the endpoint doesn't have to respond anything. The library only uses the endpoint to know when to intercept calls in the UIWebView. + * @param clientId The id which is provided by LinkedIn upon registering an application. + * @param clientSecret The secret which is provided by LinkedIn upon registering an application. + * @param state The state used to prevent Cross Site Request Forgery. Should be something that is hard to guess. + * @param grantedAccess An array telling which access the application would like to be granted by the enduser. See full list here: http://developer.linkedin.com/documents/authentication. + * @return An initialized instance. + **/ +- (id)initWithRedirectURL:(NSString *)redirectURL clientId:(NSString *)clientId clientSecret:(NSString *)clientSecret state:(NSString *)state grantedAccess:(NSArray *)grantedAccess; + +/** + * The default static initializer. + * @param redirectURL Has to be a http or https url (required by LinkedIn), but other than that, the endpoint doesn't have to respond anything. The library only uses the endpoint to know when to intercept calls in the UIWebView. + * @param clientId The id which is provided by LinkedIn upon registering an application. + * @param clientSecret The secret which is provided by LinkedIn upon registering an application. + * @param state The state used to prevent Cross Site Request Forgery. Should be something that is hard to guess. + * @param grantedAccess An array telling which access the application would like to be granted by the enduser. See full list here: http://developer.linkedin.com/documents/authentication. + * @return An initialized instance. + **/ ++ (id)applicationWithRedirectURL:(NSString *)redirectURL clientId:(NSString *)clientId clientSecret:(NSString *)clientSecret state:(NSString *)state grantedAccess:(NSArray *)grantedAccess; + +/** ************************************************************************************************ ** + * @name Attributes + ** ************************************************************************************************ **/ + +/** + * Has to be a http or https url (required by LinkedIn), but other than that, the endpoint doesn't have to respond anything. The library only uses the endpoint to know when to intercept calls in the UIWebView. + **/ +@property(nonatomic, copy) NSString *redirectURL; + +/** + * The id which is provided by LinkedIn upon registering an application. + **/ +@property(nonatomic, copy) NSString *clientId; + +/** + * The secret which is provided by LinkedIn upon registering an application. + **/ +@property(nonatomic, copy) NSString *clientSecret; + +/** + * The state used to prevent Cross Site Request Forgery. Should be something that is hard to guess. + **/ +@property(nonatomic, copy) NSString *state; + +/** + * An array telling which access the application would like to be granted by the enduser. See full list here: http://developer.linkedin.com/documents/authentication. + **/ +@property(nonatomic, strong) NSArray *grantedAccess; + +/** ************************************************************************************************ ** + * @name Methods + ** ************************************************************************************************ **/ + +/** + * Returns a string composed of the `grantedAccess` parameters. + * @return All granted access parameters in a string. + **/ +- (NSString *)grantedAccessString; + +@end \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInApplication.m b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInApplication.m new file mode 100644 index 0000000..103c15b --- /dev/null +++ b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInApplication.m @@ -0,0 +1,50 @@ +// LIALinkedInApplication.m +// +// Copyright (c) 2013 Ancientprogramming +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#import "LIALinkedInApplication.h" + + +@implementation LIALinkedInApplication + +- (id)initWithRedirectURL:(NSString *)redirectURL clientId:(NSString *)clientId clientSecret:(NSString *)clientSecret state:(NSString *)state grantedAccess:(NSArray *)grantedAccess { + self = [super init]; + if (self) { + self.redirectURL = redirectURL; + self.clientId = clientId; + self.clientSecret = clientSecret; + self.state = state; + self.grantedAccess = grantedAccess; + } + + return self; +} + ++ (id)applicationWithRedirectURL:(NSString *)redirectURL clientId:(NSString *)clientId clientSecret:(NSString *)clientSecret state:(NSString *)state grantedAccess:(NSArray *)grantedAccess { + return [[self alloc] initWithRedirectURL:redirectURL clientId:clientId clientSecret:clientSecret state:state grantedAccess:grantedAccess]; +} + +- (NSString *)grantedAccessString { + return [self.grantedAccess componentsJoinedByString: @"%20"]; +} + +@end \ No newline at end of file diff --git a/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInAuthorizationViewController.h b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInAuthorizationViewController.h new file mode 100644 index 0000000..59e55e8 --- /dev/null +++ b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInAuthorizationViewController.h @@ -0,0 +1,51 @@ +// LIALinkedInAuthorizationViewController.h +// +// Copyright (c) 2013 Ancientprogramming +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +#import +#import "LIALinkedInApplication.h" + +typedef void(^LIAAuthorizationCodeSuccessCallback)(NSString *code); +typedef void(^LIAAuthorizationCodeCancelCallback)(void); +typedef void(^LIAAuthorizationCodeFailureCallback)(NSError *errorReason); + +/** + * View Controller subclass containing a `UIWebView` which will be used to display the LinkedIN web UI to perform the login. + **/ +@interface LIALinkedInAuthorizationViewController : UIViewController + +/** ************************************************************************************************ ** + * @name Initializers + ** ************************************************************************************************ **/ + +/** + * Default initializer. + * @param application A `LIALinkedInApplication` configured instance. + * @param success A success block. + * @param cancel A cancel block. + * @param failure A failure block. + * @returns An initialized instance + **/ +- (id)initWithApplication:(LIALinkedInApplication *)application + success:(LIAAuthorizationCodeSuccessCallback)success + cancel:(LIAAuthorizationCodeCancelCallback)cancel + failure:(LIAAuthorizationCodeFailureCallback)failure; + +@end diff --git a/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInAuthorizationViewController.m b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInAuthorizationViewController.m new file mode 100644 index 0000000..7fa273e --- /dev/null +++ b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInAuthorizationViewController.m @@ -0,0 +1,175 @@ +// LIALinkedInAuthorizationViewController.m +// +// Copyright (c) 2013 Ancientprogramming +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +#import "LIALinkedInAuthorizationViewController.h" +#import "NSString+LIAEncode.h" + +#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) + +NSString *kLinkedInErrorDomain = @"LIALinkedInERROR"; +NSString *kLinkedInDeniedByUser = @"the+user+denied+your+request"; + +@interface LIALinkedInAuthorizationViewController () +@property(nonatomic, strong) UIWebView *authenticationWebView; +@property(nonatomic, copy) LIAAuthorizationCodeFailureCallback failureCallback; +@property(nonatomic, copy) LIAAuthorizationCodeSuccessCallback successCallback; +@property(nonatomic, copy) LIAAuthorizationCodeCancelCallback cancelCallback; +@property(nonatomic, strong) LIALinkedInApplication *application; +@end + +@interface LIALinkedInAuthorizationViewController (UIWebViewDelegate) + +@end + +@implementation LIALinkedInAuthorizationViewController + +BOOL handlingRedirectURL; + +- (id)initWithApplication:(LIALinkedInApplication *)application success:(LIAAuthorizationCodeSuccessCallback)success cancel:(LIAAuthorizationCodeCancelCallback)cancel failure:(LIAAuthorizationCodeFailureCallback)failure { + self = [super init]; + if (self) { + self.application = application; + self.successCallback = success; + self.cancelCallback = cancel; + self.failureCallback = failure; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7")) { + + self.edgesForExtendedLayout = UIRectEdgeNone; + } + + UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(tappedCancelButton:)]; + self.navigationItem.leftBarButtonItem = cancelButton; + + self.authenticationWebView = [[UIWebView alloc] init]; + self.authenticationWebView.delegate = self; + self.authenticationWebView.scalesPageToFit = YES; + [self.view addSubview:self.authenticationWebView]; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + NSString *linkedIn = [NSString stringWithFormat:@"https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=%@&scope=%@&state=%@&redirect_uri=%@", self.application.clientId, self.application.grantedAccessString, self.application.state, [self.application.redirectURL LIAEncode]]; + [self.authenticationWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:linkedIn]]]; + [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; +} + +- (void)viewWillLayoutSubviews { + [super viewWillLayoutSubviews]; + self.authenticationWebView.frame = self.view.bounds; +} + + +#pragma mark UI Action Methods + +- (void)tappedCancelButton:(id)sender { + self.cancelCallback(); +} + +@end + +@implementation LIALinkedInAuthorizationViewController (UIWebViewDelegate) + +- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { + NSURL *requestURL = [request URL]; + NSString *url = [requestURL absoluteString]; + + //prevent loading URL if it is the redirectURL + handlingRedirectURL = [url hasPrefix:self.application.redirectURL]; + + if (handlingRedirectURL) { + if ([url rangeOfString:@"error"].location != NSNotFound) { + BOOL accessDenied = [url rangeOfString:kLinkedInDeniedByUser].location != NSNotFound; + if (accessDenied) { + self.cancelCallback(); + } else { + NSString* errorDescription = [self extractGetParameter:@"error_description" fromURL:requestURL]; + NSError *error = [[NSError alloc] initWithDomain:kLinkedInErrorDomain + code:1 + userInfo:@{ + NSLocalizedDescriptionKey: errorDescription}]; + self.failureCallback(error); + } + } else { + NSString *receivedState = [self extractGetParameter:@"state" fromURL: requestURL]; + //assert that the state is as we expected it to be + if ([receivedState isEqualToString:self.application.state]) { + //extract the code from the url + NSString *authorizationCode = [self extractGetParameter:@"code" fromURL: requestURL]; + self.successCallback(authorizationCode); + } else { + NSError *error = [[NSError alloc] initWithDomain:kLinkedInErrorDomain code:2 userInfo:[[NSMutableDictionary alloc] init]]; + self.failureCallback(error); + } + } + } + return !handlingRedirectURL; +} + +- (NSString *)extractGetParameter: (NSString *) parameterName fromURL:(NSURL *)url { + NSMutableDictionary *mdQueryStrings = [[NSMutableDictionary alloc] init]; + NSString *urlString = url.query; + for (NSString *qs in [urlString componentsSeparatedByString:@"&"]) { + [mdQueryStrings setValue:[[[[qs componentsSeparatedByString:@"="] objectAtIndex:1] + stringByReplacingOccurrencesOfString:@"+" withString:@" "] + stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] + forKey:[[qs componentsSeparatedByString:@"="] objectAtIndex:0]]; + } + return [mdQueryStrings objectForKey:parameterName]; +} + +- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { + + // Turn off network activity indicator upon failure to load web view + [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; + + if (!handlingRedirectURL) + self.failureCallback(error); +} + +- (void)webViewDidFinishLoad:(UIWebView *)webView { + + // Turn off network activity indicator upon finishing web view load + [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; + + /*fix for the LinkedIn Auth window - it doesn't scale right when placed into + a webview inside of a form sheet modal. If we transform the HTML of the page + a bit, and fix the viewport to 540px (the width of the form sheet), the problem + is solved. + */ + if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { + NSString* js = + @"var meta = document.createElement('meta'); " + @"meta.setAttribute( 'name', 'viewport' ); " + @"meta.setAttribute( 'content', 'width = 540px, initial-scale = 1.0, user-scalable = yes' ); " + @"document.getElementsByTagName('head')[0].appendChild(meta)"; + + [webView stringByEvaluatingJavaScriptFromString: js]; + } +} + +@end diff --git a/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInHttpClient.h b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInHttpClient.h new file mode 100755 index 0000000..8999d47 --- /dev/null +++ b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInHttpClient.h @@ -0,0 +1,98 @@ +// LIALinkedInHttpClient.h +// +// Copyright (c) 2013 Ancientprogramming +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +/** + * Check if before AFNetworking 3.0 + */ +#if __has_include_next("AFNetworking/AFHTTPRequestOperationManager.h") + +#import +#define AFHTTPManager AFHTTPRequestOperationManager + +#elif __has_include_next("AFNetworking/AFHTTPSessionManager.h") + +#import +#define AFHTTPManager AFHTTPSessionManager +#define isSessionManager 1 + +#endif + +@class LIALinkedInApplication; + +/** + * A LinkedIn client is created using a `LIALinkedInApplication` and is the network instance that will perform all requests to the LinkedIn API. + **/ +@interface LIALinkedInHttpClient : AFHTTPManager + +/** ************************************************************************************************ ** + * @name Initializers + ** ************************************************************************************************ **/ + +/** + * A LinkedIn client is created using a `LIALinkedInApplication` and is the network instance that will perform all requests to the LinkedIn API. + * @param application A `LIALinkedInApplication` configured instance. + * @discussion This method calls `+clientForApplication:presentingViewController:` with presenting view controller as nil. + **/ ++ (LIALinkedInHttpClient *)clientForApplication:(LIALinkedInApplication *)application; + +/** + * A LinkedIn client is created using a `LIALinkedInApplication` and is the network instance that will perform all requests to the LinkedIn API. + * @param application A `LIALinkedInApplication` configured instance. + * @param viewController The view controller that the UIWebView will be modally presented from. Passing nil assumes the root view controller. + **/ ++ (LIALinkedInHttpClient *)clientForApplication:(LIALinkedInApplication *)application presentingViewController:viewController; + +/** ************************************************************************************************ ** + * @name Methods + ** ************************************************************************************************ **/ + +/** + * Returns YES if the current cached token is valid and not expired, NO otherwise. + * @return The validity of the cached token. + * @discussion When getting the token via the method `-getAccessToken:success:failure:`, the library is caching the token for further use. + **/ +- (BOOL)validToken; + +/** + * Returns the previsouldy cached LinkedIn access token. + * @return The access token. + * @discussion When getting the token via the method `-getAccessToken:success:failure:`, the library is caching the token for further use. + **/ +- (NSString *)accessToken; + +/** + * Retrieves the access token from a valid authhorization code. + * @param authorizationCode The authorization code. + * @param success A success block. The success block contains a dictoinary containing the access token keyed by the string "access_token". + * @param failure A failure block containing the error. + **/ +- (void)getAccessToken:(NSString *)authorizationCode success:(void (^)(NSDictionary *))success failure:(void (^)(NSError *))failure; + +/** + * Retrieves an authorization code. + * @param success A success block. + * @param cancel A cancel block. This block is called when the user cancels the linkedin authentication flow. + * @param failure A failure block containing the error. + **/ +- (void)getAuthorizationCode:(void (^)(NSString *))success cancel:(void (^)(void))cancel failure:(void (^)(NSError *))failure; + +@end diff --git a/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInHttpClient.m b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInHttpClient.m new file mode 100755 index 0000000..e7ed9dc --- /dev/null +++ b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/LIALinkedInHttpClient.m @@ -0,0 +1,153 @@ +// LIALinkedInHttpClient.m +// +// Copyright (c) 2013 Ancientprogramming +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +#import "LIALinkedInHttpClient.h" +#import "LIALinkedInAuthorizationViewController.h" +#import "NSString+LIAEncode.h" + +#define LINKEDIN_TOKEN_KEY @"linkedin_token" +#define LINKEDIN_EXPIRATION_KEY @"linkedin_expiration" +#define LINKEDIN_CREATION_KEY @"linkedin_token_created_at" + +@interface LIALinkedInHttpClient () +@property(nonatomic, strong) LIALinkedInApplication *application; +@property(nonatomic, weak) UIViewController *presentingViewController; +@end + +@implementation LIALinkedInHttpClient + ++ (LIALinkedInHttpClient *)clientForApplication:(LIALinkedInApplication *)application { + return [self clientForApplication:application presentingViewController:nil]; +} + ++ (LIALinkedInHttpClient *)clientForApplication:(LIALinkedInApplication *)application presentingViewController:viewController { + LIALinkedInHttpClient *client = [[self alloc] initWithBaseURL:[NSURL URLWithString:@"https://www.linkedin.com"]]; + client.application = application; + client.presentingViewController = viewController; + return client; +} + + +- (id)initWithBaseURL:(NSURL *)url { + self = [super initWithBaseURL:url]; + if (self) { + [self setResponseSerializer:[AFJSONResponseSerializer serializer]]; + } + return self; +} + +- (BOOL)validToken { + NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; + + if ([[NSDate date] timeIntervalSince1970] >= ([userDefaults doubleForKey:LINKEDIN_CREATION_KEY] + [userDefaults doubleForKey:LINKEDIN_EXPIRATION_KEY])) { + return NO; + } + else { + return YES; + } +} + +- (NSString *)accessToken { + return [[NSUserDefaults standardUserDefaults] objectForKey:LINKEDIN_TOKEN_KEY]; +} + +- (void)getAccessToken:(NSString *)authorizationCode success:(void (^)(NSDictionary *))success failure:(void (^)(NSError *))failure { + NSString *accessTokenUrl = @"/uas/oauth2/accessToken?grant_type=authorization_code&code=%@&redirect_uri=%@&client_id=%@&client_secret=%@"; + NSString *url = [NSString stringWithFormat:accessTokenUrl, authorizationCode, [self.application.redirectURL LIAEncode], self.application.clientId, self.application.clientSecret]; + +#ifdef isSessionManager // check if should use AFHTTPSessionManager or AFHTTPRequestOperationManager + [self POST:url parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + + [self storeCredentials:responseObject]; + success(responseObject); + + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + failure(error); + }]; +#else + [self POST:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { + + [self storeCredentials:responseObject]; + success(responseObject); + + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + failure(error); + }]; +#endif + +} + +- (void)storeCredentials:(id _Nullable)responseObject { + NSString *accessToken = [responseObject objectForKey:@"access_token"]; + NSTimeInterval expiration = [[responseObject objectForKey:@"expires_in"] doubleValue]; + + // store credentials + NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; + + [userDefaults setObject:accessToken forKey:LINKEDIN_TOKEN_KEY]; + [userDefaults setDouble:expiration forKey:LINKEDIN_EXPIRATION_KEY]; + [userDefaults setDouble:[[NSDate date] timeIntervalSince1970] forKey:LINKEDIN_CREATION_KEY]; + [userDefaults synchronize]; +} + +- (void)getAuthorizationCode:(void (^)(NSString *))success cancel:(void (^)(void))cancel failure:(void (^)(NSError *))failure { + LIALinkedInAuthorizationViewController *authorizationViewController = [[LIALinkedInAuthorizationViewController alloc] + initWithApplication: + self.application + success:^(NSString *code) { + [self hideAuthenticateView]; + if (success) { + success(code); + } + } + cancel:^{ + [self hideAuthenticateView]; + if (cancel) { + cancel(); + } + } failure:^(NSError *error) { + [self hideAuthenticateView]; + if (failure) { + failure(error); + } + }]; + [self showAuthorizationView:authorizationViewController]; +} + +- (void)showAuthorizationView:(LIALinkedInAuthorizationViewController *)authorizationViewController { + if (self.presentingViewController == nil) + self.presentingViewController = [[UIApplication sharedApplication] keyWindow].rootViewController; + + UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:authorizationViewController]; + + if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { + nc.modalPresentationStyle = UIModalPresentationFormSheet; + } + + [self.presentingViewController presentViewController:nc animated:YES completion:nil]; +} + +- (void)hideAuthenticateView { + [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; +} + + +@end diff --git a/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/NSString+LIAEncode.h b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/NSString+LIAEncode.h new file mode 100644 index 0000000..43af0f9 --- /dev/null +++ b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/NSString+LIAEncode.h @@ -0,0 +1,42 @@ +// NSString+LIAEncode.h +// +// Copyright (c) 2013 StocksCompare +// Created by Eugene on 04/06/2013. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import + +/** + * NSString additions for the LIALinkedIn framework. + **/ +@interface NSString (LIAEncode) + +/** ************************************************************************************************ ** + * @name Encoding + ** ************************************************************************************************ **/ + +/** + * String encoding. + * @return An encoded string. + **/ +- (NSString *)LIAEncode; + +@end diff --git a/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/NSString+LIAEncode.m b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/NSString+LIAEncode.m new file mode 100644 index 0000000..f7b4d4f --- /dev/null +++ b/Autorization:Registration Example/Pods/IOSLinkedInAPI/IOSLinkedInAPI/NSString+LIAEncode.m @@ -0,0 +1,41 @@ +// NSString+LIAEncode.m +// +// Copyright (c) 2013 StocksCompare +// Created by Eugene on 04/06/2013. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import "NSString+LIAEncode.h" + +@implementation NSString (LIAEncode) + +-(NSString *) LIAEncode { + return (NSString *)CFBridgingRelease( + CFURLCreateStringByAddingPercentEscapes( + NULL, + (__bridge CFStringRef) self, + NULL, + CFSTR("!*'();:@&=+$,/?%#[]"), + kCFStringEncodingUTF8 + ) + ); +} + +@end diff --git a/Autorization:Registration Example/Pods/IOSLinkedInAPI/LICENSE b/Autorization:Registration Example/Pods/IOSLinkedInAPI/LICENSE new file mode 100644 index 0000000..2361d68 --- /dev/null +++ b/Autorization:Registration Example/Pods/IOSLinkedInAPI/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2013 Ancientprogramming (http://www.ancientprogramming.com/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Autorization:Registration Example/Pods/IOSLinkedInAPI/README.md b/Autorization:Registration Example/Pods/IOSLinkedInAPI/README.md new file mode 100644 index 0000000..352db4c --- /dev/null +++ b/Autorization:Registration Example/Pods/IOSLinkedInAPI/README.md @@ -0,0 +1,97 @@ +IOSLinkedInAPI +============== + +*Note:* As of the 12´ May 2015 LinkedIn applied restrictions to API usage for all non partners: +See: https://developer.linkedin.com/blog/posts/2015/developer-program-changes + +---------------------------------------------------------- +A small non intrusive library that makes it easy to authenticate and authorize against LinkedIn using OAuth2. +The API uses a UIWebView to authenticate against LinkedIn. + +

+ Authentication +

+

+ Authentication +

+ +If the enduser is authenticated you end up with an accesstoken that is nessesary to retrieve data from the LinkedIn [API](https://developer.linkedin.com/apis) + +Why this library? +----------------- +Why yet another LinkedIn library? +Although there already exists a couple of iOS libraries which is wrapping the LinkedIn API, none of them *(at least to my knowledge)* is using OAuth2 which is the preferred protocol according to LinkedIn. + +How To Get Started +------------------ +The library can be fetched as a Pod from [cocoapods](http://cocoapods.org/?q=ioslinkedinapi) + +If you aren't using CocoaPods you can always download the libary and import the files from the folder IOSLinkedInAPI into your existing project. + +Example Code +------------ + +A LinkedIn client is created using a LIALinkedInApplication. +A LIALinkedInApplication defines the application which is granted access to the users linkedin data. +``` objective-c +LIALinkedInApplication *application = [LIALinkedInApplication applicationWithRedirectURL:@"http://www.ancientprogramming.com/liaexample" + clientId:@"clientId" + clientSecret:@"clientSecret" + state:@"DCEEFWF45453sdffef424" + grantedAccess:@[@"r_fullprofile", @"r_network"]]; +return [LIALinkedInHttpClient clientForApplication:application presentingViewController:nil]; +``` +* redirectURL: has to be a http or https url (required by LinkedIn), but other than that, the endpoint doesn't have to respond anything. The library only uses the endpoint to know when to intercept calls in the UIWebView. +* clientId: The id which is provided by LinkedIn upon registering an application. +* clientSecret: The secret which is provided by LinkedIn upon registering an application. +* state: the state used to prevent Cross Site Request Forgery. Should be something that is hard to guess. +* grantedAccess: An array telling which access the application would like to be granted by the enduser. See full list here: http://developer.linkedin.com/documents/authentication +* presentingViewController: The view controller that the UIWebView will be modally presented from. Passing nil assumes the root view controller. + +Afterwards the client can be used to retrieve an accesstoken and access the data using the LinkedIn API: +``` objective-c +- (IBAction)didTapConnectWithLinkedIn:(id)sender { + [self.client getAuthorizationCode:^(NSString *code) { + [self.client getAccessToken:code success:^(NSDictionary *accessTokenData) { + NSString *accessToken = [accessTokenData objectForKey:@"access_token"]; + [self requestMeWithToken:accessToken]; + } failure:^(NSError *error) { + NSLog(@"Quering accessToken failed %@", error); + }]; + } cancel:^{ + NSLog(@"Authorization was cancelled by user"); + } failure:^(NSError *error) { + NSLog(@"Authorization failed %@", error); + }]; +} + +- (void)requestMeWithToken:(NSString *)accessToken { + [self.client GET:[NSString stringWithFormat:@"https://api.linkedin.com/v1/people/~?oauth2_access_token=%@&format=json", accessToken] parameters:nil success:^(AFHTTPRequestOperation *operation, NSDictionary *result) { + NSLog(@"current user %@", result); + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + NSLog(@"failed to fetch current user %@", error); + }]; +} +``` +The code example retrieves an access token and uses it to get userdata for the user which granted the access. +The cancel callback is executed in case the user actively declines the authorization by pressing cancel button in the UIWebView (see illustration above). +The failure callbacks is executed in case either the of the steps fails for some reason. + +Example App +------------ +A small example application can be found here: +https://github.com/jeyben/IOSLinkedInAPI/tree/master/Example/IOSLinkedInAPI-Podexample/IOSLinkedInAPI-Podexample + +It uses the cocoapods. +Just run 'pods install' in the directory after your clone and you should be able to run the app afterwards + + +Next step +-------------------- +The library is currently handling the authentication and authorization. +I would like to improve the libary to also make it easy to do the actually API calls. +My current thought is to let the client remember the accessToken after it is retrieved and afterwards automatically append it to futher calls along with the format=json GET parameter. + +If you have ideas of how that could be implemented let me know. + +http://www.ancientprogramming.com diff --git a/Autorization:Registration Example/Pods/Local Podspecs/FSHelpers+Swift.podspec.json b/Autorization:Registration Example/Pods/Local Podspecs/FSHelpers+Swift.podspec.json new file mode 100644 index 0000000..cffd825 --- /dev/null +++ b/Autorization:Registration Example/Pods/Local Podspecs/FSHelpers+Swift.podspec.json @@ -0,0 +1,30 @@ +{ + "name": "FSHelpers+Swift", + "version": "2.1", + "summary": "Helpers and extensions for iOS", + "homepage": "https://github.com/fs/FSHelper/tree/master/Swift", + "license": { + "type": "MIT", + "file": "LICENSE" + }, + "authors": { + "Sergey Nikolaev": "kruperfone@gmail.com" + }, + "platforms": { + "ios": "8.0" + }, + "source": { + "git": "https://github.com/fs/FSHelper.git", + "tag": "2.1" + }, + "source_files": [ + "Swift/Helpers", + "Swift/Helpers/**/*.{swift}" + ], + "frameworks": [ + "Foundation", + "UIKit", + "QuartzCore" + ], + "requires_arc": true +} diff --git a/Autorization:Registration Example/Pods/Local Podspecs/IOSLinkedInAPI.podspec.json b/Autorization:Registration Example/Pods/Local Podspecs/IOSLinkedInAPI.podspec.json new file mode 100644 index 0000000..d6a345f --- /dev/null +++ b/Autorization:Registration Example/Pods/Local Podspecs/IOSLinkedInAPI.podspec.json @@ -0,0 +1,25 @@ +{ + "name": "IOSLinkedInAPI", + "version": "2.0.0", + "license": "MIT", + "summary": "IOS LinkedIn API capable of accessing LinkedIn using oauth2. Using a UIWebView to fetch the authorization code.", + "homepage": "https://github.com/jeyben/IOSLinkedInAPI", + "authors": { + "Jacob von Eyben": "jacobvoneyben@gmail.com", + "Eduardo Fonseca": "hello@eduardo-fonseca.com" + }, + "source": { + "git": "https://github.com/jeyben/IOSLinkedInAPI.git", + "tag": "2.0.0" + }, + "source_files": "IOSLinkedInAPI", + "requires_arc": true, + "platforms": { + "ios": "6.0" + }, + "dependencies": { + "AFNetworking": [ + ">= 2.0.0" + ] + } +} diff --git a/Autorization:Registration Example/Pods/MagicalRecord/LICENSE b/Autorization:Registration Example/Pods/MagicalRecord/LICENSE new file mode 100644 index 0000000..bc29267 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/LICENSE @@ -0,0 +1,26 @@ + Copyright (c) 2010-2015, Magical Panda Software, LLC + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + * Link to the MagicalRecord Repository at https://github.com/magicalpanda/MagicalRecord in the credits section of your application + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + This software license is in accordance with the standard MIT License. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.h new file mode 100644 index 0000000..6e6b84d --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.h @@ -0,0 +1,27 @@ +// +// MagicalImportFunctions.h +// Magical Record +// +// Created by Saul Mora on 3/7/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import +#import + +NSDate * __MR_nonnull MR_adjustDateForDST(NSDate *__MR_nonnull date); +NSDate * __MR_nonnull MR_dateFromString(NSString *__MR_nonnull value, NSString *__MR_nonnull format); +NSDate * __MR_nonnull MR_dateFromNumber(NSNumber *__MR_nonnull value, BOOL milliseconds); +NSNumber * __MR_nonnull MR_numberFromString(NSString *__MR_nonnull value); +NSString * __MR_nonnull MR_attributeNameFromString(NSString *__MR_nonnull value); +NSString * __MR_nonnull MR_primaryKeyNameFromString(NSString *__MR_nonnull value); + +#if TARGET_OS_IPHONE +#import +UIColor * __MR_nullable MR_colorFromString(NSString *__MR_nonnull serializedColor); +#else +#import +NSColor * __MR_nullable MR_colorFromString(NSString *__MR_nonnull serializedColor); +#endif + +NSInteger * __MR_nullable MR_newColorComponentsFromString(NSString *__MR_nonnull serializedColor); diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.m new file mode 100644 index 0000000..bfd31a9 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.m @@ -0,0 +1,124 @@ +// +// MagicalImportFunctions.m +// Magical Record +// +// Created by Saul Mora on 3/7/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import "MagicalImportFunctions.h" + + +#pragma mark - Data import helper functions + +NSString * MR_attributeNameFromString(NSString *value) +{ + NSString *firstCharacter = [[value substringToIndex:1] capitalizedString]; + return [firstCharacter stringByAppendingString:[value substringFromIndex:1]]; +} + +NSString * MR_primaryKeyNameFromString(NSString *value) +{ + NSString *firstCharacter = [[value substringToIndex:1] lowercaseString]; + return [firstCharacter stringByAppendingFormat:@"%@ID", [value substringFromIndex:1]]; +} + +NSDate * MR_adjustDateForDST(NSDate *date) +{ + NSTimeInterval dstOffset = [[NSTimeZone localTimeZone] daylightSavingTimeOffsetForDate:date]; + NSDate *actualDate = [date dateByAddingTimeInterval:dstOffset]; + + return actualDate; +} + +NSDate * MR_dateFromString(NSString *value, NSString *format) +{ + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; + [formatter setLocale:[NSLocale currentLocale]]; + [formatter setDateFormat:format]; + + NSDate *parsedDate = [formatter dateFromString:value]; + + return parsedDate; +} + +NSDate * MR_dateFromNumber(NSNumber *value, BOOL milliseconds) +{ + NSTimeInterval timeInterval = [value doubleValue]; + if (milliseconds) { + timeInterval = timeInterval / 1000.00; + } + return [NSDate dateWithTimeIntervalSince1970:timeInterval]; +} + +NSNumber * MR_numberFromString(NSString *value) { + return [NSNumber numberWithDouble:[value doubleValue]]; +} + +NSInteger* MR_newColorComponentsFromString(NSString *serializedColor) +{ + NSScanner *colorScanner = [NSScanner scannerWithString:serializedColor]; + NSString *colorType; + [colorScanner scanUpToString:@"(" intoString:&colorType]; + + NSInteger *componentValues = malloc(4 * sizeof(NSInteger)); + if (componentValues == NULL) + { + return NULL; + } + + if ([colorType hasPrefix:@"rgba"]) + { + NSCharacterSet *rgbaCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"(,)"]; + + NSInteger *componentValue = componentValues; + while (![colorScanner isAtEnd]) + { + [colorScanner scanCharactersFromSet:rgbaCharacterSet intoString:nil]; + [colorScanner scanInteger:componentValue]; + componentValue++; + } + } + + return componentValues; +} + +#if TARGET_OS_IPHONE + +UIColor * MR_colorFromString(NSString *serializedColor) +{ + NSInteger *componentValues = MR_newColorComponentsFromString(serializedColor); + if (componentValues == NULL) + { + return nil; + } + + UIColor *color = [UIColor colorWithRed:(componentValues[0] / 255.0f) + green:(componentValues[1] / 255.0f) + blue:(componentValues[2] / 255.0f) + alpha:componentValues[3]]; + + free(componentValues); + return color; +} + +#else + +NSColor * MR_colorFromString(NSString *serializedColor) +{ + NSInteger *componentValues = MR_newColorComponentsFromString(serializedColor); + if (componentValues == NULL) + { + return nil; + } + + NSColor *color = [NSColor colorWithDeviceRed:(componentValues[0] / 255.0f) + green:(componentValues[1] / 255.0f) + blue:(componentValues[2] / 255.0f) + alpha:componentValues[3]]; + free(componentValues); + return color; +} + +#endif diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.h new file mode 100644 index 0000000..c19e451 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.h @@ -0,0 +1,17 @@ +// +// NSAttributeDescription+MagicalDataImport.h +// Magical Record +// +// Created by Saul Mora on 9/4/11. +// Copyright 2011 Magical Panda Software LLC. All rights reserved. +// + +#import +#import + +@interface NSAttributeDescription (MagicalRecord_DataImport) + +- (MR_nullable NSString *) MR_primaryKey; +- (MR_nullable id) MR_valueForKeyPath:(MR_nonnull NSString *)keyPath fromObjectData:(MR_nonnull id)objectData; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.m new file mode 100644 index 0000000..9b15133 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.m @@ -0,0 +1,73 @@ +// +// NSAttributeDescription+MagicalDataImport.m +// Magical Record +// +// Created by Saul Mora on 9/4/11. +// Copyright 2011 Magical Panda Software LLC. All rights reserved. +// + +#import "NSAttributeDescription+MagicalDataImport.h" +#import "NSManagedObject+MagicalDataImport.h" +#import "MagicalImportFunctions.h" + +@implementation NSAttributeDescription (MagicalRecord_DataImport) + +- (NSString *) MR_primaryKey; +{ + return nil; +} + +- (id) MR_valueForKeyPath:(NSString *)keyPath fromObjectData:(id)objectData; +{ + id value = [objectData valueForKeyPath:keyPath]; + + NSAttributeType attributeType = [self attributeType]; + NSString *desiredAttributeType = [[self userInfo] objectForKey:kMagicalRecordImportAttributeValueClassNameKey]; + if (desiredAttributeType) + { + if ([desiredAttributeType hasSuffix:@"Color"]) + { + value = MR_colorFromString(value); + } + } + else + { + if (attributeType == NSDateAttributeType) + { + if (![value isKindOfClass:[NSDate class]]) + { + NSString *dateFormat = [[self userInfo] objectForKey:kMagicalRecordImportCustomDateFormatKey]; + if ([value isKindOfClass:[NSNumber class]]) { + value = MR_dateFromNumber(value, [dateFormat isEqualToString:kMagicalRecordImportUnixTimeString]); + } + else { + value = MR_dateFromString([value description], dateFormat ?: kMagicalRecordImportDefaultDateFormatString); + } + } + } + else if (attributeType == NSInteger16AttributeType || + attributeType == NSInteger32AttributeType || + attributeType == NSInteger64AttributeType || + attributeType == NSDecimalAttributeType || + attributeType == NSDoubleAttributeType || + attributeType == NSFloatAttributeType) { + if (![value isKindOfClass:[NSNumber class]] && value != [NSNull null]) { + value = MR_numberFromString([value description]); + } + } + else if (attributeType == NSBooleanAttributeType) { + if (![value isKindOfClass:[NSNumber class]] && value != [NSNull null]) { + value = [NSNumber numberWithBool:[value boolValue]]; + } + } + else if (attributeType == NSStringAttributeType) { + if (![value isKindOfClass:[NSString class]] && value != [NSNull null]) { + value = [value description]; + } + } + } + + return value == [NSNull null] ? nil : value; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.h new file mode 100644 index 0000000..a7808e0 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.h @@ -0,0 +1,28 @@ +// +// NSEntityDescription+MagicalDataImport.h +// Magical Record +// +// Created by Saul Mora on 9/5/11. +// Copyright 2011 Magical Panda Software LLC. All rights reserved. +// + +#import +#import + +@interface NSEntityDescription (MagicalRecord_DataImport) + +- (MR_nullable NSAttributeDescription *) MR_primaryAttributeToRelateBy; +- (MR_nonnull NSManagedObject *) MR_createInstanceInContext:(MR_nonnull NSManagedObjectContext *)context; + +/** + * Safely returns an attribute description for the given name, otherwise returns nil. In certain circumstances, the keys of the dictionary returned by `attributesByName` are not standard NSStrings and won't match using object subscripting or standard `objectForKey:` lookups. + * + * There may be performance implications to using this method if your entity has hundreds or thousands of attributes. + * + * @param name Name of the attribute description in the `attributesByName` dictionary on this instance + * + * @return The attribute description for the given name, otherwise nil + */ +- (MR_nullable NSAttributeDescription *) MR_attributeDescriptionForName:(MR_nonnull NSString *)name; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.m new file mode 100644 index 0000000..f292207 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.m @@ -0,0 +1,63 @@ +// +// NSEntityDescription+MagicalDataImport.m +// Magical Record +// +// Created by Saul Mora on 9/5/11. +// Copyright 2011 Magical Panda Software LLC. All rights reserved. +// + +#import "NSEntityDescription+MagicalDataImport.h" +#import "NSManagedObject+MagicalDataImport.h" +#import "NSManagedObject+MagicalRecord.h" +#import "MagicalImportFunctions.h" +#import "MagicalRecordLogging.h" + +@implementation NSEntityDescription (MagicalRecord_DataImport) + +- (NSAttributeDescription *) MR_primaryAttributeToRelateBy; +{ + NSString *lookupKey = [[self userInfo] objectForKey:kMagicalRecordImportRelationshipLinkedByKey] ?: MR_primaryKeyNameFromString([self name]); + NSAttributeDescription *attributeDescription = [self MR_attributeDescriptionForName:lookupKey]; + + if (attributeDescription == nil) + { + MRLogError( + @"Invalid value for key '%@' in '%@' entity. Remove this key or add attribute '%@'\n", + kMagicalRecordImportRelationshipLinkedByKey, + self.name, + lookupKey); + } + + return attributeDescription; +} + +- (NSManagedObject *) MR_createInstanceInContext:(NSManagedObjectContext *)context; +{ + Class relatedClass = NSClassFromString([self managedObjectClassName]); + NSManagedObject *newInstance = [relatedClass MR_createEntityInContext:context]; + + return newInstance; +} + +- (NSAttributeDescription *) MR_attributeDescriptionForName:(NSString *)name; +{ + __block NSAttributeDescription *attributeDescription; + + NSDictionary *attributesByName = [self attributesByName]; + + if ([attributesByName count] == 0) { + return nil; + } + + [attributesByName enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + if ([key isEqualToString:name]) { + attributeDescription = obj; + + *stop = YES; + } + }]; + + return attributeDescription; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.h new file mode 100644 index 0000000..afad66f --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.h @@ -0,0 +1,18 @@ +// +// NSNumber+MagicalDataImport.h +// Magical Record +// +// Created by Saul Mora on 9/4/11. +// Copyright 2011 Magical Panda Software LLC. All rights reserved. +// + +#import +#import +#import + +@interface NSNumber (MagicalRecord_DataImport) + +- (MR_nullable NSString *)MR_lookupKeyForAttribute:(MR_nonnull NSAttributeDescription *)attributeInfo; +- (MR_nonnull id)MR_relatedValueForRelationship:(MR_nonnull NSRelationshipDescription *)relationshipInfo; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.m new file mode 100644 index 0000000..d7458ad --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.m @@ -0,0 +1,23 @@ +// +// NSNumber+MagicalDataImport.m +// Magical Record +// +// Created by Saul Mora on 9/4/11. +// Copyright 2011 Magical Panda Software LLC. All rights reserved. +// + +#import "NSNumber+MagicalDataImport.h" + +@implementation NSNumber (MagicalRecord_DataImport) + +- (NSString *)MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo +{ + return nil; +} + +- (id)MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo +{ + return self; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.h new file mode 100644 index 0000000..cbe7ffa --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.h @@ -0,0 +1,21 @@ +// +// NSDictionary+MagicalDataImport.h +// Magical Record +// +// Created by Saul Mora on 9/4/11. +// Copyright 2011 Magical Panda Software LLC. All rights reserved. +// + +#import +#import +#import + +@interface NSObject (MagicalRecord_DataImport) + +- (MR_nullable NSString *) MR_lookupKeyForAttribute:(MR_nonnull NSAttributeDescription *)attributeInfo; +- (MR_nullable id) MR_valueForAttribute:(MR_nonnull NSAttributeDescription *)attributeInfo; + +- (MR_nullable NSString *) MR_lookupKeyForRelationship:(MR_nonnull NSRelationshipDescription *)relationshipInfo; +- (MR_nullable id) MR_relatedValueForRelationship:(MR_nonnull NSRelationshipDescription *)relationshipInfo; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.m new file mode 100644 index 0000000..8e84b65 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.m @@ -0,0 +1,70 @@ +// +// NSDictionary+MagicalDataImport.m +// Magical Record +// +// Created by Saul Mora on 9/4/11. +// Copyright 2011 Magical Panda Software LLC. All rights reserved. +// + +#import "NSObject+MagicalDataImport.h" +#import "NSAttributeDescription+MagicalDataImport.h" +#import "NSEntityDescription+MagicalDataImport.h" +#import "NSManagedObject+MagicalDataImport.h" +#import "NSRelationshipDescription+MagicalDataImport.h" +#import "MagicalRecordLogging.h" + +NSUInteger const kMagicalRecordImportMaximumAttributeFailoverDepth = 10; + + +@implementation NSObject (MagicalRecord_DataImport) + +- (NSString *) MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo; +{ + NSString *attributeName = [attributeInfo name]; + NSString *lookupKey = [[attributeInfo userInfo] objectForKey:kMagicalRecordImportAttributeKeyMapKey] ?: attributeName; + + id value = [self valueForKeyPath:lookupKey]; + + for (NSUInteger i = 1; i < kMagicalRecordImportMaximumAttributeFailoverDepth && value == nil; i++) + { + attributeName = [NSString stringWithFormat:@"%@.%lu", kMagicalRecordImportAttributeKeyMapKey, (unsigned long)i]; + lookupKey = [[attributeInfo userInfo] objectForKey:attributeName]; + if (lookupKey == nil) + { + return nil; + } + value = [self valueForKeyPath:lookupKey]; + } + + return value != nil ? lookupKey : nil; +} + +- (id) MR_valueForAttribute:(NSAttributeDescription *)attributeInfo +{ + NSString *lookupKey = [self MR_lookupKeyForAttribute:attributeInfo]; + return lookupKey ? [self valueForKeyPath:lookupKey] : nil; +} + +- (NSString *) MR_lookupKeyForRelationship:(NSRelationshipDescription *)relationshipInfo +{ + NSEntityDescription *destinationEntity = [relationshipInfo destinationEntity]; + if (destinationEntity == nil) + { + MRLogError(@"Unable to find entity for type '%@'", [self valueForKey:kMagicalRecordImportRelationshipTypeKey]); + return nil; + } + + NSString *primaryKeyName = [relationshipInfo MR_primaryKey]; + NSAttributeDescription *primaryKeyAttribute = [destinationEntity MR_attributeDescriptionForName:primaryKeyName]; + NSString *lookupKey = [self MR_lookupKeyForAttribute:primaryKeyAttribute] ?: [primaryKeyAttribute name]; + + return lookupKey; +} + +- (id) MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo +{ + NSString *lookupKey = [self MR_lookupKeyForRelationship:relationshipInfo]; + return lookupKey ? [self valueForKeyPath:lookupKey] : nil; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.h new file mode 100644 index 0000000..e0d1d0f --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.h @@ -0,0 +1,16 @@ +// +// NSRelationshipDescription+MagicalDataImport.h +// Magical Record +// +// Created by Saul Mora on 9/4/11. +// Copyright 2011 Magical Panda Software LLC. All rights reserved. +// + +#import +#import + +@interface NSRelationshipDescription (MagicalRecord_DataImport) + +- (MR_nonnull NSString *) MR_primaryKey; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.m new file mode 100644 index 0000000..e3b8746 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.m @@ -0,0 +1,23 @@ +// +// NSRelationshipDescription+MagicalDataImport.m +// Magical Record +// +// Created by Saul Mora on 9/4/11. +// Copyright 2011 Magical Panda Software LLC. All rights reserved. +// + +#import "NSRelationshipDescription+MagicalDataImport.h" +#import "NSManagedObject+MagicalDataImport.h" +#import "MagicalImportFunctions.h" + +@implementation NSRelationshipDescription (MagicalRecord_DataImport) + +- (NSString *) MR_primaryKey; +{ + NSString *primaryKeyName = [[self userInfo] objectForKey:kMagicalRecordImportRelationshipLinkedByKey] ?: + MR_primaryKeyNameFromString([[self destinationEntity] name]); + + return primaryKeyName; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.h new file mode 100644 index 0000000..c398d89 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.h @@ -0,0 +1,17 @@ +// +// NSString+MagicalRecord_MagicalDataImport.h +// Magical Record +// +// Created by Saul Mora on 12/10/11. +// Copyright (c) 2011 Magical Panda Software LLC. All rights reserved. +// + +#import +#import +#import + +@interface NSString (MagicalRecord_DataImport) + +- (MR_nonnull NSString *) MR_capitalizedFirstCharacterString; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.m new file mode 100644 index 0000000..6af78db --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.m @@ -0,0 +1,35 @@ +// +// NSString+MagicalRecord_MagicalDataImport.m +// Magical Record +// +// Created by Saul Mora on 12/10/11. +// Copyright (c) 2011 Magical Panda Software LLC. All rights reserved. +// + +#import "NSString+MagicalDataImport.h" + + +@implementation NSString (MagicalRecord_DataImport) + +- (NSString *) MR_capitalizedFirstCharacterString; +{ + if ([self length] > 0) + { + NSString *firstChar = [[self substringToIndex:1] capitalizedString]; + return [firstChar stringByAppendingString:[self substringFromIndex:1]]; + } + return self; +} + +- (id) MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo +{ + return self; +} + +- (NSString *) MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo +{ + return nil; +} + +@end + diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.h new file mode 100644 index 0000000..00f5c95 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.h @@ -0,0 +1,69 @@ +// +// NSManagedObject+MagicalAggregation.h +// Magical Record +// +// Created by Saul Mora on 3/7/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import +#import + +@interface NSManagedObject (MagicalAggregation) + ++ (MR_nonnull NSNumber *) MR_numberOfEntities; ++ (MR_nonnull NSNumber *) MR_numberOfEntitiesWithContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nonnull NSNumber *) MR_numberOfEntitiesWithPredicate:(MR_nullable NSPredicate *)searchTerm; ++ (MR_nonnull NSNumber *) MR_numberOfEntitiesWithPredicate:(MR_nullable NSPredicate *)searchTerm inContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (NSUInteger) MR_countOfEntities; ++ (NSUInteger) MR_countOfEntitiesWithContext:(MR_nonnull NSManagedObjectContext *)context; ++ (NSUInteger) MR_countOfEntitiesWithPredicate:(MR_nullable NSPredicate *)searchFilter; ++ (NSUInteger) MR_countOfEntitiesWithPredicate:(MR_nullable NSPredicate *)searchFilter inContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (BOOL) MR_hasAtLeastOneEntity; ++ (BOOL) MR_hasAtLeastOneEntityInContext:(MR_nonnull NSManagedObjectContext *)context; + +- (MR_nullable id) MR_minValueFor:(MR_nonnull NSString *)property; +- (MR_nullable id) MR_maxValueFor:(MR_nonnull NSString *)property; + ++ (MR_nullable id) MR_aggregateOperation:(MR_nonnull NSString *)function onAttribute:(MR_nonnull NSString *)attributeName withPredicate:(MR_nullable NSPredicate *)predicate inContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nullable id) MR_aggregateOperation:(MR_nonnull NSString *)function onAttribute:(MR_nonnull NSString *)attributeName withPredicate:(MR_nullable NSPredicate *)predicate; + +/** + * Supports aggregating values using a key-value collection operator that can be grouped by an attribute. + * See https://developer.apple.com/library/ios/documentation/cocoa/conceptual/KeyValueCoding/Articles/CollectionOperators.html for a list of valid collection operators. + * + * @since 2.3.0 + * + * @param collectionOperator Collection operator + * @param attributeName Entity attribute to apply the collection operator to + * @param predicate Predicate to filter results + * @param groupingKeyPath Key path to group results by + * @param context Context to perform the request in + * + * @return Results of the collection operator, filtered by the provided predicate and grouped by the provided key path + */ ++ (MR_nullable NSArray *) MR_aggregateOperation:(MR_nonnull NSString *)collectionOperator onAttribute:(MR_nonnull NSString *)attributeName withPredicate:(MR_nullable NSPredicate *)predicate groupBy:(MR_nullable NSString*)groupingKeyPath inContext:(MR_nonnull NSManagedObjectContext *)context; + +/** + * Supports aggregating values using a key-value collection operator that can be grouped by an attribute. + * See https://developer.apple.com/library/ios/documentation/cocoa/conceptual/KeyValueCoding/Articles/CollectionOperators.html for a list of valid collection operators. + * + * This method is run against the default MagicalRecordStack's context. + * + * @since 2.3.0 + * + * @param collectionOperator Collection operator + * @param attributeName Entity attribute to apply the collection operator to + * @param predicate Predicate to filter results + * @param groupingKeyPath Key path to group results by + * + * @return Results of the collection operator, filtered by the provided predicate and grouped by the provided key path + */ ++ (MR_nullable NSArray *) MR_aggregateOperation:(MR_nonnull NSString *)collectionOperator onAttribute:(MR_nonnull NSString *)attributeName withPredicate:(MR_nullable NSPredicate *)predicate groupBy:(MR_nullable NSString*)groupingKeyPath; + +- (MR_nullable instancetype) MR_objectWithMinValueFor:(MR_nonnull NSString *)property; +- (MR_nullable instancetype) MR_objectWithMinValueFor:(MR_nonnull NSString *)property inContext:(MR_nonnull NSManagedObjectContext *)context; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.m new file mode 100644 index 0000000..1c8390c --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.m @@ -0,0 +1,199 @@ +// +// NSManagedObject+MagicalAggregation.m +// Magical Record +// +// Created by Saul Mora on 3/7/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import "NSManagedObject+MagicalAggregation.h" +#import "NSEntityDescription+MagicalDataImport.h" +#import "NSManagedObjectContext+MagicalRecord.h" +#import "NSManagedObjectContext+MagicalThreading.h" +#import "NSManagedObject+MagicalRequests.h" +#import "NSManagedObject+MagicalRecord.h" +#import "NSManagedObject+MagicalFinders.h" +#import "MagicalRecord+ErrorHandling.h" + +@implementation NSManagedObject (MagicalAggregation) + +#pragma mark - +#pragma mark Number of Entities + ++ (NSNumber *) MR_numberOfEntitiesWithContext:(NSManagedObjectContext *)context +{ + return [NSNumber numberWithUnsignedInteger:[self MR_countOfEntitiesWithContext:context]]; +} + ++ (NSNumber *) MR_numberOfEntities +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_numberOfEntitiesWithContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSNumber *) MR_numberOfEntitiesWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context +{ + return [NSNumber numberWithUnsignedInteger:[self MR_countOfEntitiesWithPredicate:searchTerm inContext:context]]; +} + ++ (NSNumber *) MR_numberOfEntitiesWithPredicate:(NSPredicate *)searchTerm; +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_numberOfEntitiesWithPredicate:searchTerm + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSUInteger) MR_countOfEntities; +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_countOfEntitiesWithContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSUInteger) MR_countOfEntitiesWithContext:(NSManagedObjectContext *)context; +{ + return [self MR_countOfEntitiesWithPredicate:nil inContext:context]; +} + ++ (NSUInteger) MR_countOfEntitiesWithPredicate:(NSPredicate *)searchFilter; +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_countOfEntitiesWithPredicate:searchFilter inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSUInteger) MR_countOfEntitiesWithPredicate:(NSPredicate *)searchFilter inContext:(NSManagedObjectContext *)context; +{ + NSError *error = nil; + NSFetchRequest *request = [self MR_createFetchRequestInContext:context]; + + if (searchFilter) + { + [request setPredicate:searchFilter]; + } + + NSUInteger count = [context countForFetchRequest:request error:&error]; + [MagicalRecord handleErrors:error]; + + return count; +} + ++ (BOOL) MR_hasAtLeastOneEntity +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_hasAtLeastOneEntityInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (BOOL) MR_hasAtLeastOneEntityInContext:(NSManagedObjectContext *)context +{ + return [[self MR_numberOfEntitiesWithContext:context] intValue] > 0; +} + +- (id) MR_minValueFor:(NSString *)property +{ + NSManagedObject *obj = [[self class] MR_findFirstByAttribute:property + withValue:[NSString stringWithFormat:@"min(%@)", property]]; + + return [obj valueForKey:property]; +} + +- (id) MR_maxValueFor:(NSString *)property +{ + NSManagedObject *obj = [[self class] MR_findFirstByAttribute:property + withValue:[NSString stringWithFormat:@"max(%@)", property]]; + + return [obj valueForKey:property]; +} + +- (id) MR_objectWithMinValueFor:(NSString *)property inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [[self class] MR_createFetchRequestInContext:context]; + + NSPredicate *searchFor = [NSPredicate predicateWithFormat:@"SELF = %@ AND %K = min(%@)", self, property, property]; + [request setPredicate:searchFor]; + + return [[self class] MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; +} + +- (id) MR_objectWithMinValueFor:(NSString *)property +{ + return [self MR_objectWithMinValueFor:property inContext:[self managedObjectContext]]; +} + ++ (id) MR_aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context +{ + NSExpression *ex = [NSExpression expressionForFunction:function + arguments:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:attributeName]]]; + + NSExpressionDescription *ed = [[NSExpressionDescription alloc] init]; + [ed setName:@"result"]; + [ed setExpression:ex]; + + // determine the type of attribute, required to set the expression return type + NSAttributeDescription *attributeDescription = [[self MR_entityDescriptionInContext:context] MR_attributeDescriptionForName:attributeName]; + [ed setExpressionResultType:[attributeDescription attributeType]]; + NSArray *properties = [NSArray arrayWithObject:ed]; + + NSFetchRequest *request = [self MR_requestAllWithPredicate:predicate inContext:context]; + [request setPropertiesToFetch:properties]; + [request setResultType:NSDictionaryResultType]; + + NSDictionary *resultsDictionary = [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; + + return [resultsDictionary objectForKey:@"result"]; +} + ++ (id) MR_aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_aggregateOperation:function + onAttribute:attributeName + withPredicate:predicate + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSArray *) MR_aggregateOperation:(NSString *)collectionOperator onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate groupBy:(NSString *)groupingKeyPath inContext:(NSManagedObjectContext *)context; +{ + NSExpression *expression = [NSExpression expressionForFunction:collectionOperator arguments:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:attributeName]]]; + + NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init]; + + [expressionDescription setName:@"result"]; + [expressionDescription setExpression:expression]; + + NSAttributeDescription *attributeDescription = [[[self MR_entityDescriptionInContext:context] attributesByName] objectForKey:attributeName]; + [expressionDescription setExpressionResultType:[attributeDescription attributeType]]; + NSArray *properties = @[groupingKeyPath, expressionDescription]; + + NSFetchRequest *fetchRequest = [self MR_requestAllWithPredicate:predicate inContext:context]; + [fetchRequest setPropertiesToFetch:properties]; + [fetchRequest setResultType:NSDictionaryResultType]; + [fetchRequest setPropertiesToGroupBy:@[groupingKeyPath]]; + + NSArray *results = [self MR_executeFetchRequest:fetchRequest inContext:context]; + + return results; +} + ++ (NSArray *) MR_aggregateOperation:(NSString *)collectionOperator onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate groupBy:(NSString *)groupingKeyPath; +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_aggregateOperation:collectionOperator + onAttribute:attributeName + withPredicate:predicate groupBy:groupingKeyPath + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.h new file mode 100644 index 0000000..3172d2a --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.h @@ -0,0 +1,40 @@ +// +// NSManagedObject+JSONHelpers.h +// +// Created by Saul Mora on 6/28/11. +// Copyright 2011 Magical Panda Software LLC. All rights reserved. +// + +#import +#import + +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordImportCustomDateFormatKey; +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordImportDefaultDateFormatString; +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordImportUnixTimeString; +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordImportAttributeKeyMapKey; +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordImportAttributeValueClassNameKey; + +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordImportRelationshipMapKey; +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordImportRelationshipLinkedByKey; +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordImportRelationshipTypeKey; + +@protocol MagicalRecordDataImportProtocol + +@optional +- (BOOL) shouldImport:(MR_nonnull id)data; +- (void) willImport:(MR_nonnull id)data; +- (void) didImport:(MR_nonnull id)data; + +@end + +@interface NSManagedObject (MagicalRecord_DataImport) + +- (BOOL) MR_importValuesForKeysWithObject:(MR_nonnull id)objectData; + ++ (MR_nonnull instancetype) MR_importFromObject:(MR_nonnull id)data; ++ (MR_nonnull instancetype) MR_importFromObject:(MR_nonnull id)data inContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (MR_nonnull MR_NSArrayOfNSManagedObjects) MR_importFromArray:(MR_nonnull MR_GENERIC(NSArray, NSDictionary *) *)listOfObjectData; ++ (MR_nonnull MR_NSArrayOfNSManagedObjects) MR_importFromArray:(MR_nonnull MR_GENERIC(NSArray, NSDictionary *) *)listOfObjectData inContext:(MR_nonnull NSManagedObjectContext *)context; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.m new file mode 100644 index 0000000..7921036 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.m @@ -0,0 +1,359 @@ +// +// NSManagedObject+JSONHelpers.m +// +// Created by Saul Mora on 6/28/11. +// Copyright 2011 Magical Panda Software LLC. All rights reserved. +// + +#import "NSObject+MagicalDataImport.h" +#import "NSAttributeDescription+MagicalDataImport.h" +#import "NSEntityDescription+MagicalDataImport.h" +#import "NSManagedObjectContext+MagicalThreading.h" +#import "NSManagedObject+MagicalDataImport.h" +#import "NSManagedObject+MagicalFinders.h" +#import "NSManagedObject+MagicalRecord.h" +#import "NSRelationshipDescription+MagicalDataImport.h" +#import "NSString+MagicalDataImport.h" +#import "MagicalImportFunctions.h" +#import "MagicalRecordLogging.h" +#import + +NSString * const kMagicalRecordImportCustomDateFormatKey = @"dateFormat"; +NSString * const kMagicalRecordImportDefaultDateFormatString = @"yyyy-MM-dd'T'HH:mm:ssz"; +NSString * const kMagicalRecordImportUnixTimeString = @"UnixTime"; + +NSString * const kMagicalRecordImportAttributeKeyMapKey = @"mappedKeyName"; +NSString * const kMagicalRecordImportAttributeValueClassNameKey = @"attributeValueClassName"; + +NSString * const kMagicalRecordImportRelationshipMapKey = @"mappedKeyName"; +NSString * const kMagicalRecordImportRelationshipLinkedByKey = @"relatedByAttribute"; +NSString * const kMagicalRecordImportRelationshipTypeKey = @"type"; //this needs to be revisited + +NSString * const kMagicalRecordImportAttributeUseDefaultValueWhenNotPresent = @"useDefaultValueWhenNotPresent"; + +@implementation NSManagedObject (MagicalRecord_DataImport) + +- (BOOL) MR_importValue:(id)value forKey:(NSString *)key +{ + NSString *selectorString = [NSString stringWithFormat:@"import%@:", [key MR_capitalizedFirstCharacterString]]; + SEL selector = NSSelectorFromString(selectorString); + + if ([self respondsToSelector:selector]) + { + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:selector]]; + [invocation setTarget:self]; + [invocation setSelector:selector]; + [invocation setArgument:&value atIndex:2]; + [invocation invoke]; + + BOOL returnValue = YES; + [invocation getReturnValue:&returnValue]; + return returnValue; + } + + return NO; +} + +- (void) MR_setAttributes:(NSDictionary *)attributes forKeysWithObject:(id)objectData +{ + for (NSString *attributeName in attributes) + { + NSAttributeDescription *attributeInfo = [attributes valueForKey:attributeName]; + NSString *lookupKeyPath = [objectData MR_lookupKeyForAttribute:attributeInfo]; + + if (lookupKeyPath) + { + id value = [attributeInfo MR_valueForKeyPath:lookupKeyPath fromObjectData:objectData]; + if (![self MR_importValue:value forKey:attributeName]) + { + [self setValue:value forKey:attributeName]; + } + } + else + { + if ([[[attributeInfo userInfo] objectForKey:kMagicalRecordImportAttributeUseDefaultValueWhenNotPresent] boolValue]) + { + id value = [attributeInfo defaultValue]; + if (![self MR_importValue:value forKey:attributeName]) + { + [self setValue:value forKey:attributeName]; + } + } + } + } +} + +- (NSManagedObject *) MR_findObjectForRelationship:(NSRelationshipDescription *)relationshipInfo withData:(id)singleRelatedObjectData +{ + NSEntityDescription *destinationEntity = [relationshipInfo destinationEntity]; + NSManagedObject *objectForRelationship = nil; + + id relatedValue; + + // if its a primitive class, than handle singleRelatedObjectData as the key for relationship + if ([singleRelatedObjectData isKindOfClass:[NSString class]] || + [singleRelatedObjectData isKindOfClass:[NSNumber class]]) + { + relatedValue = singleRelatedObjectData; + } + else if ([singleRelatedObjectData isKindOfClass:[NSDictionary class]]) + { + relatedValue = [singleRelatedObjectData MR_relatedValueForRelationship:relationshipInfo]; + } + else + { + relatedValue = singleRelatedObjectData; + } + + if (relatedValue) + { + NSManagedObjectContext *context = [self managedObjectContext]; + Class managedObjectClass = NSClassFromString([destinationEntity managedObjectClassName]); + NSString *primaryKey = [relationshipInfo MR_primaryKey]; + objectForRelationship = [managedObjectClass MR_findFirstByAttribute:primaryKey + withValue:relatedValue + inContext:context]; + } + + return objectForRelationship; +} + +- (void) MR_addObject:(NSManagedObject *)relatedObject forRelationship:(NSRelationshipDescription *)relationshipInfo +{ + NSAssert2(relatedObject != nil, @"Cannot add nil to %@ for attribute %@", NSStringFromClass([self class]), [relationshipInfo name]); + NSAssert2([[relatedObject entity] isKindOfEntity:[relationshipInfo destinationEntity]], @"related object entity %@ not same as destination entity %@", [relatedObject entity], [relationshipInfo destinationEntity]); + + //add related object to set + NSString *addRelationMessageFormat = @"set%@:"; + id relationshipSource = self; + if ([relationshipInfo isToMany]) + { + addRelationMessageFormat = @"add%@Object:"; + if ([relationshipInfo respondsToSelector:@selector(isOrdered)] && [relationshipInfo isOrdered]) + { + //Need to get the ordered set + NSString *selectorName = [[relationshipInfo name] stringByAppendingString:@"Set"]; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + relationshipSource = [self performSelector:NSSelectorFromString(selectorName)]; +#pragma clang diagnostic pop + addRelationMessageFormat = @"addObject:"; + } + } + + NSString *addRelatedObjectToSetMessage = [NSString stringWithFormat:addRelationMessageFormat, MR_attributeNameFromString([relationshipInfo name])]; + + SEL selector = NSSelectorFromString(addRelatedObjectToSetMessage); + + @try + { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + [relationshipSource performSelector:selector withObject:relatedObject]; +#pragma clang diagnostic pop + } + @catch (NSException *exception) + { + MRLogError(@"Adding object for relationship failed: %@\n", relationshipInfo); + MRLogError(@"relatedObject.entity %@", [relatedObject entity]); + MRLogError(@"relationshipInfo.destinationEntity %@", [relationshipInfo destinationEntity]); + MRLogError(@"Add Relationship Selector: %@", addRelatedObjectToSetMessage); + MRLogError(@"perform selector error: %@", exception); + } +} + +- (void)MR_setRelationships:(NSDictionary *)relationships forKeysWithObject:(id)relationshipData withBlock:(void (^)(NSRelationshipDescription *, id))setRelationshipBlock +{ + for (NSString *relationshipName in relationships) + { + SEL shouldImportSelector = NSSelectorFromString([NSString stringWithFormat:@"shouldImport%@:", [relationshipName MR_capitalizedFirstCharacterString]]); + BOOL implementsShouldImport = (BOOL)[self respondsToSelector:shouldImportSelector]; + + NSRelationshipDescription *relationshipInfo = [relationships valueForKey:relationshipName]; + + NSString *lookupKey = [[relationshipInfo userInfo] objectForKey:kMagicalRecordImportRelationshipMapKey] ?: relationshipName; + + id relatedObjectData; + + @try + { + relatedObjectData = [relationshipData valueForKeyPath:lookupKey]; + } + @catch (NSException *exception) + { + MRLogWarn(@"Looking up a key for relationship failed while importing: %@\n", relationshipInfo); + MRLogWarn(@"lookupKey: %@", lookupKey); + MRLogWarn(@"relationshipInfo.destinationEntity %@", [relationshipInfo destinationEntity]); + MRLogWarn(@"relationshipData: %@", relationshipData); + MRLogWarn(@"Exception:\n%@: %@", [exception name], [exception reason]); + } + @finally + { + if (relatedObjectData == nil || [relatedObjectData isEqual:[NSNull null]]) + { + continue; + } + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored \ + "-Warc-performSelector-leaks" + if (implementsShouldImport && !(BOOL)[self performSelector:shouldImportSelector withObject:relatedObjectData]) + { + continue; + } +#pragma clang diagnostic pop + // Different values provided to the -shouldImport and -import methods?? + if ([self MR_importValue:relationshipData forKey:relationshipName]) + { + continue; + } + + if ([relationshipInfo isToMany] && [relatedObjectData isKindOfClass:[NSArray class]]) + { + for (id singleRelatedObjectData in relatedObjectData) + { + setRelationshipBlock(relationshipInfo, singleRelatedObjectData); + } + } + else + { + setRelationshipBlock(relationshipInfo, relatedObjectData); + } + } +} + +- (BOOL) MR_preImport:(id)objectData; +{ + if ([self respondsToSelector:@selector(shouldImport:)]) + { + BOOL shouldImport = (BOOL)[self shouldImport:objectData]; + if (!shouldImport) + { + return NO; + } + } + + if ([self respondsToSelector:@selector(willImport:)]) + { + [self willImport:objectData]; + } + + return YES; +} + +- (BOOL) MR_postImport:(id)objectData; +{ + if ([self respondsToSelector:@selector(didImport:)]) + { + [self performSelector:@selector(didImport:) withObject:objectData]; + } + + return YES; +} + +- (BOOL) MR_performDataImportFromObject:(id)objectData relationshipBlock:(void(^)(NSRelationshipDescription*, id))relationshipBlock; +{ + BOOL didStartimporting = [self MR_preImport:objectData]; + if (!didStartimporting) return NO; + + NSDictionary *attributes = [[self entity] attributesByName]; + [self MR_setAttributes:attributes forKeysWithObject:objectData]; + + NSDictionary *relationships = [[self entity] relationshipsByName]; + [self MR_setRelationships:relationships forKeysWithObject:objectData withBlock:relationshipBlock]; + + return [self MR_postImport:objectData]; +} + +- (BOOL)MR_importValuesForKeysWithObject:(id)objectData +{ + __weak typeof(self) weakself = self; + return [self MR_performDataImportFromObject:objectData + relationshipBlock:^(NSRelationshipDescription *relationshipInfo, id localObjectData) { + + NSManagedObject *relatedObject = [weakself MR_findObjectForRelationship:relationshipInfo withData:localObjectData]; + + if (relatedObject == nil) + { + NSEntityDescription *entityDescription = [relationshipInfo destinationEntity]; + relatedObject = [entityDescription MR_createInstanceInContext:[weakself managedObjectContext]]; + } + if ([localObjectData isKindOfClass:[NSDictionary class]]) + { + [relatedObject MR_importValuesForKeysWithObject:localObjectData]; + } + else if (localObjectData) + { + NSString *relatedByAttribute = [relationshipInfo MR_primaryKey]; + + if (relatedByAttribute) + { + if (![relatedObject MR_importValue:localObjectData forKey:relatedByAttribute]) + { + [relatedObject setValue:localObjectData forKey:relatedByAttribute]; + } + } + } + + [weakself MR_addObject:relatedObject forRelationship:relationshipInfo]; + }]; +} + ++ (id) MR_importFromObject:(id)objectData inContext:(NSManagedObjectContext *)context; +{ + __block NSManagedObject *managedObject; + + [context performBlockAndWait:^{ + NSAttributeDescription *primaryAttribute = [[self MR_entityDescriptionInContext:context] MR_primaryAttributeToRelateBy]; + + if (primaryAttribute != nil) + { + id value = [objectData MR_valueForAttribute:primaryAttribute]; + managedObject = [self MR_findFirstByAttribute:[primaryAttribute name] withValue:value inContext:context]; + } + if (managedObject == nil) + { + managedObject = [self MR_createEntityInContext:context]; + } + + [managedObject MR_importValuesForKeysWithObject:objectData]; + }]; + + return managedObject; +} + ++ (id) MR_importFromObject:(id)objectData +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_importFromObject:objectData inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSArray *) MR_importFromArray:(NSArray *)listOfObjectData +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_importFromArray:listOfObjectData inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSArray *) MR_importFromArray:(NSArray *)listOfObjectData inContext:(NSManagedObjectContext *)context +{ + NSMutableArray *dataObjects = [NSMutableArray array]; + + [listOfObjectData enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) + { + NSDictionary *objectData = (NSDictionary *)obj; + + NSManagedObject *dataObject = [self MR_importFromObject:objectData inContext:context]; + + [dataObjects addObject:dataObject]; + }]; + + return dataObjects; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.h new file mode 100644 index 0000000..5816a9a --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.h @@ -0,0 +1,65 @@ +// +// NSManagedObject+MagicalFinders.h +// Magical Record +// +// Created by Saul Mora on 3/7/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import +#import + +@interface NSManagedObject (MagicalFinders) + ++ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_findAll; ++ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_findAllInContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_findAllSortedBy:(MR_nonnull NSString *)sortTerm ascending:(BOOL)ascending; ++ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_findAllSortedBy:(MR_nonnull NSString *)sortTerm ascending:(BOOL)ascending inContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_findAllSortedBy:(MR_nonnull NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(MR_nullable NSPredicate *)searchTerm; ++ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_findAllSortedBy:(MR_nonnull NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(MR_nullable NSPredicate *)searchTerm inContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_findAllWithPredicate:(MR_nullable NSPredicate *)searchTerm; ++ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_findAllWithPredicate:(MR_nullable NSPredicate *)searchTerm inContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (MR_nullable instancetype) MR_findFirst; ++ (MR_nullable instancetype) MR_findFirstInContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nullable instancetype) MR_findFirstWithPredicate:(MR_nullable NSPredicate *)searchTerm; ++ (MR_nullable instancetype) MR_findFirstWithPredicate:(MR_nullable NSPredicate *)searchTerm inContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nullable instancetype) MR_findFirstWithPredicate:(MR_nullable NSPredicate *)searchterm sortedBy:(MR_nullable NSString *)property ascending:(BOOL)ascending; ++ (MR_nullable instancetype) MR_findFirstWithPredicate:(MR_nullable NSPredicate *)searchterm sortedBy:(MR_nullable NSString *)property ascending:(BOOL)ascending inContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nullable instancetype) MR_findFirstWithPredicate:(MR_nullable NSPredicate *)searchTerm andRetrieveAttributes:(MR_nullable NSArray *)attributes; ++ (MR_nullable instancetype) MR_findFirstWithPredicate:(MR_nullable NSPredicate *)searchTerm andRetrieveAttributes:(MR_nullable NSArray *)attributes inContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nullable instancetype) MR_findFirstWithPredicate:(MR_nullable NSPredicate *)searchTerm sortedBy:(MR_nullable NSString *)sortBy ascending:(BOOL)ascending andRetrieveAttributes:(MR_nullable id)attributes, ...; ++ (MR_nullable instancetype) MR_findFirstWithPredicate:(MR_nullable NSPredicate *)searchTerm sortedBy:(MR_nullable NSString *)sortBy ascending:(BOOL)ascending inContext:(MR_nonnull NSManagedObjectContext *)context andRetrieveAttributes:(MR_nullable id)attributes, ...; ++ (MR_nullable instancetype) MR_findFirstByAttribute:(MR_nonnull NSString *)attribute withValue:(MR_nonnull id)searchValue; ++ (MR_nullable instancetype) MR_findFirstByAttribute:(MR_nonnull NSString *)attribute withValue:(MR_nonnull id)searchValue inContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nullable instancetype) MR_findFirstOrderedByAttribute:(MR_nonnull NSString *)attribute ascending:(BOOL)ascending; ++ (MR_nullable instancetype) MR_findFirstOrderedByAttribute:(MR_nonnull NSString *)attribute ascending:(BOOL)ascending inContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (MR_nonnull instancetype) MR_findFirstOrCreateByAttribute:(MR_nonnull NSString *)attribute withValue:(MR_nonnull id)searchValue; ++ (MR_nonnull instancetype) MR_findFirstOrCreateByAttribute:(MR_nonnull NSString *)attribute withValue:(MR_nonnull id)searchValue inContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_findByAttribute:(MR_nonnull NSString *)attribute withValue:(MR_nonnull id)searchValue; ++ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_findByAttribute:(MR_nonnull NSString *)attribute withValue:(MR_nonnull id)searchValue inContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_findByAttribute:(MR_nonnull NSString *)attribute withValue:(MR_nonnull id)searchValue andOrderBy:(MR_nullable NSString *)sortTerm ascending:(BOOL)ascending; ++ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_findByAttribute:(MR_nonnull NSString *)attribute withValue:(MR_nonnull id)searchValue andOrderBy:(MR_nullable NSString *)sortTerm ascending:(BOOL)ascending inContext:(MR_nonnull NSManagedObjectContext *)context; + +#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR + ++ (MR_nonnull NSFetchedResultsController *) MR_fetchController:(MR_nonnull NSFetchRequest *)request delegate:(MR_nullable id)delegate useFileCache:(BOOL)useFileCache groupedBy:(MR_nullable NSString *)groupKeyPath inContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (MR_nonnull NSFetchedResultsController *) MR_fetchAllWithDelegate:(MR_nullable id)delegate; ++ (MR_nonnull NSFetchedResultsController *) MR_fetchAllWithDelegate:(MR_nullable id)delegate inContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (MR_nonnull NSFetchedResultsController *) MR_fetchAllSortedBy:(MR_nullable NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(MR_nullable NSPredicate *)searchTerm groupBy:(MR_nullable NSString *)groupingKeyPath delegate:(MR_nullable id)delegate; ++ (MR_nonnull NSFetchedResultsController *) MR_fetchAllSortedBy:(MR_nullable NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(MR_nullable NSPredicate *)searchTerm groupBy:(MR_nullable NSString *)groupingKeyPath delegate:(MR_nullable id)delegate inContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (MR_nonnull NSFetchedResultsController *) MR_fetchAllGroupedBy:(MR_nullable NSString *)group withPredicate:(MR_nullable NSPredicate *)searchTerm sortedBy:(MR_nullable NSString *)sortTerm ascending:(BOOL)ascending; ++ (MR_nonnull NSFetchedResultsController *) MR_fetchAllGroupedBy:(MR_nullable NSString *)group withPredicate:(MR_nullable NSPredicate *)searchTerm sortedBy:(MR_nullable NSString *)sortTerm ascending:(BOOL)ascending inContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (MR_nonnull NSFetchedResultsController *) MR_fetchAllGroupedBy:(MR_nullable NSString *)group withPredicate:(MR_nullable NSPredicate *)searchTerm sortedBy:(MR_nullable NSString *)sortTerm ascending:(BOOL)ascending delegate:(MR_nullable id)delegate; ++ (MR_nonnull NSFetchedResultsController *) MR_fetchAllGroupedBy:(MR_nullable NSString *)group withPredicate:(MR_nullable NSPredicate *)searchTerm sortedBy:(MR_nullable NSString *)sortTerm ascending:(BOOL)ascending delegate:(MR_nullable id)delegate inContext:(MR_nonnull NSManagedObjectContext *)context; + +#endif + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.m new file mode 100644 index 0000000..99ee986 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.m @@ -0,0 +1,420 @@ + // +// NSManagedObject+MagicalFinders.m +// Magical Record +// +// Created by Saul Mora on 3/7/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import "NSManagedObject+MagicalFinders.h" +#import "NSManagedObject+MagicalRequests.h" +#import "NSManagedObject+MagicalRecord.h" +#import "NSManagedObjectContext+MagicalThreading.h" + +@implementation NSManagedObject (MagicalFinders) + +#pragma mark - Finding Data + + ++ (NSArray *) MR_findAllInContext:(NSManagedObjectContext *)context +{ + return [self MR_executeFetchRequest:[self MR_requestAllInContext:context] inContext:context]; +} + ++ (NSArray *) MR_findAll +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_findAllInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm ascending:ascending inContext:context]; + + return [self MR_executeFetchRequest:request inContext:context]; +} + ++ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_findAllSortedBy:sortTerm + ascending:ascending + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm + ascending:ascending + withPredicate:searchTerm + inContext:context]; + + return [self MR_executeFetchRequest:request inContext:context]; +} + ++ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_findAllSortedBy:sortTerm + ascending:ascending + withPredicate:searchTerm + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + + ++ (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_createFetchRequestInContext:context]; + [request setPredicate:searchTerm]; + + return [self MR_executeFetchRequest:request + inContext:context]; +} + ++ (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_findAllWithPredicate:searchTerm + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (instancetype) MR_findFirstInContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_createFetchRequestInContext:context]; + + return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; +} + ++ (instancetype) MR_findFirst +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_findFirstInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (instancetype) MR_findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_requestFirstByAttribute:attribute withValue:searchValue inContext:context]; + return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; +} + ++ (instancetype) MR_findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_findFirstByAttribute:attribute + withValue:searchValue + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (instancetype) MR_findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; +{ + NSFetchRequest *request = [self MR_requestAllSortedBy:attribute ascending:ascending inContext:context]; + [request setFetchLimit:1]; + + return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; +} + ++ (instancetype) MR_findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending; +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_findFirstOrderedByAttribute:attribute + ascending:ascending + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (instancetype) MR_findFirstOrCreateByAttribute:(NSString *)attribute withValue:(id)searchValue +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_findFirstOrCreateByAttribute:attribute + withValue:searchValue + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (instancetype) MR_findFirstOrCreateByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context +{ + id result = [self MR_findFirstByAttribute:attribute + withValue:searchValue + inContext:context]; + + if (result != nil) { + return result; + } + + result = [self MR_createEntityInContext:context]; + [result setValue:searchValue forKey:attribute]; + + return result; +} + ++ (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchTerm +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_findFirstWithPredicate:searchTerm inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_requestFirstWithPredicate:searchTerm inContext:context]; + + return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; +} + ++ (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_requestAllSortedBy:property ascending:ascending withPredicate:searchterm inContext:context]; + + return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; +} + ++ (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_findFirstWithPredicate:searchterm + sortedBy:property + ascending:ascending + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_createFetchRequestInContext:context]; + [request setPredicate:searchTerm]; + [request setPropertiesToFetch:attributes]; + + return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; +} + ++ (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_findFirstWithPredicate:searchTerm + andRetrieveAttributes:attributes + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context andRetrieveAttributes:(id)attributes, ... +{ + NSFetchRequest *request = [self MR_requestAllSortedBy:sortBy + ascending:ascending + withPredicate:searchTerm + inContext:context]; + [request setPropertiesToFetch:[self MR_propertiesNamed:attributes inContext:context]]; + + return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; +} + ++ (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending andRetrieveAttributes:(id)attributes, ... +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_findFirstWithPredicate:searchTerm + sortedBy:sortBy + ascending:ascending + inContext:[NSManagedObjectContext MR_contextForCurrentThread] + andRetrieveAttributes:attributes]; +#pragma clang diagnostic pop +} + ++ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_requestAllWhere:attribute isEqualTo:searchValue inContext:context]; + + return [self MR_executeFetchRequest:request inContext:context]; +} + ++ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_findByAttribute:attribute + withValue:searchValue + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context +{ + NSPredicate *searchTerm = [NSPredicate predicateWithFormat:@"%K = %@", attribute, searchValue]; + NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm ascending:ascending withPredicate:searchTerm inContext:context]; + + return [self MR_executeFetchRequest:request inContext:context]; +} + ++ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_findByAttribute:attribute + withValue:searchValue + andOrderBy:sortTerm + ascending:ascending + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + + +#pragma mark - +#pragma mark NSFetchedResultsController helpers + + +#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR + ++ (NSFetchedResultsController *) MR_fetchController:(NSFetchRequest *)request delegate:(id)delegate useFileCache:(BOOL)useFileCache groupedBy:(NSString *)groupKeyPath inContext:(NSManagedObjectContext *)context; +{ + NSString *cacheName = useFileCache ? [NSString stringWithFormat:@"MagicalRecord-Cache-%@", NSStringFromClass([self class])] : nil; + + NSFetchedResultsController *controller = + [[NSFetchedResultsController alloc] initWithFetchRequest:request + managedObjectContext:context + sectionNameKeyPath:groupKeyPath + cacheName:cacheName]; + controller.delegate = delegate; + + return controller; +} + ++ (NSFetchedResultsController *) MR_fetchAllWithDelegate:(id)delegate; +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_fetchAllWithDelegate:delegate inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSFetchedResultsController *) MR_fetchAllWithDelegate:(id)delegate inContext:(NSManagedObjectContext *)context; +{ + NSFetchRequest *request = [self MR_requestAllInContext:context]; + NSFetchedResultsController *controller = [self MR_fetchController:request delegate:delegate useFileCache:NO groupedBy:nil inContext:context]; + + [self MR_performFetch:controller]; + return controller; +} + ++ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id)delegate inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm + ascending:ascending + withPredicate:searchTerm + inContext:context]; + + NSFetchedResultsController *controller = [self MR_fetchController:request + delegate:delegate + useFileCache:NO + groupedBy:group + inContext:context]; + + [self MR_performFetch:controller]; + return controller; +} + ++ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id)delegate +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_fetchAllGroupedBy:group + withPredicate:searchTerm + sortedBy:sortTerm + ascending:ascending + delegate:delegate + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; +{ + return [self MR_fetchAllGroupedBy:group + withPredicate:searchTerm + sortedBy:sortTerm + ascending:ascending + delegate:nil + inContext:context]; +} + ++ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_fetchAllGroupedBy:group + withPredicate:searchTerm + sortedBy:sortTerm + ascending:ascending + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + + ++ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm + ascending:ascending + withPredicate:searchTerm + inContext:context]; + NSFetchedResultsController *controller = [self MR_fetchController:request + delegate:nil + useFileCache:NO + groupedBy:groupingKeyPath + inContext:context]; + + [self MR_performFetch:controller]; + return controller; +} + ++ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath; +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_fetchAllSortedBy:sortTerm + ascending:ascending + withPredicate:searchTerm + groupBy:groupingKeyPath + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id)delegate inContext:(NSManagedObjectContext *)context +{ + return [self MR_fetchAllGroupedBy:groupingKeyPath + withPredicate:searchTerm + sortedBy:sortTerm + ascending:ascending + delegate:delegate + inContext:context]; +} + ++ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id)delegate +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_fetchAllSortedBy:sortTerm + ascending:ascending + withPredicate:searchTerm + groupBy:groupingKeyPath + delegate:delegate + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + +#endif + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.h new file mode 100644 index 0000000..be8a5dc --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.h @@ -0,0 +1,75 @@ +// +// +// Created by Saul Mora on 11/15/09. +// Copyright 2010 Magical Panda Software, LLC All rights reserved. +// + +#import +#import +#import + +@interface NSManagedObject (MagicalRecord) + +/** + * If the NSManagedObject subclass calling this method has implemented the `entityName` method, then the return value of that will be used. + * If `entityName` is not implemented, then the name of the class is returned. If the class is written in Swift, the module name will be removed. + * + * @return String based name for the entity + */ ++ (MR_nonnull NSString *) MR_entityName; + ++ (NSUInteger) MR_defaultBatchSize; ++ (void) MR_setDefaultBatchSize:(NSUInteger)newBatchSize; + ++ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_executeFetchRequest:(MR_nonnull NSFetchRequest *)request; ++ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_executeFetchRequest:(MR_nonnull NSFetchRequest *)request inContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nullable instancetype) MR_executeFetchRequestAndReturnFirstObject:(MR_nonnull NSFetchRequest *)request; ++ (MR_nullable instancetype) MR_executeFetchRequestAndReturnFirstObject:(MR_nonnull NSFetchRequest *)request inContext:(MR_nonnull NSManagedObjectContext *)context; + +#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR + ++ (BOOL) MR_performFetch:(MR_nonnull NSFetchedResultsController *)controller; + +#endif + ++ (MR_nullable NSEntityDescription *) MR_entityDescription; ++ (MR_nullable NSEntityDescription *) MR_entityDescriptionInContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nullable MR_GENERIC(NSArray, NSPropertyDescription *) *) MR_propertiesNamed:(MR_nonnull MR_GENERIC(NSArray, NSString *) *)properties; ++ (MR_nullable MR_GENERIC(NSArray, NSPropertyDescription *) *) MR_propertiesNamed:(MR_nonnull MR_GENERIC(NSArray, NSString *) *)properties inContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (MR_nullable instancetype) MR_createEntity; ++ (MR_nullable instancetype) MR_createEntityInContext:(MR_nonnull NSManagedObjectContext *)context; + +- (BOOL) MR_deleteEntity; +- (BOOL) MR_deleteEntityInContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (BOOL) MR_deleteAllMatchingPredicate:(MR_nonnull NSPredicate *)predicate; ++ (BOOL) MR_deleteAllMatchingPredicate:(MR_nonnull NSPredicate *)predicate inContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (BOOL) MR_truncateAll; ++ (BOOL) MR_truncateAllInContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (MR_nonnull MR_GENERIC(NSArray, NSSortDescriptor *) *) MR_ascendingSortDescriptors:(MR_nonnull MR_GENERIC(NSArray, NSString *) *)attributesToSortBy; ++ (MR_nonnull MR_GENERIC(NSArray, NSSortDescriptor *) *) MR_descendingSortDescriptors:(MR_nonnull MR_GENERIC(NSArray, NSString *) *)attributesToSortBy; + +- (MR_nullable instancetype) MR_inContext:(MR_nonnull NSManagedObjectContext *)otherContext; +- (MR_nullable instancetype) MR_inThreadContext; + +@end + +@protocol MagicalRecord_MOGenerator + +@optional ++ (MR_nonnull NSString *)entityName; +- (MR_nullable instancetype) entityInManagedObjectContext:(MR_nonnull NSManagedObjectContext *)object; +- (MR_nullable instancetype) insertInManagedObjectContext:(MR_nonnull NSManagedObjectContext *)object; + +@end + +#pragma mark - Deprecated Methods — DO NOT USE +@interface NSManagedObject (MagicalRecordDeprecated) + ++ (MR_nullable instancetype) MR_createInContext:(MR_nonnull NSManagedObjectContext *)context MR_DEPRECATED_WILL_BE_REMOVED_IN_PLEASE_USE("4.0", "MR_createEntityInContext:"); +- (BOOL) MR_deleteInContext:(MR_nonnull NSManagedObjectContext *)context MR_DEPRECATED_WILL_BE_REMOVED_IN_PLEASE_USE("4.0", "MR_deleteEntityInContext:"); + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.m new file mode 100644 index 0000000..4c92b77 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.m @@ -0,0 +1,330 @@ + +// Created by Saul Mora on 11/15/09. +// Copyright 2010 Magical Panda Software, LLC All rights reserved. +// + +#import "NSManagedObject+MagicalRecord.h" +#import "NSManagedObject+MagicalRequests.h" +#import "NSManagedObjectContext+MagicalThreading.h" +#import "MagicalRecord+ErrorHandling.h" +#import "MagicalRecordLogging.h" + +static NSUInteger kMagicalRecordDefaultBatchSize = 20; + +@implementation NSManagedObject (MagicalRecord) + ++ (NSString *) MR_entityName; +{ + NSString *entityName; + + if ([self respondsToSelector:@selector(entityName)]) + { + entityName = [self performSelector:@selector(entityName)]; + } + + if ([entityName length] == 0) + { + // Remove module prefix from Swift subclasses + entityName = [NSStringFromClass(self) componentsSeparatedByString:@"."].lastObject; + } + + return entityName; +} + ++ (void) MR_setDefaultBatchSize:(NSUInteger)newBatchSize +{ + @synchronized(self) + { + kMagicalRecordDefaultBatchSize = newBatchSize; + } +} + ++ (NSUInteger) MR_defaultBatchSize +{ + return kMagicalRecordDefaultBatchSize; +} + ++ (NSArray *) MR_executeFetchRequest:(NSFetchRequest *)request inContext:(NSManagedObjectContext *)context +{ + __block NSArray *results = nil; + [context performBlockAndWait:^{ + + NSError *error = nil; + + results = [context executeFetchRequest:request error:&error]; + + if (results == nil) + { + [MagicalRecord handleErrors:error]; + } + + }]; + return results; +} + ++ (NSArray *) MR_executeFetchRequest:(NSFetchRequest *)request +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_executeFetchRequest:request inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (id) MR_executeFetchRequestAndReturnFirstObject:(NSFetchRequest *)request inContext:(NSManagedObjectContext *)context +{ + [request setFetchLimit:1]; + + NSArray *results = [self MR_executeFetchRequest:request inContext:context]; + if ([results count] == 0) + { + return nil; + } + return [results firstObject]; +} + ++ (id) MR_executeFetchRequestAndReturnFirstObject:(NSFetchRequest *)request +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + +#if TARGET_OS_IPHONE + ++ (BOOL) MR_performFetch:(NSFetchedResultsController *)controller +{ + NSError *error = nil; + BOOL success = [controller performFetch:&error]; + if (!success) + { + [MagicalRecord handleErrors:error]; + } + return success; +} + +#endif + ++ (NSEntityDescription *) MR_entityDescription +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_entityDescriptionInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSEntityDescription *) MR_entityDescriptionInContext:(NSManagedObjectContext *)context +{ + NSString *entityName = [self MR_entityName]; + return [NSEntityDescription entityForName:entityName inManagedObjectContext:context]; +} + ++ (NSArray *) MR_propertiesNamed:(NSArray *)properties +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_propertiesNamed:properties inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSArray *) MR_propertiesNamed:(NSArray *)properties inContext:(NSManagedObjectContext *)context +{ + NSEntityDescription *description = [self MR_entityDescriptionInContext:context]; + NSMutableArray *propertiesWanted = [NSMutableArray array]; + + if (properties) + { + NSDictionary *propDict = [description propertiesByName]; + + for (NSString *propertyName in properties) + { + NSPropertyDescription *property = [propDict objectForKey:propertyName]; + if (property) + { + [propertiesWanted addObject:property]; + } + else + { + MRLogWarn(@"Property '%@' not found in %lx properties for %@", propertyName, (unsigned long)[propDict count], NSStringFromClass(self)); + } + } + } + return propertiesWanted; +} + ++ (NSArray *) MR_sortAscending:(BOOL)ascending attributes:(NSArray *)attributesToSortBy +{ + NSMutableArray *attributes = [NSMutableArray array]; + + for (NSString *attributeName in attributesToSortBy) + { + NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:attributeName ascending:ascending]; + [attributes addObject:sortDescriptor]; + } + + return attributes; +} + ++ (NSArray *) MR_ascendingSortDescriptors:(NSArray *)attributesToSortBy +{ + return [self MR_sortAscending:YES attributes:attributesToSortBy]; +} + ++ (NSArray *) MR_descendingSortDescriptors:(NSArray *)attributesToSortBy +{ + return [self MR_sortAscending:NO attributes:attributesToSortBy]; +} + +#pragma mark - + ++ (id) MR_createEntityInContext:(NSManagedObjectContext *)context +{ + if ([self respondsToSelector:@selector(insertInManagedObjectContext:)] && context != nil) + { + id entity = [self performSelector:@selector(insertInManagedObjectContext:) withObject:context]; + return entity; + } + else + { + NSEntityDescription *entity = nil; + if (context == nil) + { + entity = [self MR_entityDescription]; + } + else + { + entity = [self MR_entityDescriptionInContext:context]; + } + + if (entity == nil) + { + return nil; + } + + return [[self alloc] initWithEntity:entity insertIntoManagedObjectContext:context]; + } +} + ++ (id) MR_createEntity +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSManagedObject *newEntity = [self MR_createEntityInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop + + return newEntity; +} + +- (BOOL) MR_deleteEntityInContext:(NSManagedObjectContext *)context +{ + NSError *error = nil; + NSManagedObject *entityInContext = [context existingObjectWithID:[self objectID] error:&error]; + [MagicalRecord handleErrors:error]; + if (entityInContext) { + [context deleteObject:entityInContext]; + } + + return YES; +} + +- (BOOL) MR_deleteEntity +{ + [self MR_deleteEntityInContext:[self managedObjectContext]]; + return YES; +} + ++ (BOOL) MR_deleteAllMatchingPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_requestAllWithPredicate:predicate inContext:context]; + [request setReturnsObjectsAsFaults:YES]; + [request setIncludesPropertyValues:NO]; + + NSArray *objectsToTruncate = [self MR_executeFetchRequest:request inContext:context]; + + for (id objectToTruncate in objectsToTruncate) + { + [objectToTruncate MR_deleteEntityInContext:context]; + } + + return YES; +} + ++ (BOOL) MR_deleteAllMatchingPredicate:(NSPredicate *)predicate +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_deleteAllMatchingPredicate:predicate inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (BOOL) MR_truncateAllInContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_requestAllInContext:context]; + [request setReturnsObjectsAsFaults:YES]; + [request setIncludesPropertyValues:NO]; + + NSArray *objectsToDelete = [self MR_executeFetchRequest:request inContext:context]; + for (NSManagedObject *objectToDelete in objectsToDelete) + { + [objectToDelete MR_deleteEntityInContext:context]; + } + return YES; +} + ++ (BOOL) MR_truncateAll +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [self MR_truncateAllInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop + + return YES; +} + +- (id) MR_inContext:(NSManagedObjectContext *)otherContext +{ + NSError *error = nil; + + if ([[self objectID] isTemporaryID]) + { + BOOL success = [[self managedObjectContext] obtainPermanentIDsForObjects:@[self] error:&error]; + if (!success) + { + [MagicalRecord handleErrors:error]; + return nil; + } + } + + error = nil; + + NSManagedObject *inContext = [otherContext existingObjectWithID:[self objectID] error:&error]; + [MagicalRecord handleErrors:error]; + + return inContext; +} + +- (id) MR_inThreadContext +{ + NSManagedObject *weakSelf = self; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [weakSelf MR_inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + +@end + +#pragma mark - Deprecated Methods — DO NOT USE +@implementation NSManagedObject (MagicalRecordDeprecated) + ++ (instancetype) MR_createInContext:(NSManagedObjectContext *)context +{ + return [self MR_createEntityInContext:context]; +} + +- (BOOL) MR_deleteInContext:(NSManagedObjectContext *)context +{ + return [self MR_deleteEntityInContext:context]; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.h new file mode 100644 index 0000000..399cf8b --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.h @@ -0,0 +1,32 @@ +// +// NSManagedObject+MagicalRequests.h +// Magical Record +// +// Created by Saul Mora on 3/7/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import +#import + +@interface NSManagedObject (MagicalRequests) + ++ (MR_nonnull NSFetchRequest *) MR_createFetchRequest; ++ (MR_nonnull NSFetchRequest *) MR_createFetchRequestInContext:(MR_nonnull NSManagedObjectContext *)context; + ++ (MR_nonnull NSFetchRequest *) MR_requestAll; ++ (MR_nonnull NSFetchRequest *) MR_requestAllInContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nonnull NSFetchRequest *) MR_requestAllWithPredicate:(MR_nullable NSPredicate *)searchTerm; ++ (MR_nonnull NSFetchRequest *) MR_requestAllWithPredicate:(MR_nullable NSPredicate *)searchTerm inContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nonnull NSFetchRequest *) MR_requestAllWhere:(MR_nonnull NSString *)property isEqualTo:(MR_nonnull id)value; ++ (MR_nonnull NSFetchRequest *) MR_requestAllWhere:(MR_nonnull NSString *)property isEqualTo:(MR_nonnull id)value inContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nonnull NSFetchRequest *) MR_requestFirstWithPredicate:(MR_nullable NSPredicate *)searchTerm; ++ (MR_nonnull NSFetchRequest *) MR_requestFirstWithPredicate:(MR_nullable NSPredicate *)searchTerm inContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nonnull NSFetchRequest *) MR_requestFirstByAttribute:(MR_nonnull NSString *)attribute withValue:(MR_nullable id)searchValue; ++ (MR_nonnull NSFetchRequest *) MR_requestFirstByAttribute:(MR_nonnull NSString *)attribute withValue:(MR_nullable id)searchValue inContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nonnull NSFetchRequest *) MR_requestAllSortedBy:(MR_nonnull NSString *)sortTerm ascending:(BOOL)ascending; ++ (MR_nonnull NSFetchRequest *) MR_requestAllSortedBy:(MR_nonnull NSString *)sortTerm ascending:(BOOL)ascending inContext:(MR_nonnull NSManagedObjectContext *)context; ++ (MR_nonnull NSFetchRequest *) MR_requestAllSortedBy:(MR_nonnull NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(MR_nullable NSPredicate *)searchTerm; ++ (MR_nonnull NSFetchRequest *) MR_requestAllSortedBy:(MR_nonnull NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(MR_nullable NSPredicate *)searchTerm inContext:(MR_nonnull NSManagedObjectContext *)context; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.m new file mode 100644 index 0000000..8e4f0d8 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.m @@ -0,0 +1,173 @@ +// +// NSManagedObject+MagicalRequests.m +// Magical Record +// +// Created by Saul Mora on 3/7/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import "NSManagedObject+MagicalRequests.h" +#import "NSManagedObject+MagicalRecord.h" +#import "NSManagedObjectContext+MagicalThreading.h" + +@implementation NSManagedObject (MagicalRequests) + + ++ (NSFetchRequest *)MR_createFetchRequestInContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [[NSFetchRequest alloc] init]; + [request setEntity:[self MR_entityDescriptionInContext:context]]; + + return request; +} + ++ (NSFetchRequest *) MR_createFetchRequest +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_createFetchRequestInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + + ++ (NSFetchRequest *) MR_requestAll +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_createFetchRequestInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSFetchRequest *) MR_requestAllInContext:(NSManagedObjectContext *)context +{ + return [self MR_createFetchRequestInContext:context]; +} + ++ (NSFetchRequest *) MR_requestAllWithPredicate:(NSPredicate *)searchTerm; +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_requestAllWithPredicate:searchTerm inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSFetchRequest *) MR_requestAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; +{ + NSFetchRequest *request = [self MR_createFetchRequestInContext:context]; + [request setPredicate:searchTerm]; + + return request; +} + ++ (NSFetchRequest *) MR_requestAllWhere:(NSString *)property isEqualTo:(id)value +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_requestAllWhere:property isEqualTo:value inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSFetchRequest *) MR_requestAllWhere:(NSString *)property isEqualTo:(id)value inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_createFetchRequestInContext:context]; + [request setPredicate:[NSPredicate predicateWithFormat:@"%K = %@", property, value]]; + + return request; +} + ++ (NSFetchRequest *) MR_requestFirstWithPredicate:(NSPredicate *)searchTerm +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_requestFirstWithPredicate:searchTerm inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSFetchRequest *) MR_requestFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_createFetchRequestInContext:context]; + [request setPredicate:searchTerm]; + [request setFetchLimit:1]; + + return request; +} + ++ (NSFetchRequest *) MR_requestFirstByAttribute:(NSString *)attribute withValue:(id)searchValue; +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_requestFirstByAttribute:attribute withValue:searchValue inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSFetchRequest *) MR_requestFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context; +{ + NSFetchRequest *request = [self MR_requestAllWhere:attribute isEqualTo:searchValue inContext:context]; + [request setFetchLimit:1]; + + return request; +} + ++ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context +{ + return [self MR_requestAllSortedBy:sortTerm + ascending:ascending + withPredicate:nil + inContext:context]; +} + ++ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return [self MR_requestAllSortedBy:sortTerm + ascending:ascending + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop +} + ++ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context +{ + NSFetchRequest *request = [self MR_requestAllInContext:context]; + if (searchTerm) + { + [request setPredicate:searchTerm]; + } + [request setFetchBatchSize:[self MR_defaultBatchSize]]; + + NSMutableArray* sortDescriptors = [[NSMutableArray alloc] init]; + NSArray* sortKeys = [sortTerm componentsSeparatedByString:@","]; + for (__strong NSString* sortKey in sortKeys) + { + NSArray * sortComponents = [sortKey componentsSeparatedByString:@":"]; + if (sortComponents.count > 1) + { + NSString * customAscending = sortComponents.lastObject; + ascending = customAscending.boolValue; + sortKey = sortComponents[0]; + } + + NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortKey ascending:ascending]; + [sortDescriptors addObject:sortDescriptor]; + } + + [request setSortDescriptors:sortDescriptors]; + + return request; +} + ++ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm; +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm + ascending:ascending + withPredicate:searchTerm + inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; +#pragma clang diagnostic pop + + return request; +} + + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalChainSave.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalChainSave.h new file mode 100644 index 0000000..df9cc1a --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalChainSave.h @@ -0,0 +1,36 @@ +// +// NSManagedObjectContext+MagicalChainSave.h +// Magical Record +// +// Created by Lee on 8/27/14. +// Copyright (c) 2014 Magical Panda Software LLC. All rights reserved. +// + +#import +#import +#import + +@interface NSManagedObjectContext (MagicalRecordChainSave) +/** + Creates a child context for the current context that you can make changes within, before saving up through all parent contexts to the main queue context, and finally to the saving context. This method will return immediately, and execute the save initially on a background thread, and then on the appropriate thread for each context it saves. + + @param block Block that is passed a managed object context. +*/ +- (void)MR_saveWithBlock:(void (^ __MR_nonnull)(NSManagedObjectContext * __MR_nonnull localContext))block; + +/** + Creates a child context for the current context that you can make changes within, before saving up through all parent contexts to the main queue context, and finally to the saving context. This method will return immediately, and execute the save initially on a background thread, and then on the appropriate thread for each context it saves. + + @param block Block that is passed a managed object context. + @param completion Completion block that is called once all contexts have been saved, or if an error is encountered. + */ +- (void)MR_saveWithBlock:(void (^ __MR_nonnull)(NSManagedObjectContext * __MR_nonnull localContext))block completion:(MR_nullable MRSaveCompletionHandler)completion; + +/** + Creates a child context for the current context that you can make changes within, before saving up through all parent contexts to the main queue context, and finally to the saving context. This method will not return until the save has completed, blocking the thread it is called on. + + @param block Block that is passed a managed object context. + */ +- (void)MR_saveWithBlockAndWait:(void (^ __MR_nonnull)(NSManagedObjectContext * __MR_nonnull localContext))block; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalChainSave.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalChainSave.m new file mode 100644 index 0000000..a3e1e9e --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalChainSave.m @@ -0,0 +1,50 @@ +// +// NSManagedObjectContext+MagicalChainSave.m +// Magical Record +// +// Created by Lee on 8/27/14. +// Copyright (c) 2014 Magical Panda Software LLC. All rights reserved. +// + +#import "NSManagedObjectContext+MagicalChainSave.h" +#import "NSManagedObjectContext+MagicalRecord.h" + +@implementation NSManagedObjectContext (MagicalRecord_ChainSave) +- (void)MR_saveWithBlock:(void (^)(NSManagedObjectContext *localContext))block; +{ + [self MR_saveWithBlock:block completion:nil]; +} + +- (void)MR_saveWithBlock:(void (^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion; +{ + NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:self]; + + [localContext performBlock:^{ + [localContext MR_setWorkingName:NSStringFromSelector(_cmd)]; + + if (block) { + block(localContext); + } + + [localContext MR_saveWithOptions:MRSaveParentContexts completion:completion]; + }]; +} + +#pragma mark - Synchronous saving + +- (void)MR_saveWithBlockAndWait:(void (^)(NSManagedObjectContext *localContext))block; +{ + NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:self]; + + [localContext performBlockAndWait:^{ + [localContext MR_setWorkingName:NSStringFromSelector(_cmd)]; + + if (block) { + block(localContext); + } + + [localContext MR_saveWithOptions:MRSaveParentContexts|MRSaveSynchronously completion:nil]; + }]; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.h new file mode 100644 index 0000000..73e5143 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.h @@ -0,0 +1,70 @@ +// +// NSManagedObjectContext+MagicalObserving.h +// Magical Record +// +// Created by Saul Mora on 3/9/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import +#import + +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordDidMergeChangesFromiCloudNotification; + +/** + Category methods to aid in observing changes in other contexts. + + @since Available in v2.0 and later. + */ +@interface NSManagedObjectContext (MagicalObserving) + +/** + Merge changes from another context into self. + + @param otherContext Managed object context to observe. + + @since Available in v2.0 and later. + */ +- (void) MR_observeContext:(MR_nonnull NSManagedObjectContext *)otherContext; + +/** + Stops merging changes from the supplied context into self. + + @param otherContext Managed object context to stop observing. + + @since Available in v2.0 and later. + */ +- (void) MR_stopObservingContext:(MR_nonnull NSManagedObjectContext *)otherContext; + +/** + Merges changes from another context into self on the main thread. + + @param otherContext Managed object context to observe. + + @since Available in v2.0 and later. + */ +- (void) MR_observeContextOnMainThread:(MR_nonnull NSManagedObjectContext *)otherContext; + +/** + Merges changes from the supplied persistent store coordinator into self in response to changes from iCloud. + + @param coordinator Persistent store coordinator + + @see -MR_stopObservingiCloudChangesInCoordinator: + + @since Available in v2.0 and later. + */ +- (void) MR_observeiCloudChangesInCoordinator:(MR_nonnull NSPersistentStoreCoordinator *)coordinator; + +/** + Stops observation and merging of changes from the supplied persistent store coordinator in response to changes from iCloud. + + @param coordinator Persistent store coordinator + + @see -MR_observeiCloudChangesInCoordinator: + + @since Available in v2.0 and later. + */ +- (void) MR_stopObservingiCloudChangesInCoordinator:(MR_nonnull NSPersistentStoreCoordinator *)coordinator; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.m new file mode 100644 index 0000000..949634a --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.m @@ -0,0 +1,108 @@ +// +// NSManagedObjectContext+MagicalObserving.m +// Magical Record +// +// Created by Saul Mora on 3/9/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import "NSManagedObjectContext+MagicalObserving.h" +#import "NSManagedObjectContext+MagicalRecord.h" +#import "MagicalRecord+iCloud.h" +#import "MagicalRecordLogging.h" + +NSString * const kMagicalRecordDidMergeChangesFromiCloudNotification = @"kMagicalRecordDidMergeChangesFromiCloudNotification"; + +@implementation NSManagedObjectContext (MagicalObserving) + +#pragma mark - Context Observation Helpers + +- (void) MR_observeContext:(NSManagedObjectContext *)otherContext +{ + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter addObserver:self + selector:@selector(MR_mergeChangesFromNotification:) + name:NSManagedObjectContextDidSaveNotification + object:otherContext]; +} + +- (void) MR_stopObservingContext:(NSManagedObjectContext *)otherContext +{ + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self + name:NSManagedObjectContextDidSaveNotification + object:otherContext]; +} + +- (void) MR_observeContextOnMainThread:(NSManagedObjectContext *)otherContext +{ + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter addObserver:self + selector:@selector(MR_mergeChangesOnMainThread:) + name:NSManagedObjectContextDidSaveNotification + object:otherContext]; +} + +#pragma mark - Context iCloud Merge Helpers + +- (void) MR_mergeChangesFromiCloud:(NSNotification *)notification; +{ + [self performBlock:^{ + + MRLogVerbose(@"Merging changes From iCloud %@context%@", + self == [NSManagedObjectContext MR_defaultContext] ? @"*** DEFAULT *** " : @"", + ([NSThread isMainThread] ? @" *** on Main Thread ***" : @"")); + + [self mergeChangesFromContextDidSaveNotification:notification]; + + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter postNotificationName:kMagicalRecordDidMergeChangesFromiCloudNotification + object:self + userInfo:[notification userInfo]]; + }]; +} + +- (void) MR_mergeChangesFromNotification:(NSNotification *)notification; +{ + MRLogVerbose(@"Merging changes to %@context%@", + self == [NSManagedObjectContext MR_defaultContext] ? @"*** DEFAULT *** " : @"", + ([NSThread isMainThread] ? @" *** on Main Thread ***" : @"")); + + [self mergeChangesFromContextDidSaveNotification:notification]; +} + +- (void) MR_mergeChangesOnMainThread:(NSNotification *)notification; +{ + if ([NSThread isMainThread]) + { + [self MR_mergeChangesFromNotification:notification]; + } + else + { + [self performSelectorOnMainThread:@selector(MR_mergeChangesFromNotification:) withObject:notification waitUntilDone:YES]; + } +} + +- (void) MR_observeiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator; +{ + if (![MagicalRecord isICloudEnabled]) return; + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter addObserver:self + selector:@selector(MR_mergeChangesFromiCloud:) + name:NSPersistentStoreDidImportUbiquitousContentChangesNotification + object:coordinator]; + +} + +- (void) MR_stopObservingiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator; +{ + if (![MagicalRecord isICloudEnabled]) return; + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter removeObserver:self + name:NSPersistentStoreDidImportUbiquitousContentChangesNotification + object:coordinator]; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.h new file mode 100644 index 0000000..f0d77ef --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.h @@ -0,0 +1,130 @@ +// +// NSManagedObjectContext+MagicalRecord.h +// +// Created by Saul Mora on 11/23/09. +// Copyright 2010 Magical Panda Software, LLC All rights reserved. +// + +#import +#import +#import + +@interface NSManagedObjectContext (MagicalRecord) + +#pragma mark - Setup + +/** + Initializes MagicalRecord's default contexts using the provided persistent store coordinator. + + @param coordinator Persistent Store Coordinator + */ ++ (void) MR_initializeDefaultContextWithCoordinator:(MR_nonnull NSPersistentStoreCoordinator *)coordinator; + +#pragma mark - Default Contexts +/** + Root context responsible for sending changes to the main persistent store coordinator that will be saved to disk. + + @discussion Use this context for making and saving changes. All saves will be merged into the context returned by `MR_defaultContext` as well. + + @return Private context used for saving changes to disk on a background thread + */ ++ (MR_nonnull NSManagedObjectContext *) MR_rootSavingContext; + +/** + @discussion Please do not use this context for saving changes, as it will block the main thread when doing so. + + @return Main queue context that can be observed for changes + */ ++ (MR_nonnull NSManagedObjectContext *) MR_defaultContext; + +#pragma mark - Context Creation + +/** + Creates and returns a new managed object context of type `NSPrivateQueueConcurrencyType`, with it's parent context set to the root saving context. + @return Private context with the parent set to the root saving context + */ ++ (MR_nonnull NSManagedObjectContext *) MR_context; + +/** + Creates and returns a new managed object context of type `NSPrivateQueueConcurrencyType`, with it's parent context set to the root saving context. + + @param parentContext Context to set as the parent of the newly initialized context + + @return Private context with the parent set to the provided context + */ ++ (MR_nonnull NSManagedObjectContext *) MR_contextWithParent:(MR_nonnull NSManagedObjectContext *)parentContext; + +/** + Creates and returns a new managed object context of type `NSPrivateQueueConcurrencyType`, with it's persistent store coordinator set to the provided coordinator. + + @param coordinator A persistent store coordinator + + @return Private context with it's persistent store coordinator set to the provided coordinator + */ ++ (MR_nonnull NSManagedObjectContext *) MR_contextWithStoreCoordinator:(MR_nonnull NSPersistentStoreCoordinator *)coordinator; + +/** + Initializes a context of type `NSMainQueueConcurrencyType`. + + @return A context initialized using the `NSPrivateQueueConcurrencyType` concurrency type. + */ ++ (MR_nonnull NSManagedObjectContext *) MR_newMainQueueContext NS_RETURNS_RETAINED; + +/** + Initializes a context of type `NSPrivateQueueConcurrencyType`. + + @return A context initialized using the `NSPrivateQueueConcurrencyType` concurrency type. + */ ++ (MR_nonnull NSManagedObjectContext *) MR_newPrivateQueueContext NS_RETURNS_RETAINED; + +#pragma mark - Debugging + +/** + Sets a working name for the context, which will be used in debug logs. + + @param workingName Name for the context + */ +- (void) MR_setWorkingName:(MR_nonnull NSString *)workingName; + +/** + @return Working name for the context + */ +- (MR_nonnull NSString *) MR_workingName; + +/** + @return Description of this context + */ +- (MR_nonnull NSString *) MR_description; + +/** + @return Description of the parent contexts of this context + */ +- (MR_nonnull NSString *) MR_parentChain; + + +#pragma mark - Helpers + +/** + Reset the default context. + */ ++ (void) MR_resetDefaultContext; + +/** + Delete the provided objects from the context + + @param objects An object conforming to `NSFastEnumeration`, containing NSManagedObject instances + */ +- (void) MR_deleteObjects:(MR_nonnull id )objects; + +@end + +#pragma mark - Deprecated Methods — DO NOT USE +@interface NSManagedObjectContext (MagicalRecordDeprecated) + ++ (MR_nonnull NSManagedObjectContext *) MR_contextWithoutParent MR_DEPRECATED_WILL_BE_REMOVED_IN_PLEASE_USE("4.0", "MR_newPrivateQueueContext"); ++ (MR_nonnull NSManagedObjectContext *) MR_newContext MR_DEPRECATED_WILL_BE_REMOVED_IN_PLEASE_USE("4.0", "MR_context"); ++ (MR_nonnull NSManagedObjectContext *) MR_newContextWithParent:(MR_nonnull NSManagedObjectContext *)parentContext MR_DEPRECATED_WILL_BE_REMOVED_IN_PLEASE_USE("4.0", "MR_contextWithParent:"); ++ (MR_nonnull NSManagedObjectContext *) MR_newContextWithStoreCoordinator:(MR_nonnull NSPersistentStoreCoordinator *)coordinator MR_DEPRECATED_WILL_BE_REMOVED_IN_PLEASE_USE("4.0", "MR_contextWithStoreCoordinator:"); + + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.m new file mode 100644 index 0000000..72efa63 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.m @@ -0,0 +1,349 @@ +// +// NSManagedObjectContext+MagicalRecord.m +// +// Created by Saul Mora on 11/23/09. +// Copyright 2010 Magical Panda Software, LLC All rights reserved. +// + +#import "NSManagedObjectContext+MagicalRecord.h" +#import "NSManagedObjectContext+MagicalObserving.h" +#import "NSManagedObjectContext+MagicalThreading.h" +#import "NSPersistentStoreCoordinator+MagicalRecord.h" +#import "MagicalRecord+ErrorHandling.h" +#import "MagicalRecord+iCloud.h" +#import "MagicalRecordLogging.h" + +static NSString * const MagicalRecordContextWorkingName = @"MagicalRecordContextWorkingName"; + +static NSManagedObjectContext *MagicalRecordRootSavingContext; +static NSManagedObjectContext *MagicalRecordDefaultContext; + +static id MagicalRecordUbiquitySetupNotificationObserver; + +@implementation NSManagedObjectContext (MagicalRecord) + +#pragma mark - Setup + ++ (void) MR_initializeDefaultContextWithCoordinator:(NSPersistentStoreCoordinator *)coordinator; +{ + NSAssert(coordinator, @"Provided coordinator cannot be nil!"); + if (MagicalRecordDefaultContext == nil) + { + NSManagedObjectContext *rootContext = [self MR_contextWithStoreCoordinator:coordinator]; + [self MR_setRootSavingContext:rootContext]; + + NSManagedObjectContext *defaultContext = [self MR_newMainQueueContext]; + [self MR_setDefaultContext:defaultContext]; + + [defaultContext setParentContext:rootContext]; + } +} + +#pragma mark - Default Contexts + ++ (NSManagedObjectContext *) MR_defaultContext +{ + @synchronized(self) { + NSAssert(MagicalRecordDefaultContext != nil, @"Default context is nil! Did you forget to initialize the Core Data Stack?"); + return MagicalRecordDefaultContext; + } +} + ++ (NSManagedObjectContext *) MR_rootSavingContext; +{ + NSAssert(MagicalRecordRootSavingContext != nil, @"Root saving context is nil! Did you forget to initialize the Core Data Stack?"); + return MagicalRecordRootSavingContext; +} + +#pragma mark - Context Creation + ++ (NSManagedObjectContext *) MR_context +{ + return [self MR_contextWithParent:[self MR_rootSavingContext]]; +} + ++ (NSManagedObjectContext *) MR_contextWithParent:(NSManagedObjectContext *)parentContext +{ + NSManagedObjectContext *context = [self MR_newPrivateQueueContext]; + [context setParentContext:parentContext]; + [context MR_obtainPermanentIDsBeforeSaving]; + return context; +} + ++ (NSManagedObjectContext *) MR_contextWithStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator +{ + NSManagedObjectContext *context = nil; + if (coordinator != nil) + { + context = [self MR_newPrivateQueueContext]; + [context performBlockAndWait:^{ + [context setPersistentStoreCoordinator:coordinator]; + MRLogVerbose(@"Created new context %@ with store coordinator: %@", [context MR_workingName], coordinator); + }]; + } + return context; +} + ++ (NSManagedObjectContext *) MR_newMainQueueContext +{ + NSManagedObjectContext *context = [[self alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; + MRLogInfo(@"Created new main queue context: %@", context); + return context; +} + ++ (NSManagedObjectContext *) MR_newPrivateQueueContext +{ + NSManagedObjectContext *context = [[self alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; + MRLogInfo(@"Created new private queue context: %@", context); + return context; +} + +#pragma mark - Debugging + +- (void)MR_setWorkingName:(NSString *)workingName +{ + void (^setWorkingName)() = ^{ + [[self userInfo] setObject:workingName forKey:MagicalRecordContextWorkingName]; + }; + + if (self.concurrencyType == NSMainQueueConcurrencyType && [NSThread isMainThread]) + { + setWorkingName(); + } + else + { + [self performBlockAndWait:setWorkingName]; + } +} + +- (NSString *)MR_workingName +{ + __block NSString *workingName; + + void (^getWorkingName)() = ^{ + workingName = [[self userInfo] objectForKey:MagicalRecordContextWorkingName]; + }; + + if (self.concurrencyType == NSMainQueueConcurrencyType && [NSThread isMainThread]) + { + getWorkingName(); + } + else + { + [self performBlockAndWait:getWorkingName]; + } + + if ([workingName length] == 0) + { + workingName = @"Untitled Context"; + } + + return workingName; +} + +- (NSString *) MR_description +{ + NSString *onMainThread = [NSThread isMainThread] ? @"the main thread" : @"a background thread"; + + __block NSString *workingName; + + [self performBlockAndWait:^{ + workingName = [self MR_workingName]; + }]; + + return [NSString stringWithFormat:@"<%@ (%p): %@> on %@", NSStringFromClass([self class]), self, workingName, onMainThread]; +} + +- (NSString *) MR_parentChain +{ + NSMutableString *familyTree = [@"\n" mutableCopy]; + NSManagedObjectContext *currentContext = self; + do + { + [familyTree appendFormat:@"- %@ (%p) %@\n", [currentContext MR_workingName], currentContext, (currentContext == self ? @"(*)" : @"")]; + } + while ((currentContext = [currentContext parentContext])); + + return [NSString stringWithString:familyTree]; +} + +#pragma mark - Helpers + ++ (void) MR_resetDefaultContext +{ + NSManagedObjectContext *defaultContext = [NSManagedObjectContext MR_defaultContext]; + NSAssert(NSConfinementConcurrencyType == [defaultContext concurrencyType], @"Do not call this method on a confinement context."); + + if ([NSThread isMainThread] == NO) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self MR_resetDefaultContext]; + }); + + return; + } + + [defaultContext reset]; +} + +- (void) MR_deleteObjects:(id )objects +{ + for (NSManagedObject *managedObject in objects) + { + [self deleteObject:managedObject]; + } +} + +#pragma mark - Notification Handlers + +- (void) MR_contextWillSave:(NSNotification *)notification +{ + NSManagedObjectContext *context = [notification object]; + NSSet *insertedObjects = [context insertedObjects]; + + if ([insertedObjects count]) + { + MRLogVerbose(@"Context '%@' is about to save: obtaining permanent IDs for %lu new inserted object(s).", [context MR_workingName], (unsigned long)[insertedObjects count]); + NSError *error = nil; + BOOL success = [context obtainPermanentIDsForObjects:[insertedObjects allObjects] error:&error]; + if (!success) + { + [MagicalRecord handleErrors:error]; + } + } +} + ++ (void)rootContextDidSave:(NSNotification *)notification +{ + if ([notification object] != [self MR_rootSavingContext]) + { + return; + } + + if ([NSThread isMainThread] == NO) + { + dispatch_async(dispatch_get_main_queue(), ^{ + [self rootContextDidSave:notification]; + }); + + return; + } + + for (NSManagedObject *object in [[notification userInfo] objectForKey:NSUpdatedObjectsKey]) + { + [[[self MR_defaultContext] objectWithID:[object objectID]] willAccessValueForKey:nil]; + } + + [[self MR_defaultContext] mergeChangesFromContextDidSaveNotification:notification]; +} + +#pragma mark - Private Methods + ++ (void) MR_cleanUp +{ + [self MR_setDefaultContext:nil]; + [self MR_setRootSavingContext:nil]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [self MR_clearNonMainThreadContextsCache]; +#pragma clang diagnostic pop +} + +- (void) MR_obtainPermanentIDsBeforeSaving +{ + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(MR_contextWillSave:) + name:NSManagedObjectContextWillSaveNotification + object:self]; +} + ++ (void) MR_setDefaultContext:(NSManagedObjectContext *)moc +{ + if (MagicalRecordDefaultContext) + { + [[NSNotificationCenter defaultCenter] removeObserver:MagicalRecordDefaultContext]; + } + + NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_defaultStoreCoordinator]; + if (MagicalRecordUbiquitySetupNotificationObserver) + { + [[NSNotificationCenter defaultCenter] removeObserver:MagicalRecordUbiquitySetupNotificationObserver]; + MagicalRecordUbiquitySetupNotificationObserver = nil; + } + + if ([MagicalRecord isICloudEnabled]) + { + [MagicalRecordDefaultContext MR_stopObservingiCloudChangesInCoordinator:coordinator]; + } + + MagicalRecordDefaultContext = moc; + [MagicalRecordDefaultContext MR_setWorkingName:@"MagicalRecord Default Context"]; + + if ((MagicalRecordDefaultContext != nil) && ([self MR_rootSavingContext] != nil)) { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(rootContextDidSave:) + name:NSManagedObjectContextDidSaveNotification + object:[self MR_rootSavingContext]]; + } + + [moc MR_obtainPermanentIDsBeforeSaving]; + if ([MagicalRecord isICloudEnabled]) + { + [MagicalRecordDefaultContext MR_observeiCloudChangesInCoordinator:coordinator]; + } + else + { + // If icloud is NOT enabled at the time of this method being called, listen for it to be setup later, and THEN set up observing cloud changes + MagicalRecordUbiquitySetupNotificationObserver = [[NSNotificationCenter defaultCenter] addObserverForName:kMagicalRecordPSCDidCompleteiCloudSetupNotification + object:nil + queue:[NSOperationQueue mainQueue] + usingBlock:^(NSNotification *note) { + [[NSManagedObjectContext MR_defaultContext] MR_observeiCloudChangesInCoordinator:coordinator]; + }]; + } + MRLogInfo(@"Set default context: %@", MagicalRecordDefaultContext); +} + ++ (void)MR_setRootSavingContext:(NSManagedObjectContext *)context +{ + if (MagicalRecordRootSavingContext) + { + [[NSNotificationCenter defaultCenter] removeObserver:MagicalRecordRootSavingContext]; + } + + MagicalRecordRootSavingContext = context; + + [MagicalRecordRootSavingContext performBlock:^{ + [MagicalRecordRootSavingContext MR_obtainPermanentIDsBeforeSaving]; + [MagicalRecordRootSavingContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy]; + [MagicalRecordRootSavingContext MR_setWorkingName:@"MagicalRecord Root Saving Context"]; + }]; + + MRLogInfo(@"Set root saving context: %@", MagicalRecordRootSavingContext); +} + +@end + +#pragma mark - Deprecated Methods — DO NOT USE +@implementation NSManagedObjectContext (MagicalRecordDeprecated) + ++ (NSManagedObjectContext *) MR_contextWithoutParent +{ + return [self MR_newPrivateQueueContext]; +} + ++ (NSManagedObjectContext *) MR_newContext +{ + return [self MR_context]; +} + ++ (NSManagedObjectContext *) MR_newContextWithParent:(NSManagedObjectContext *)parentContext +{ + return [self MR_contextWithParent:parentContext]; +} + ++ (NSManagedObjectContext *) MR_newContextWithStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator +{ + return [self MR_contextWithStoreCoordinator:coordinator]; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.h new file mode 100644 index 0000000..3a2f3c9 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.h @@ -0,0 +1,92 @@ +// +// NSManagedObjectContext+MagicalSaves.h +// Magical Record +// +// Created by Saul Mora on 3/9/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import +#import +#import + +typedef NS_OPTIONS(NSUInteger, MRSaveOptions) { + /** No options — used for cleanliness only */ + MRSaveOptionNone = 0, + + /** When saving, continue saving parent contexts until the changes are present in the persistent store */ + MRSaveParentContexts = 1 << 1, + + /** Perform saves synchronously, blocking execution on the current thread until the save is complete */ + MRSaveSynchronously = 1 << 2, + + /** Perform saves synchronously, blocking execution on the current thread until the save is complete; however, saves root context asynchronously */ + MRSaveSynchronouslyExceptRootContext = 1 << 3 +}; + +typedef void (^MRSaveCompletionHandler)(BOOL contextDidSave, NSError * __MR_nullable error); + +@interface NSManagedObjectContext (MagicalSaves) + +/** + Asynchronously save changes in the current context and it's parent. + Executes a save on the current context's dispatch queue asynchronously. This method only saves the current context, and the parent of the current context if one is set. The completion block will always be called on the main queue. + + @param completion Completion block that is called after the save has completed. The block is passed a success state as a `BOOL` and an `NSError` instance if an error occurs. Always called on the main queue. + + @since Available in v2.1.0 and later. +*/ +- (void) MR_saveOnlySelfWithCompletion:(MR_nullable MRSaveCompletionHandler)completion; + +/** + Asynchronously save changes in the current context all the way back to the persistent store. + Executes asynchronous saves on the current context, and any ancestors, until the changes have been persisted to the assigned persistent store. The completion block will always be called on the main queue. + + @param completion Completion block that is called after the save has completed. The block is passed a success state as a `BOOL` and an `NSError` instance if an error occurs. Always called on the main queue. + + @since Available in v2.1.0 and later. + */ +- (void) MR_saveToPersistentStoreWithCompletion:(MR_nullable MRSaveCompletionHandler)completion; + +/** + Synchronously save changes in the current context and it's parent. + Executes a save on the current context's dispatch queue. This method only saves the current context, and the parent of the current context if one is set. The method will not return until the save is complete. + + @since Available in v2.1.0 and later. + */ +- (void) MR_saveOnlySelfAndWait; + +/** + Synchronously save changes in the current context all the way back to the persistent store. + Executes saves on the current context, and any ancestors, until the changes have been persisted to the assigned persistent store. The method will not return until the save is complete. + + @since Available in v2.1.0 and later. + */ +- (void) MR_saveToPersistentStoreAndWait; + +/** + Save the current context with options. + All other save methods are conveniences to this method. + + @param saveOptions Bitmasked options for the save process. + @param completion Completion block that is called after the save has completed. The block is passed a success state as a `BOOL` and an `NSError` instance if an error occurs. Always called on the main queue. + + @since Available in v2.1.0 and later. + */ +- (void) MR_saveWithOptions:(MRSaveOptions)saveOptions completion:(MR_nullable MRSaveCompletionHandler)completion; + +@end + +#pragma mark - Deprecated Methods — DO NOT USE +@interface NSManagedObjectContext (MagicalSavesDeprecated) + +- (void) MR_save MR_DEPRECATED_WILL_BE_REMOVED_IN_PLEASE_USE("3.0", "MR_saveToPersistentStoreAndWait"); +- (void) MR_saveWithErrorCallback:(void (^ __MR_nullable)(NSError * __MR_nullable error))errorCallback MR_DEPRECATED_WILL_BE_REMOVED_IN("3.0"); +- (void) MR_saveInBackgroundCompletion:(void (^ __MR_nullable)(void))completion MR_DEPRECATED_WILL_BE_REMOVED_IN("3.0"); +- (void) MR_saveInBackgroundErrorHandler:(void (^ __MR_nullable)(NSError * __MR_nullable error))errorCallback MR_DEPRECATED_WILL_BE_REMOVED_IN("3.0"); +- (void) MR_saveInBackgroundErrorHandler:(void (^ __MR_nullable)(NSError * __MR_nullable error))errorCallback completion:(void (^ __MR_nullable)(void))completion MR_DEPRECATED_WILL_BE_REMOVED_IN("3.0"); +- (void) MR_saveNestedContexts MR_DEPRECATED_WILL_BE_REMOVED_IN_PLEASE_USE("3.0", "MR_saveToPersistentStoreWithCompletion:"); +- (void) MR_saveNestedContextsErrorHandler:(void (^ __MR_nullable)(NSError * __MR_nullable error))errorCallback MR_DEPRECATED_WILL_BE_REMOVED_IN_PLEASE_USE("3.0", "MR_saveToPersistentStoreWithCompletion:"); +- (void) MR_saveNestedContextsErrorHandler:(void (^ __MR_nullable)(NSError * __MR_nullable error))errorCallback completion:(void (^ __MR_nullable)(void))completion MR_DEPRECATED_WILL_BE_REMOVED_IN_PLEASE_USE("3.0", "MR_saveToPersistentStoreWithCompletion:"); + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.m new file mode 100644 index 0000000..c95cdbd --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.m @@ -0,0 +1,219 @@ +// +// NSManagedObjectContext+MagicalSaves.m +// Magical Record +// +// Created by Saul Mora on 3/9/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import "NSManagedObjectContext+MagicalSaves.h" +#import "NSManagedObjectContext+MagicalRecord.h" +#import "MagicalRecord+ErrorHandling.h" +#import "MagicalRecordLogging.h" + +@implementation NSManagedObjectContext (MagicalSaves) + +- (void) MR_saveOnlySelfWithCompletion:(MRSaveCompletionHandler)completion; +{ + [self MR_saveWithOptions:MRSaveOptionNone completion:completion]; +} + +- (void) MR_saveOnlySelfAndWait; +{ + [self MR_saveWithOptions:MRSaveSynchronously completion:nil]; +} + +- (void) MR_saveToPersistentStoreWithCompletion:(MRSaveCompletionHandler)completion; +{ + [self MR_saveWithOptions:MRSaveParentContexts completion:completion]; +} + +- (void) MR_saveToPersistentStoreAndWait; +{ + [self MR_saveWithOptions:MRSaveParentContexts | MRSaveSynchronously completion:nil]; +} + +- (void) MR_saveWithOptions:(MRSaveOptions)saveOptions completion:(MRSaveCompletionHandler)completion; +{ + __block BOOL hasChanges = NO; + + if ([self concurrencyType] == NSConfinementConcurrencyType) + { + hasChanges = [self hasChanges]; + } + else + { + [self performBlockAndWait:^{ + hasChanges = [self hasChanges]; + }]; + } + + if (!hasChanges) + { + MRLogVerbose(@"NO CHANGES IN ** %@ ** CONTEXT - NOT SAVING", [self MR_workingName]); + + if (completion) + { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(NO, nil); + }); + } + + return; + } + + BOOL shouldSaveParentContexts = ((saveOptions & MRSaveParentContexts) == MRSaveParentContexts); + BOOL shouldSaveSynchronously = ((saveOptions & MRSaveSynchronously) == MRSaveSynchronously); + BOOL shouldSaveSynchronouslyExceptRoot = ((saveOptions & MRSaveSynchronouslyExceptRootContext) == MRSaveSynchronouslyExceptRootContext); + + BOOL saveSynchronously = (shouldSaveSynchronously && !shouldSaveSynchronouslyExceptRoot) || + (shouldSaveSynchronouslyExceptRoot && (self != [[self class] MR_rootSavingContext])); + + id saveBlock = ^{ + MRLogInfo(@"→ Saving %@", [self MR_description]); + MRLogVerbose(@"→ Save Parents? %@", shouldSaveParentContexts ? @"YES" : @"NO"); + MRLogVerbose(@"→ Save Synchronously? %@", saveSynchronously ? @"YES" : @"NO"); + + BOOL saveResult = NO; + NSError *error = nil; + + @try + { + saveResult = [self save:&error]; + } + @catch(NSException *exception) + { + MRLogError(@"Unable to perform save: %@", (id)[exception userInfo] ?: (id)[exception reason]); + } + @finally + { + [MagicalRecord handleErrors:error]; + + if (saveResult && shouldSaveParentContexts && [self parentContext]) + { + // Add/remove the synchronous save option from the mask if necessary + MRSaveOptions modifiedOptions = saveOptions; + + if (saveSynchronously) + { + modifiedOptions |= MRSaveSynchronously; + } + else + { + modifiedOptions &= ~MRSaveSynchronously; + } + + // If we're saving parent contexts, do so + [[self parentContext] MR_saveWithOptions:modifiedOptions completion:completion]; + } + else + { + if (saveResult) + { + MRLogVerbose(@"→ Finished saving: %@", [self MR_description]); + } + + if (completion) + { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(saveResult, error); + }); + } + } + } + }; + + if (saveSynchronously) + { + [self performBlockAndWait:saveBlock]; + } + else + { + [self performBlock:saveBlock]; + } +} + +@end + +#pragma mark - Deprecated Methods — DO NOT USE +@implementation NSManagedObjectContext (MagicalSavesDeprecated) + +- (void) MR_save; +{ + [self MR_saveToPersistentStoreAndWait]; +} + +- (void) MR_saveWithErrorCallback:(void (^)(NSError *error))errorCallback; +{ + [self MR_saveWithOptions:MRSaveSynchronously | MRSaveParentContexts completion:^(BOOL contextDidSave, NSError *error) { + if (!contextDidSave && errorCallback) + { + errorCallback(error); + } + }]; +} + +- (void) MR_saveInBackgroundCompletion:(void (^)(void))completion; +{ + [self MR_saveOnlySelfWithCompletion:^(BOOL contextDidSave, NSError *error) { + if (contextDidSave && completion) + { + completion(); + } + }]; +} + +- (void) MR_saveInBackgroundErrorHandler:(void (^)(NSError *error))errorCallback; +{ + [self MR_saveOnlySelfWithCompletion:^(BOOL contextDidSave, NSError *error) { + if (!contextDidSave && errorCallback) + { + errorCallback(error); + } + }]; +} + +- (void) MR_saveInBackgroundErrorHandler:(void (^)(NSError *error))errorCallback completion:(void (^)(void))completion; +{ + [self MR_saveOnlySelfWithCompletion:^(BOOL contextDidSave, NSError *error) { + if (contextDidSave && completion) + { + completion(); + } + else if (errorCallback) + { + errorCallback(error); + } + }]; +} + +- (void) MR_saveNestedContexts; +{ + [self MR_saveToPersistentStoreWithCompletion:nil]; +} + +- (void) MR_saveNestedContextsErrorHandler:(void (^)(NSError *error))errorCallback; +{ + [self MR_saveToPersistentStoreWithCompletion:^(BOOL contextDidSave, NSError *error) { + if (!contextDidSave && errorCallback) + { + errorCallback(error); + } + }]; +} + +- (void) MR_saveNestedContextsErrorHandler:(void (^)(NSError *error))errorCallback completion:(void (^)(void))completion; +{ + [self MR_saveToPersistentStoreWithCompletion:^(BOOL contextDidSave, NSError *error) { + if (contextDidSave && completion) + { + completion(); + } + else if (errorCallback) + { + errorCallback(error); + } + }]; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.h new file mode 100644 index 0000000..5575885 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.h @@ -0,0 +1,19 @@ +// +// NSManagedObjectContext+MagicalThreading.h +// Magical Record +// +// Created by Saul Mora on 3/9/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import +#import + +@interface NSManagedObjectContext (MagicalThreading) + ++ (MR_nonnull NSManagedObjectContext *) MR_contextForCurrentThread __attribute((deprecated("This method will be removed in MagicalRecord 3.0"))); ++ (void) MR_clearNonMainThreadContextsCache __attribute((deprecated("This method will be removed in MagicalRecord 3.0"))); ++ (void) MR_resetContextForCurrentThread __attribute((deprecated("This method will be removed in MagicalRecord 3.0"))); ++ (void) MR_clearContextForCurrentThread __attribute((deprecated("This method will be removed in MagicalRecord 3.0"))); + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.m new file mode 100644 index 0000000..a5cb786 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.m @@ -0,0 +1,69 @@ +// +// NSManagedObjectContext+MagicalThreading.m +// Magical Record +// +// Created by Saul Mora on 3/9/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import "NSManagedObjectContext+MagicalThreading.h" +#import "NSManagedObjectContext+MagicalRecord.h" +#import "NSManagedObject+MagicalRecord.h" +#include + +static NSString const * kMagicalRecordManagedObjectContextKey = @"MagicalRecord_NSManagedObjectContextForThreadKey"; +static NSString const * kMagicalRecordManagedObjectContextCacheVersionKey = @"MagicalRecord_CacheVersionOfNSManagedObjectContextForThreadKey"; +static volatile int32_t contextsCacheVersion = 0; + + +@implementation NSManagedObjectContext (MagicalThreading) + ++ (void)MR_resetContextForCurrentThread +{ + [[NSManagedObjectContext MR_contextForCurrentThread] reset]; +} + ++ (void) MR_clearNonMainThreadContextsCache +{ + OSAtomicIncrement32(&contextsCacheVersion); +} + ++ (NSManagedObjectContext *) MR_contextForCurrentThread; +{ + if ([NSThread isMainThread]) + { + return [self MR_defaultContext]; + } + else + { + // contextsCacheVersion can change (atomically) at any time, so grab a copy to ensure that we always + // use the same value throughout the remainder of this method. We are OK with this method returning + // an outdated context if MR_clearNonMainThreadContextsCache is called from another thread while this + // method is being executed. This behavior is unrelated to our choice to use a counter for synchronization. + // We would have the same behavior if we used @synchronized() (or any other lock-based synchronization + // method) since MR_clearNonMainThreadContextsCache would have to wait until this method finished before + // it could acquire the mutex, resulting in us still returning an outdated context in that case as well. + int32_t targetCacheVersionForContext = contextsCacheVersion; + + NSMutableDictionary *threadDict = [[NSThread currentThread] threadDictionary]; + NSManagedObjectContext *threadContext = [threadDict objectForKey:kMagicalRecordManagedObjectContextKey]; + NSNumber *currentCacheVersionForContext = [threadDict objectForKey:kMagicalRecordManagedObjectContextCacheVersionKey]; + NSAssert((threadContext && currentCacheVersionForContext) || (!threadContext && !currentCacheVersionForContext), + @"The Magical Record keys should either both be present or neither be present, otherwise we're in an inconsistent state!"); + if ((threadContext == nil) || (currentCacheVersionForContext == nil) || ((int32_t)[currentCacheVersionForContext integerValue] != targetCacheVersionForContext)) + { + threadContext = [self MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]]; + [threadDict setObject:threadContext forKey:kMagicalRecordManagedObjectContextKey]; + [threadDict setObject:[NSNumber numberWithInteger:targetCacheVersionForContext] + forKey:kMagicalRecordManagedObjectContextCacheVersionKey]; + } + return threadContext; + } +} + ++ (void) MR_clearContextForCurrentThread { + [[[NSThread currentThread] threadDictionary] removeObjectForKey:kMagicalRecordManagedObjectContextKey]; + [[[NSThread currentThread] threadDictionary] removeObjectForKey:kMagicalRecordManagedObjectContextCacheVersionKey]; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.h new file mode 100644 index 0000000..b0f509d --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.h @@ -0,0 +1,23 @@ +// +// NSManagedObjectModel+MagicalRecord.h +// +// Created by Saul Mora on 3/11/10. +// Copyright 2010 Magical Panda Software, LLC All rights reserved. +// + +#import +#import + +@interface NSManagedObjectModel (MagicalRecord) + ++ (MR_nullable NSManagedObjectModel *) MR_defaultManagedObjectModel; + ++ (void) MR_setDefaultManagedObjectModel:(MR_nullable NSManagedObjectModel *)newDefaultModel; + ++ (MR_nullable NSManagedObjectModel *) MR_mergedObjectModelFromMainBundle; ++ (MR_nullable NSManagedObjectModel *) MR_newManagedObjectModelNamed:(MR_nonnull NSString *)modelFileName NS_RETURNS_RETAINED; ++ (MR_nullable NSManagedObjectModel *) MR_managedObjectModelNamed:(MR_nonnull NSString *)modelFileName; ++ (MR_nullable NSManagedObjectModel *) MR_newModelNamed:(MR_nonnull NSString *) modelName inBundleNamed:(MR_nonnull NSString *) bundleName NS_RETURNS_RETAINED; ++ (MR_nullable NSManagedObjectModel *) MR_newModelNamed:(MR_nonnull NSString *) modelName inBundle:(MR_nonnull NSBundle*) bundle NS_RETURNS_RETAINED; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.m new file mode 100644 index 0000000..e0fb9f5 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.m @@ -0,0 +1,73 @@ +// +// NSManagedObjectModel+MagicalRecord.m +// +// Created by Saul Mora on 3/11/10. +// Copyright 2010 Magical Panda Software, LLC All rights reserved. +// + +#import "NSManagedObjectModel+MagicalRecord.h" +#import "MagicalRecord+Options.h" + +static NSManagedObjectModel *defaultManagedObjectModel_ = nil; + +@implementation NSManagedObjectModel (MagicalRecord) + ++ (NSManagedObjectModel *) MR_defaultManagedObjectModel +{ + if (defaultManagedObjectModel_ == nil && [MagicalRecord shouldAutoCreateManagedObjectModel]) + { + [self MR_setDefaultManagedObjectModel:[self MR_mergedObjectModelFromMainBundle]]; + } + return defaultManagedObjectModel_; +} + ++ (void) MR_setDefaultManagedObjectModel:(NSManagedObjectModel *)newDefaultModel +{ + defaultManagedObjectModel_ = newDefaultModel; +} + ++ (NSManagedObjectModel *) MR_mergedObjectModelFromMainBundle; +{ + return [self mergedModelFromBundles:nil]; +} + ++ (NSManagedObjectModel *) MR_newModelNamed:(NSString *) modelName inBundleNamed:(NSString *) bundleName +{ + NSString *path = [[NSBundle mainBundle] pathForResource:[modelName stringByDeletingPathExtension] + ofType:[modelName pathExtension] + inDirectory:bundleName]; + NSURL *modelUrl = [NSURL fileURLWithPath:path]; + + NSManagedObjectModel *mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl]; + + return mom; +} + ++ (NSManagedObjectModel *) MR_newModelNamed:(NSString *) modelName inBundle:(NSBundle*) bundle +{ + NSString *path = [bundle pathForResource:[modelName stringByDeletingPathExtension] + ofType:[modelName pathExtension]]; + NSURL *modelUrl = [NSURL fileURLWithPath:path]; + + NSManagedObjectModel *mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl]; + + return mom; +} + ++ (NSManagedObjectModel *) MR_newManagedObjectModelNamed:(NSString *)modelFileName +{ + NSString *path = [[NSBundle mainBundle] pathForResource:[modelFileName stringByDeletingPathExtension] + ofType:[modelFileName pathExtension]]; + NSURL *momURL = [NSURL fileURLWithPath:path]; + + NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL]; + return model; +} + ++ (NSManagedObjectModel *) MR_managedObjectModelNamed:(NSString *)modelFileName +{ + NSManagedObjectModel *model = [self MR_newManagedObjectModelNamed:modelFileName]; + return model; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.h new file mode 100644 index 0000000..efdc8b4 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.h @@ -0,0 +1,30 @@ +// +// NSPersistentStore+MagicalRecord.h +// +// Created by Saul Mora on 3/11/10. +// Copyright 2010 Magical Panda Software, LLC All rights reserved. +// + +#import +#import +#import "MagicalRecordDeprecationMacros.h" + +// option to autodelete store if it already exists + +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordDefaultStoreFileName; + + +@interface NSPersistentStore (MagicalRecord) + ++ (MR_nonnull NSURL *) MR_defaultLocalStoreUrl; + ++ (MR_nullable NSPersistentStore *) MR_defaultPersistentStore; ++ (void) MR_setDefaultPersistentStore:(MR_nullable NSPersistentStore *) store; + ++ (MR_nullable NSURL *) MR_urlForStoreName:(MR_nonnull NSString *)storeFileName; ++ (MR_nullable NSURL *) MR_cloudURLForUbiquitousContainer:(MR_nonnull NSString *)bucketName; ++ (MR_nullable NSURL *) MR_cloudURLForUbiqutiousContainer:(MR_nonnull NSString *)bucketName MR_DEPRECATED_WILL_BE_REMOVED_IN_PLEASE_USE("4.0", "MR_cloudURLForUbiquitousContainer:"); + +@end + + diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.m new file mode 100644 index 0000000..5599990 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.m @@ -0,0 +1,71 @@ +// +// NSPersistentStore+MagicalRecord.m +// +// Created by Saul Mora on 3/11/10. +// Copyright 2010 Magical Panda Software, LLC All rights reserved. +// + +#import "NSPersistentStore+MagicalRecord.h" + +NSString * const kMagicalRecordDefaultStoreFileName = @"CoreDataStore.sqlite"; + +static NSPersistentStore *defaultPersistentStore_ = nil; + + +@implementation NSPersistentStore (MagicalRecord) + ++ (NSPersistentStore *) MR_defaultPersistentStore +{ + return defaultPersistentStore_; +} + ++ (void) MR_setDefaultPersistentStore:(NSPersistentStore *)store +{ + defaultPersistentStore_ = store; +} + ++ (NSString *) MR_directory:(NSSearchPathDirectory)type +{ + return [NSSearchPathForDirectoriesInDomains(type, NSUserDomainMask, YES) lastObject]; +} + ++ (NSString *)MR_applicationDocumentsDirectory +{ + return [self MR_directory:NSDocumentDirectory]; +} + ++ (NSString *)MR_applicationStorageDirectory +{ + NSString *applicationName = [[[NSBundle mainBundle] infoDictionary] valueForKey:(NSString *)kCFBundleNameKey]; + return [[self MR_directory:NSApplicationSupportDirectory] stringByAppendingPathComponent:applicationName]; +} + ++ (NSURL *) MR_urlForStoreName:(NSString *)storeFileName +{ + NSString *pathForStoreName = [[self MR_applicationStorageDirectory] stringByAppendingPathComponent:storeFileName]; + return [NSURL fileURLWithPath:pathForStoreName]; +} + ++ (NSURL *) MR_cloudURLForUbiquitousContainer:(NSString *)bucketName; +{ + NSFileManager *fileManager = [[NSFileManager alloc] init]; + NSURL *cloudURL = nil; + if ([fileManager respondsToSelector:@selector(URLForUbiquityContainerIdentifier:)]) + { + cloudURL = [fileManager URLForUbiquityContainerIdentifier:bucketName]; + } + + return cloudURL; +} + ++ (NSURL *) MR_cloudURLForUbiqutiousContainer:(NSString *)bucketName; +{ + return [self MR_cloudURLForUbiquitousContainer:bucketName]; +} + ++ (NSURL *) MR_defaultLocalStoreUrl +{ + return [self MR_urlForStoreName:kMagicalRecordDefaultStoreFileName]; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.h new file mode 100644 index 0000000..836fd44 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.h @@ -0,0 +1,51 @@ +// +// NSPersistentStoreCoordinator+MagicalRecord.h +// +// Created by Saul Mora on 3/11/10. +// Copyright 2010 Magical Panda Software, LLC All rights reserved. +// + +#import +#import + +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordPSCDidCompleteiCloudSetupNotification; +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordPSCMismatchWillDeleteStore; +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordPSCMismatchDidDeleteStore; +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordPSCMismatchWillRecreateStore; +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordPSCMismatchDidRecreateStore; +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordPSCMismatchCouldNotDeleteStore; +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordPSCMismatchCouldNotRecreateStore; + +@interface NSPersistentStoreCoordinator (MagicalRecord) + ++ (MR_nullable NSPersistentStoreCoordinator *) MR_defaultStoreCoordinator; ++ (void) MR_setDefaultStoreCoordinator:(MR_nullable NSPersistentStoreCoordinator *)coordinator; + ++ (MR_nonnull NSPersistentStoreCoordinator *) MR_coordinatorWithInMemoryStore; + ++ (MR_nonnull NSPersistentStoreCoordinator *) MR_newPersistentStoreCoordinator NS_RETURNS_RETAINED; + ++ (MR_nonnull NSPersistentStoreCoordinator *) MR_coordinatorWithSqliteStoreNamed:(MR_nonnull NSString *)storeFileName; ++ (MR_nonnull NSPersistentStoreCoordinator *) MR_coordinatorWithAutoMigratingSqliteStoreNamed:(MR_nonnull NSString *)storeFileName; ++ (MR_nonnull NSPersistentStoreCoordinator *) MR_coordinatorWithSqliteStoreAtURL:(MR_nonnull NSURL *)storeURL; ++ (MR_nonnull NSPersistentStoreCoordinator *) MR_coordinatorWithAutoMigratingSqliteStoreAtURL:(MR_nonnull NSURL *)storeURL; ++ (MR_nonnull NSPersistentStoreCoordinator *) MR_coordinatorWithPersistentStore:(MR_nonnull NSPersistentStore *)persistentStore; ++ (MR_nonnull NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(MR_nonnull NSString *)containerID contentNameKey:(MR_nullable NSString *)contentNameKey localStoreNamed:(MR_nonnull NSString *)localStoreName cloudStorePathComponent:(MR_nullable NSString *)subPathComponent; ++ (MR_nonnull NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(MR_nonnull NSString *)containerID contentNameKey:(MR_nullable NSString *)contentNameKey localStoreAtURL:(MR_nonnull NSURL *)storeURL cloudStorePathComponent:(MR_nullable NSString *)subPathComponent; + ++ (MR_nonnull NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(MR_nonnull NSString *)containerID contentNameKey:(MR_nullable NSString *)contentNameKey localStoreNamed:(MR_nonnull NSString *)localStoreName cloudStorePathComponent:(MR_nullable NSString *)subPathComponent completion:(void (^ __MR_nullable)(void))completionHandler; ++ (MR_nonnull NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(MR_nonnull NSString *)containerID contentNameKey:(MR_nullable NSString *)contentNameKey localStoreAtURL:(MR_nonnull NSURL *)storeURL cloudStorePathComponent:(MR_nullable NSString *)subPathComponent completion:(void (^ __MR_nullable)(void))completionHandler; + +- (MR_nullable NSPersistentStore *) MR_addInMemoryStore; +- (MR_nullable NSPersistentStore *) MR_addAutoMigratingSqliteStoreNamed:(MR_nonnull NSString *) storeFileName; +- (MR_nullable NSPersistentStore *) MR_addAutoMigratingSqliteStoreAtURL:(MR_nonnull NSURL *)storeURL; + +- (MR_nullable NSPersistentStore *) MR_addSqliteStoreNamed:(MR_nonnull id)storeFileName withOptions:(MR_nullable __autoreleasing NSDictionary *)options; +- (MR_nullable NSPersistentStore *) MR_addSqliteStoreNamed:(MR_nonnull id)storeFileName configuration:(MR_nullable NSString *)configuration withOptions:(MR_nullable __autoreleasing NSDictionary *)options; + +- (void) MR_addiCloudContainerID:(MR_nonnull NSString *)containerID contentNameKey:(MR_nullable NSString *)contentNameKey localStoreNamed:(MR_nonnull NSString *)localStoreName cloudStorePathComponent:(MR_nullable NSString *)subPathComponent; +- (void) MR_addiCloudContainerID:(MR_nonnull NSString *)containerID contentNameKey:(MR_nullable NSString *)contentNameKey localStoreAtURL:(MR_nonnull NSURL *)storeURL cloudStorePathComponent:(MR_nullable NSString *)subPathComponent; +- (void) MR_addiCloudContainerID:(MR_nonnull NSString *)containerID contentNameKey:(MR_nullable NSString *)contentNameKey localStoreNamed:(MR_nonnull NSString *)localStoreName cloudStorePathComponent:(MR_nullable NSString *)subPathComponent completion:(void (^ __MR_nullable)(void))completionBlock; +- (void) MR_addiCloudContainerID:(MR_nonnull NSString *)containerID contentNameKey:(MR_nullable NSString *)contentNameKey localStoreAtURL:(MR_nonnull NSURL *)storeURL cloudStorePathComponent:(MR_nullable NSString *)subPathComponent completion:(void (^ __MR_nullable)(void))completionBlock; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.m new file mode 100644 index 0000000..4455c9a --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.m @@ -0,0 +1,457 @@ +// +// NSPersistentStoreCoordinator+MagicalRecord.m +// +// Created by Saul Mora on 3/11/10. +// Copyright 2010 Magical Panda Software, LLC All rights reserved. +// + +#import "NSPersistentStoreCoordinator+MagicalRecord.h" +#import "NSPersistentStore+MagicalRecord.h" +#import "NSManagedObjectModel+MagicalRecord.h" +#import "MagicalRecord+ErrorHandling.h" +#import "MagicalRecordLogging.h" + + +static NSPersistentStoreCoordinator *defaultCoordinator_ = nil; +NSString * const kMagicalRecordPSCDidCompleteiCloudSetupNotification = @"kMagicalRecordPSCDidCompleteiCloudSetupNotification"; +NSString * const kMagicalRecordPSCMismatchWillDeleteStore = @"kMagicalRecordPSCMismatchWillDeleteStore"; +NSString * const kMagicalRecordPSCMismatchDidDeleteStore = @"kMagicalRecordPSCMismatchDidDeleteStore"; +NSString * const kMagicalRecordPSCMismatchWillRecreateStore = @"kMagicalRecordPSCMismatchWillRecreateStore"; +NSString * const kMagicalRecordPSCMismatchDidRecreateStore = @"kMagicalRecordPSCMismatchDidRecreateStore"; +NSString * const kMagicalRecordPSCMismatchCouldNotDeleteStore = @"kMagicalRecordPSCMismatchCouldNotDeleteStore"; +NSString * const kMagicalRecordPSCMismatchCouldNotRecreateStore = @"kMagicalRecordPSCMismatchCouldNotRecreateStore"; + +@interface NSDictionary (MagicalRecordMerging) + +- (NSMutableDictionary*) MR_dictionaryByMergingDictionary:(NSDictionary*)d; + +@end + +@interface MagicalRecord (iCloudPrivate) + ++ (void) setICloudEnabled:(BOOL)enabled; + +@end + +@implementation NSPersistentStoreCoordinator (MagicalRecord) + ++ (NSPersistentStoreCoordinator *) MR_defaultStoreCoordinator +{ + if (defaultCoordinator_ == nil && [MagicalRecord shouldAutoCreateDefaultPersistentStoreCoordinator]) + { + [self MR_setDefaultStoreCoordinator:[self MR_newPersistentStoreCoordinator]]; + } + return defaultCoordinator_; +} + ++ (void) MR_setDefaultStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator +{ + defaultCoordinator_ = coordinator; + + if (defaultCoordinator_ != nil) + { + NSArray *persistentStores = [defaultCoordinator_ persistentStores]; + + if ([persistentStores count] && [NSPersistentStore MR_defaultPersistentStore] == nil) + { + [NSPersistentStore MR_setDefaultPersistentStore:[persistentStores firstObject]]; + } + } +} + +- (void) MR_createPathToStoreFileIfNeccessary:(NSURL *)urlForStore +{ + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSURL *pathToStore = [urlForStore URLByDeletingLastPathComponent]; + + NSError *error = nil; + BOOL pathWasCreated = [fileManager createDirectoryAtPath:[pathToStore path] withIntermediateDirectories:YES attributes:nil error:&error]; + + if (!pathWasCreated) + { + [MagicalRecord handleErrors:error]; + } +} + +- (NSPersistentStore *) MR_addSqliteStoreNamed:(id)storeFileName withOptions:(__autoreleasing NSDictionary *)options +{ + return [self MR_addSqliteStoreNamed:storeFileName configuration:nil withOptions:options]; +} + +- (NSPersistentStore *) MR_addSqliteStoreNamed:(id)storeFileName configuration:(NSString *)configuration withOptions:(__autoreleasing NSDictionary *)options +{ + NSURL *url = [storeFileName isKindOfClass:[NSURL class]] ? storeFileName : [NSPersistentStore MR_urlForStoreName:storeFileName]; + NSError *error = nil; + + [self MR_createPathToStoreFileIfNeccessary:url]; + + NSPersistentStore *store = [self addPersistentStoreWithType:NSSQLiteStoreType + configuration:configuration + URL:url + options:options + error:&error]; + + if (!store) + { + if ([MagicalRecord shouldDeleteStoreOnModelMismatch]) + { + BOOL isMigrationError = (([error code] == NSPersistentStoreIncompatibleVersionHashError) || ([error code] == NSMigrationMissingSourceModelError) || ([error code] == NSMigrationError)); + if ([[error domain] isEqualToString:NSCocoaErrorDomain] && isMigrationError) + { + [[NSNotificationCenter defaultCenter] postNotificationName:kMagicalRecordPSCMismatchWillDeleteStore object:nil]; + + NSError * deleteStoreError; + // Could not open the database, so... kill it! (AND WAL bits) + NSString *rawURL = [url absoluteString]; + NSURL *shmSidecar = [NSURL URLWithString:[rawURL stringByAppendingString:@"-shm"]]; + NSURL *walSidecar = [NSURL URLWithString:[rawURL stringByAppendingString:@"-wal"]]; + [[NSFileManager defaultManager] removeItemAtURL:url error:&deleteStoreError]; + [[NSFileManager defaultManager] removeItemAtURL:shmSidecar error:nil]; + [[NSFileManager defaultManager] removeItemAtURL:walSidecar error:nil]; + + MRLogWarn(@"Removed incompatible model version: %@", [url lastPathComponent]); + if(deleteStoreError) { + [[NSNotificationCenter defaultCenter] postNotificationName:kMagicalRecordPSCMismatchCouldNotDeleteStore object:nil userInfo:@{@"Error":deleteStoreError}]; + } + else { + [[NSNotificationCenter defaultCenter] postNotificationName:kMagicalRecordPSCMismatchDidDeleteStore object:nil]; + } + + [[NSNotificationCenter defaultCenter] postNotificationName:kMagicalRecordPSCMismatchWillRecreateStore object:nil]; + // Try one more time to create the store + store = [self addPersistentStoreWithType:NSSQLiteStoreType + configuration:nil + URL:url + options:options + error:&error]; + if (store) + { + [[NSNotificationCenter defaultCenter] postNotificationName:kMagicalRecordPSCMismatchDidRecreateStore object:nil]; + // If we successfully added a store, remove the error that was initially created + error = nil; + } + else { + [[NSNotificationCenter defaultCenter] postNotificationName:kMagicalRecordPSCMismatchCouldNotRecreateStore object:nil userInfo:@{@"Error":error}]; + } + } + } + [MagicalRecord handleErrors:error]; + } + return store; +} + +- (void) MR_addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey storeIdentifier:(id)storeIdentifier cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionBlock +{ + if (contentNameKey.length > 0) + { + NSAssert([contentNameKey rangeOfString:@"."].location == NSNotFound, @"NSPersistentStoreUbiquitousContentNameKey cannot contain a period."); + } + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + NSURL *cloudURL = [NSPersistentStore MR_cloudURLForUbiquitousContainer:containerID]; + if (subPathComponent) + { + cloudURL = [cloudURL URLByAppendingPathComponent:subPathComponent]; + } + + [MagicalRecord setICloudEnabled:cloudURL != nil]; + + NSDictionary *options = [[self class] MR_autoMigrationOptions]; + if (cloudURL) //iCloud is available + { + NSMutableDictionary *iCloudOptions = [[NSMutableDictionary alloc] init]; + [iCloudOptions setObject:cloudURL forKey:NSPersistentStoreUbiquitousContentURLKey]; + + if ([contentNameKey length] > 0) + { + [iCloudOptions setObject:contentNameKey forKey:NSPersistentStoreUbiquitousContentNameKey]; + } + + options = [options MR_dictionaryByMergingDictionary:iCloudOptions]; + } + else + { + MRLogWarn(@"iCloud is not enabled"); + } + + + if ([self respondsToSelector:@selector(performBlockAndWait:)]) + { + [self performSelector:@selector(performBlockAndWait:) withObject:^{ + [self MR_addSqliteStoreNamed:storeIdentifier withOptions:options]; + }]; + } + else + { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [self lock]; +#pragma clang diagnostic pop + [self MR_addSqliteStoreNamed:storeIdentifier withOptions:options]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [self unlock]; +#pragma clang diagnostic pop + } + + dispatch_async(dispatch_get_main_queue(), ^{ + if ([NSPersistentStore MR_defaultPersistentStore] == nil) + { + [NSPersistentStore MR_setDefaultPersistentStore:[[self persistentStores] firstObject]]; + } + if (completionBlock) + { + completionBlock(); + } + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter postNotificationName:kMagicalRecordPSCDidCompleteiCloudSetupNotification object:nil]; + }); + }); +} + + + +#pragma mark - Public Instance Methods + +- (NSPersistentStore *) MR_addInMemoryStore +{ + NSError *error = nil; + NSPersistentStore *store = [self addPersistentStoreWithType:NSInMemoryStoreType + configuration:nil + URL:nil + options:nil + error:&error]; + if (!store) + { + [MagicalRecord handleErrors:error]; + } + return store; +} + ++ (NSDictionary *) MR_autoMigrationOptions; +{ + // Adding the journalling mode recommended by apple + NSMutableDictionary *sqliteOptions = [NSMutableDictionary dictionary]; + [sqliteOptions setObject:@"WAL" forKey:@"journal_mode"]; + + NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, + [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, + sqliteOptions, NSSQLitePragmasOption, + nil]; + return options; +} + +- (NSPersistentStore *) MR_addAutoMigratingSqliteStoreNamed:(NSString *) storeFileName; +{ + NSDictionary *options = [[self class] MR_autoMigrationOptions]; + return [self MR_addSqliteStoreNamed:storeFileName withOptions:options]; +} + +- (NSPersistentStore *) MR_addAutoMigratingSqliteStoreAtURL:(NSURL *)storeURL +{ + NSDictionary *options = [[self class] MR_autoMigrationOptions]; + return [self MR_addSqliteStoreNamed:storeURL withOptions:options]; +} + + +#pragma mark - Public Class Methods + + ++ (NSPersistentStoreCoordinator *) MR_coordinatorWithAutoMigratingSqliteStoreNamed:(NSString *) storeFileName +{ + NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; + NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; + + [coordinator MR_addAutoMigratingSqliteStoreNamed:storeFileName]; + + //HACK: lame solution to fix automigration error "Migration failed after first pass" + if ([[coordinator persistentStores] count] == 0) + { + [coordinator performSelector:@selector(MR_addAutoMigratingSqliteStoreNamed:) withObject:storeFileName afterDelay:0.5]; + } + + return coordinator; +} + ++ (NSPersistentStoreCoordinator *) MR_coordinatorWithAutoMigratingSqliteStoreAtURL:(NSURL *)storeURL +{ + NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; + NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; + + [coordinator MR_addAutoMigratingSqliteStoreAtURL:storeURL]; + + //HACK: lame solution to fix automigration error "Migration failed after first pass" + if ([[coordinator persistentStores] count] == 0) + { + [coordinator performSelector:@selector(MR_addAutoMigratingSqliteStoreAtURL:) withObject:storeURL afterDelay:0.5]; + } + + return coordinator; +} + ++ (NSPersistentStoreCoordinator *) MR_coordinatorWithInMemoryStore +{ + NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; + NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; + + [coordinator MR_addInMemoryStore]; + + return coordinator; +} + ++ (NSPersistentStoreCoordinator *) MR_newPersistentStoreCoordinator +{ + NSPersistentStoreCoordinator *coordinator = [self MR_coordinatorWithSqliteStoreNamed:[MagicalRecord defaultStoreName]]; + + return coordinator; +} + +- (void) MR_addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent; +{ + [self MR_addiCloudContainerID:containerID + contentNameKey:contentNameKey + localStoreNamed:localStoreName + cloudStorePathComponent:subPathComponent + completion:nil]; +} + +- (void) MR_addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreAtURL:(NSURL *)storeURL cloudStorePathComponent:(NSString *)subPathComponent +{ + [self MR_addiCloudContainerID:containerID + contentNameKey:contentNameKey + localStoreAtURL:storeURL + cloudStorePathComponent:subPathComponent + completion:nil]; +} + +- (void) MR_addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionBlock; +{ + [self MR_addiCloudContainerID:containerID + contentNameKey:contentNameKey + storeIdentifier:localStoreName + cloudStorePathComponent:subPathComponent + completion:completionBlock]; +} + +- (void) MR_addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreAtURL:(NSURL *)storeURL cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionBlock; +{ + [self MR_addiCloudContainerID:containerID + contentNameKey:contentNameKey + storeIdentifier:storeURL + cloudStorePathComponent:subPathComponent + completion:completionBlock]; +} + ++ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID + contentNameKey:(NSString *)contentNameKey + localStoreNamed:(NSString *)localStoreName + cloudStorePathComponent:(NSString *)subPathComponent; +{ + return [self MR_coordinatorWithiCloudContainerID:containerID + contentNameKey:contentNameKey + localStoreNamed:localStoreName + cloudStorePathComponent:subPathComponent + completion:nil]; +} + ++ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID + contentNameKey:(NSString *)contentNameKey + localStoreAtURL:(NSURL *)storeURL + cloudStorePathComponent:(NSString *)subPathComponent +{ + return [self MR_coordinatorWithiCloudContainerID:containerID + contentNameKey:contentNameKey + localStoreAtURL:storeURL + cloudStorePathComponent:subPathComponent + completion:nil]; +} + ++ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID + contentNameKey:(NSString *)contentNameKey + localStoreNamed:(NSString *)localStoreName + cloudStorePathComponent:(NSString *)subPathComponent + completion:(void(^)(void))completionHandler; +{ + NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; + NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; + + [psc MR_addiCloudContainerID:containerID + contentNameKey:contentNameKey + localStoreNamed:localStoreName + cloudStorePathComponent:subPathComponent + completion:completionHandler]; + + return psc; +} + ++ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID + contentNameKey:(NSString *)contentNameKey + localStoreAtURL:(NSURL *)storeURL + cloudStorePathComponent:(NSString *)subPathComponent + completion:(void (^)(void))completionHandler +{ + NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; + NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; + + [psc MR_addiCloudContainerID:containerID + contentNameKey:contentNameKey + localStoreAtURL:storeURL + cloudStorePathComponent:subPathComponent + completion:completionHandler]; + + return psc; +} + ++ (NSPersistentStoreCoordinator *) MR_coordinatorWithPersistentStore:(NSPersistentStore *)persistentStore; +{ + NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; + NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; + + [psc MR_addSqliteStoreNamed:[persistentStore URL] withOptions:nil]; + + return psc; +} + ++ (NSPersistentStoreCoordinator *) MR_coordinatorWithSqliteStoreNamed:(NSString *)storeFileName withOptions:(NSDictionary *)options +{ + NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; + NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; + + [psc MR_addSqliteStoreNamed:storeFileName withOptions:options]; + return psc; +} + ++ (NSPersistentStoreCoordinator *) MR_coordinatorWithSqliteStoreAtURL:(NSURL *)storeURL withOptions:(NSDictionary *)options +{ + NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; + NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; + + [psc MR_addSqliteStoreNamed:storeURL withOptions:options]; + return psc; +} + ++ (NSPersistentStoreCoordinator *) MR_coordinatorWithSqliteStoreNamed:(NSString *)storeFileName +{ + return [self MR_coordinatorWithSqliteStoreNamed:storeFileName withOptions:nil]; +} + ++ (NSPersistentStoreCoordinator *) MR_coordinatorWithSqliteStoreAtURL:(NSURL *)storeURL +{ + return [self MR_coordinatorWithSqliteStoreAtURL:storeURL withOptions:nil]; +} + +@end + + +@implementation NSDictionary (Merging) + +- (NSMutableDictionary *) MR_dictionaryByMergingDictionary:(NSDictionary *)d; +{ + NSMutableDictionary *mutDict = [self mutableCopy]; + [mutDict addEntriesFromDictionary:d]; + return mutDict; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Actions.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Actions.h new file mode 100644 index 0000000..5be5126 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Actions.h @@ -0,0 +1,35 @@ +// +// MagicalRecord+Actions.h +// +// Created by Saul Mora on 2/24/11. +// Copyright 2011 Magical Panda Software. All rights reserved. +// + +#import +#import +#import +#import +#import + +@interface MagicalRecord (Actions) + +/* For all background saving operations. These calls will be sent to a different thread/queue. + */ ++ (void) saveWithBlock:(void (^ __MR_nonnull)(NSManagedObjectContext * __MR_nonnull localContext))block; ++ (void) saveWithBlock:(void (^ __MR_nonnull)(NSManagedObjectContext * __MR_nonnull localContext))block completion:(MR_nullable MRSaveCompletionHandler)completion; + +/* For saving on the current thread as the caller, only with a separate context. Useful when you're managing your own threads/queues and need a serial call to create or change data + */ ++ (void) saveWithBlockAndWait:(void (^ __MR_nonnull)(NSManagedObjectContext * __MR_nonnull localContext))block; + +@end + +@interface MagicalRecord (ActionsDeprecated) + ++ (void) saveUsingCurrentThreadContextWithBlock:(void (^ __MR_nonnull)(NSManagedObjectContext * __MR_nonnull localContext))block completion:(MR_nullable MRSaveCompletionHandler)completion MR_DEPRECATED_WILL_BE_REMOVED_IN("3.0"); ++ (void) saveUsingCurrentThreadContextWithBlockAndWait:(void (^ __MR_nonnull)(NSManagedObjectContext * __MR_nonnull localContext))block MR_DEPRECATED_WILL_BE_REMOVED_IN("3.0"); ++ (void) saveInBackgroundWithBlock:(void (^ __MR_nonnull)(NSManagedObjectContext * __MR_nonnull localContext))block MR_DEPRECATED_WILL_BE_REMOVED_IN("3.0"); ++ (void) saveInBackgroundWithBlock:(void (^ __MR_nonnull)(NSManagedObjectContext * __MR_nonnull localContext))block completion:(void (^ __MR_nullable)(void))completion MR_DEPRECATED_WILL_BE_REMOVED_IN("3.0"); ++ (void) saveInBackgroundUsingCurrentContextWithBlock:(void (^ __MR_nonnull)(NSManagedObjectContext * __MR_nonnull localContext))block completion:(void (^ __MR_nullable)(void))completion errorHandler:(void (^ __MR_nullable)(NSError * __MR_nullable error))errorHandler MR_DEPRECATED_WILL_BE_REMOVED_IN("3.0"); + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Actions.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Actions.m new file mode 100644 index 0000000..812521c --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Actions.m @@ -0,0 +1,143 @@ +// +// MagicalRecord+Actions.m +// +// Created by Saul Mora on 2/24/11. +// Copyright 2011 Magical Panda Software. All rights reserved. +// + +#import "MagicalRecord+Actions.h" +#import "NSManagedObjectContext+MagicalRecord.h" +#import "NSManagedObjectContext+MagicalThreading.h" + +@implementation MagicalRecord (Actions) + +#pragma mark - Asynchronous saving + ++ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block; +{ + [self saveWithBlock:block completion:nil]; +} + ++ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion; +{ + NSManagedObjectContext *savingContext = [NSManagedObjectContext MR_rootSavingContext]; + NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:savingContext]; + + [localContext performBlock:^{ + [localContext MR_setWorkingName:NSStringFromSelector(_cmd)]; + + if (block) { + block(localContext); + } + + [localContext MR_saveWithOptions:MRSaveParentContexts completion:completion]; + }]; +} + +#pragma mark - Synchronous saving + ++ (void) saveWithBlockAndWait:(void(^)(NSManagedObjectContext *localContext))block; +{ + NSManagedObjectContext *savingContext = [NSManagedObjectContext MR_rootSavingContext]; + NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:savingContext]; + + [localContext performBlockAndWait:^{ + [localContext MR_setWorkingName:NSStringFromSelector(_cmd)]; + + if (block) { + block(localContext); + } + + [localContext MR_saveWithOptions:MRSaveParentContexts|MRSaveSynchronously completion:nil]; + }]; +} + +@end + +#pragma mark - Deprecated Methods — DO NOT USE +@implementation MagicalRecord (ActionsDeprecated) + ++ (void) saveUsingCurrentThreadContextWithBlock:(void (^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion; +{ + NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread]; + + [localContext performBlock:^{ + [localContext MR_setWorkingName:NSStringFromSelector(_cmd)]; + + if (block) { + block(localContext); + } + + [localContext MR_saveWithOptions:MRSaveParentContexts completion:completion]; + }]; +} + ++ (void) saveUsingCurrentThreadContextWithBlockAndWait:(void (^)(NSManagedObjectContext *localContext))block; +{ + NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread]; + + [localContext performBlockAndWait:^{ + [localContext MR_setWorkingName:NSStringFromSelector(_cmd)]; + + if (block) { + block(localContext); + } + + [localContext MR_saveWithOptions:MRSaveParentContexts|MRSaveSynchronously completion:nil]; + }]; +} + ++ (void) saveInBackgroundWithBlock:(void(^)(NSManagedObjectContext *localContext))block +{ + [[self class] saveWithBlock:block completion:nil]; +} + ++ (void) saveInBackgroundWithBlock:(void(^)(NSManagedObjectContext *localContext))block completion:(void(^)(void))completion +{ + NSManagedObjectContext *savingContext = [NSManagedObjectContext MR_rootSavingContext]; + NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:savingContext]; + + [localContext performBlock:^{ + [localContext MR_setWorkingName:NSStringFromSelector(_cmd)]; + + if (block) + { + block(localContext); + } + + [localContext MR_saveToPersistentStoreAndWait]; + + if (completion) + { + completion(); + } + }]; +} + ++ (void) saveInBackgroundUsingCurrentContextWithBlock:(void (^)(NSManagedObjectContext *localContext))block completion:(void (^)(void))completion errorHandler:(void (^)(NSError *error))errorHandler; +{ + NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread]; + + [localContext performBlock:^{ + [localContext MR_setWorkingName:NSStringFromSelector(_cmd)]; + + if (block) { + block(localContext); + } + + [localContext MR_saveToPersistentStoreWithCompletion:^(BOOL contextDidSave, NSError *error) { + if (contextDidSave) { + if (completion) { + completion(); + } + } + else { + if (errorHandler) { + errorHandler(error); + } + } + }]; + }]; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.h new file mode 100644 index 0000000..610f2b4 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.h @@ -0,0 +1,21 @@ +// +// MagicalRecord+ErrorHandling.h +// Magical Record +// +// Created by Saul Mora on 3/6/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import +#import + +@interface MagicalRecord (ErrorHandling) + ++ (void) handleErrors:(MR_nonnull NSError *)error; +- (void) handleErrors:(MR_nonnull NSError *)error; + ++ (void) setErrorHandlerTarget:(MR_nullable id)target action:(MR_nonnull SEL)action; ++ (MR_nonnull SEL) errorHandlerAction; ++ (MR_nullable id) errorHandlerTarget; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.m new file mode 100644 index 0000000..3f1f126 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.m @@ -0,0 +1,95 @@ +// +// MagicalRecord+ErrorHandling.m +// Magical Record +// +// Created by Saul Mora on 3/6/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import "MagicalRecord+ErrorHandling.h" +#import "MagicalRecordLogging.h" + + +__weak static id errorHandlerTarget = nil; +static SEL errorHandlerAction = nil; + + +@implementation MagicalRecord (ErrorHandling) + ++ (void) cleanUpErrorHanding; +{ + errorHandlerTarget = nil; + errorHandlerAction = nil; +} + ++ (void) defaultErrorHandler:(NSError *)error +{ + NSDictionary *userInfo = [error userInfo]; + for (NSArray *detailedError in [userInfo allValues]) + { + if ([detailedError isKindOfClass:[NSArray class]]) + { + for (NSError *e in detailedError) + { + if ([e respondsToSelector:@selector(userInfo)]) + { + MRLogError(@"Error Details: %@", [e userInfo]); + } + else + { + MRLogError(@"Error Details: %@", e); + } + } + } + else + { + MRLogError(@"Error: %@", detailedError); + } + } + MRLogError(@"Error Message: %@", [error localizedDescription]); + MRLogError(@"Error Domain: %@", [error domain]); + MRLogError(@"Recovery Suggestion: %@", [error localizedRecoverySuggestion]); +} + ++ (void) handleErrors:(NSError *)error +{ + if (error) + { + // If a custom error handler is set, call that + if (errorHandlerTarget != nil && errorHandlerAction != nil) + { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + [errorHandlerTarget performSelector:errorHandlerAction withObject:error]; +#pragma clang diagnostic pop + } + else + { + // Otherwise, fall back to the default error handling + [self defaultErrorHandler:error]; + } + } +} + ++ (id) errorHandlerTarget +{ + return errorHandlerTarget; +} + ++ (SEL) errorHandlerAction +{ + return errorHandlerAction; +} + ++ (void) setErrorHandlerTarget:(id)target action:(SEL)action +{ + errorHandlerTarget = target; /* Deliberately don't retain to avoid potential retain cycles */ + errorHandlerAction = action; +} + +- (void) handleErrors:(NSError *)error +{ + [[self class] handleErrors:error]; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Options.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Options.h new file mode 100644 index 0000000..75f47e3 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Options.h @@ -0,0 +1,148 @@ +// +// MagicalRecord+Options.h +// Magical Record +// +// Created by Saul Mora on 3/6/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import + +/** + Defines "levels" of logging that will be used as values in a bitmask that filters log messages. + + @since Available in v2.3 and later. + */ +typedef NS_ENUM (NSUInteger, MagicalRecordLoggingMask) +{ + /** Log all errors */ + MagicalRecordLoggingMaskError = 1 << 0, + + /** Log warnings, and all errors */ + MagicalRecordLoggingMaskWarn = 1 << 1, + + /** Log informative messagess, warnings and all errors */ + MagicalRecordLoggingMaskInfo = 1 << 2, + + /** Log debugging messages, informative messages, warnings and all errors */ + MagicalRecordLoggingMaskDebug = 1 << 3, + + /** Log verbose diagnostic information, debugging messages, informative messages, messages, warnings and all errors */ + MagicalRecordLoggingMaskVerbose = 1 << 4, +}; + +/** + Defines a mask for logging that will be used by to filter log messages. + + @since Available in v2.3 and later. + */ +typedef NS_ENUM (NSUInteger, MagicalRecordLoggingLevel) +{ + /** Don't log anything */ + MagicalRecordLoggingLevelOff = 0, + + /** Log all errors and fatal messages */ + MagicalRecordLoggingLevelError = (MagicalRecordLoggingMaskError), + + /** Log warnings, errors and fatal messages */ + MagicalRecordLoggingLevelWarn = (MagicalRecordLoggingLevelError | MagicalRecordLoggingMaskWarn), + + /** Log informative, warning and error messages */ + MagicalRecordLoggingLevelInfo = (MagicalRecordLoggingLevelWarn | MagicalRecordLoggingMaskInfo), + + /** Log all debugging, informative, warning and error messages */ + MagicalRecordLoggingLevelDebug = (MagicalRecordLoggingLevelInfo | MagicalRecordLoggingMaskDebug), + + /** Log verbose diagnostic, debugging, informative, warning and error messages */ + MagicalRecordLoggingLevelVerbose = (MagicalRecordLoggingLevelDebug | MagicalRecordLoggingMaskVerbose), + + /** Log everything */ + MagicalRecordLoggingLevelAll = NSUIntegerMax +}; + + +@interface MagicalRecord (Options) + +/** + @name Configuration Options + */ + +/** + If this is true, the default managed object model will be automatically created if it doesn't exist when calling `[NSManagedObjectModel MR_defaultManagedObjectModel]`. + + @return current value of shouldAutoCreateManagedObjectModel. + + @since Available in v2.0.4 and later. + */ ++ (BOOL) shouldAutoCreateManagedObjectModel; + +/** + Setting this to true will make MagicalRecord create the default managed object model automatically if it doesn't exist when calling `[NSManagedObjectModel MR_defaultManagedObjectModel]`. + + @param autoCreate BOOL value that flags whether the default persistent store should be automatically created. + + @since Available in v2.0.4 and later. + */ ++ (void) setShouldAutoCreateManagedObjectModel:(BOOL)autoCreate; + +/** + If this is true, the default persistent store will be automatically created if it doesn't exist when calling `[NSPersistentStoreCoordinator MR_defaultStoreCoordinator]`. + + @return current value of shouldAutoCreateDefaultPersistentStoreCoordinator. + + @since Available in v2.0.4 and later. + */ ++ (BOOL) shouldAutoCreateDefaultPersistentStoreCoordinator; + +/** + Setting this to true will make MagicalRecord create the default persistent store automatically if it doesn't exist when calling `[NSPersistentStoreCoordinator MR_defaultStoreCoordinator]`. + + @param autoCreate BOOL value that flags whether the default persistent store should be automatically created. + + @since Available in v2.0.4 and later. + */ ++ (void) setShouldAutoCreateDefaultPersistentStoreCoordinator:(BOOL)autoCreate; + +/** + If this is true and MagicalRecord encounters a store with a version that does not match that of the model, the store will be removed from the disk. + This is extremely useful during development where frequent model changes can potentially require a delete and reinstall of the app. + + @return current value of shouldDeleteStoreOnModelMismatch + + @since Available in v2.0.4 and later. + */ ++ (BOOL) shouldDeleteStoreOnModelMismatch; + +/** + Setting this to true will make MagicalRecord delete any stores that it encounters which do not match the version of their model. + This is extremely useful during development where frequent model changes can potentially require a delete and reinstall of the app. + + @param shouldDelete BOOL value that flags whether mismatched stores should be deleted + + @since Available in v2.0.4 and later. + */ ++ (void) setShouldDeleteStoreOnModelMismatch:(BOOL)shouldDelete; + +/** + @name Logging Levels + */ + +/** + Returns the logging mask set for MagicalRecord in the current application. + + @return Current MagicalRecordLoggingLevel + + @since Available in v2.3 and later. + */ ++ (MagicalRecordLoggingLevel) loggingLevel; + +/** + Sets the logging mask set for MagicalRecord in the current application. + + @param level Any value from MagicalRecordLogLevel + + @since Available in v2.3 and later. + */ ++ (void) setLoggingLevel:(MagicalRecordLoggingLevel)level; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Options.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Options.m new file mode 100644 index 0000000..b9ba785 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Options.m @@ -0,0 +1,64 @@ +// +// MagicalRecord+Options.m +// Magical Record +// +// Created by Saul Mora on 3/6/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import "MagicalRecord+Options.h" + +#ifdef DEBUG +static MagicalRecordLoggingLevel kMagicalRecordLoggingLevel = MagicalRecordLoggingLevelDebug; +#else +static MagicalRecordLoggingLevel kMagicalRecordLoggingLevel = MagicalRecordLoggingLevelError; +#endif +static BOOL kMagicalRecordShouldAutoCreateManagedObjectModel = NO; +static BOOL kMagicalRecordShouldAutoCreateDefaultPersistentStoreCoordinator = NO; +static BOOL kMagicalRecordShouldDeleteStoreOnModelMismatch = NO; + +@implementation MagicalRecord (Options) + +#pragma mark - Configuration Options + ++ (BOOL) shouldAutoCreateManagedObjectModel; +{ + return kMagicalRecordShouldAutoCreateManagedObjectModel; +} + ++ (void) setShouldAutoCreateManagedObjectModel:(BOOL)autoCreate; +{ + kMagicalRecordShouldAutoCreateManagedObjectModel = autoCreate; +} + ++ (BOOL) shouldAutoCreateDefaultPersistentStoreCoordinator; +{ + return kMagicalRecordShouldAutoCreateDefaultPersistentStoreCoordinator; +} + ++ (void) setShouldAutoCreateDefaultPersistentStoreCoordinator:(BOOL)autoCreate; +{ + kMagicalRecordShouldAutoCreateDefaultPersistentStoreCoordinator = autoCreate; +} + ++ (BOOL) shouldDeleteStoreOnModelMismatch; +{ + return kMagicalRecordShouldDeleteStoreOnModelMismatch; +} + ++ (void) setShouldDeleteStoreOnModelMismatch:(BOOL)shouldDelete; +{ + kMagicalRecordShouldDeleteStoreOnModelMismatch = shouldDelete; +} + ++ (MagicalRecordLoggingLevel) loggingLevel; +{ + return kMagicalRecordLoggingLevel; +} + ++ (void) setLoggingLevel:(MagicalRecordLoggingLevel)level; +{ + kMagicalRecordLoggingLevel = level; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.h new file mode 100644 index 0000000..2552fa5 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.h @@ -0,0 +1,25 @@ +// +// MagicalRecord+Setup.h +// Magical Record +// +// Created by Saul Mora on 3/7/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import +#import + +@interface MagicalRecord (Setup) + ++ (void) setupCoreDataStack; ++ (void) setupCoreDataStackWithInMemoryStore; ++ (void) setupAutoMigratingCoreDataStack; + ++ (void) setupCoreDataStackWithStoreNamed:(MR_nonnull NSString *)storeName; ++ (void) setupCoreDataStackWithAutoMigratingSqliteStoreNamed:(MR_nonnull NSString *)storeName; + ++ (void) setupCoreDataStackWithStoreAtURL:(MR_nonnull NSURL *)storeURL; ++ (void) setupCoreDataStackWithAutoMigratingSqliteStoreAtURL:(MR_nonnull NSURL *)storeURL; + + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.m new file mode 100644 index 0000000..d0829fd --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.m @@ -0,0 +1,76 @@ +// +// MagicalRecord+Setup.m +// Magical Record +// +// Created by Saul Mora on 3/7/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import "MagicalRecord+Setup.h" +#import "NSManagedObject+MagicalRecord.h" +#import "NSPersistentStoreCoordinator+MagicalRecord.h" +#import "NSManagedObjectContext+MagicalRecord.h" + +@implementation MagicalRecord (Setup) + ++ (void) setupCoreDataStack +{ + [self setupCoreDataStackWithStoreNamed:[self defaultStoreName]]; +} + ++ (void) setupAutoMigratingCoreDataStack +{ + [self setupCoreDataStackWithAutoMigratingSqliteStoreNamed:[self defaultStoreName]]; +} + ++ (void) setupCoreDataStackWithStoreNamed:(NSString *)storeName +{ + if ([NSPersistentStoreCoordinator MR_defaultStoreCoordinator] != nil) return; + + NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithSqliteStoreNamed:storeName]; + [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator]; + + [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator]; +} + ++ (void) setupCoreDataStackWithAutoMigratingSqliteStoreNamed:(NSString *)storeName +{ + if ([NSPersistentStoreCoordinator MR_defaultStoreCoordinator] != nil) return; + + NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithAutoMigratingSqliteStoreNamed:storeName]; + [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator]; + + [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator]; +} + ++ (void) setupCoreDataStackWithStoreAtURL:(NSURL *)storeURL +{ + if ([NSPersistentStoreCoordinator MR_defaultStoreCoordinator] != nil) return; + + NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithSqliteStoreAtURL:storeURL]; + [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator]; + + [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator]; +} + ++ (void) setupCoreDataStackWithAutoMigratingSqliteStoreAtURL:(NSURL *)storeURL +{ + if ([NSPersistentStoreCoordinator MR_defaultStoreCoordinator] != nil) return; + + NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithAutoMigratingSqliteStoreAtURL:storeURL]; + [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator]; + + [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator]; +} + ++ (void) setupCoreDataStackWithInMemoryStore; +{ + if ([NSPersistentStoreCoordinator MR_defaultStoreCoordinator] != nil) return; + + NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithInMemoryStore]; + [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator]; + + [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator]; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandMethods.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandMethods.h new file mode 100644 index 0000000..bf38be2 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandMethods.h @@ -0,0 +1,10 @@ +// +// Copyright (c) 2015 Magical Panda Software LLC. All rights reserved. + +#import + +@interface MagicalRecord (ShorthandMethods) + ++ (void)enableShorthandMethods; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandMethods.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandMethods.m new file mode 100644 index 0000000..80e7410 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandMethods.m @@ -0,0 +1,135 @@ +// +// Copyright (c) 2015 Magical Panda Software LLC. All rights reserved. + +#import "MagicalRecord+ShorthandMethods.h" +#import + +static NSString *const kMagicalRecordCategoryPrefix = @"MR_"; +static BOOL kMagicalRecordShorthandMethodsSwizzled = NO; + +@implementation MagicalRecord (ShorthandMethods) + ++ (void)enableShorthandMethods +{ + if (kMagicalRecordShorthandMethodsSwizzled == NO) + { + NSArray *classes = [self classesToSwizzle]; + + [classes enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop) { + Class objectClass = (Class)object; + + [self updateResolveMethodsForClass:objectClass]; + }]; + + kMagicalRecordShorthandMethodsSwizzled = YES; + } +} + ++ (NSArray *)classesToSwizzle +{ + return @[ [NSManagedObject class], + [NSManagedObjectContext class], + [NSManagedObjectModel class], + [NSPersistentStore class], + [NSPersistentStoreCoordinator class] ]; +} + ++ (NSArray *)methodNameBlacklist +{ + return @[ NSStringFromSelector(@selector(entityName)) ]; +} + ++ (BOOL)MR_resolveClassMethod:(SEL)originalSelector +{ + BOOL resolvedClassMethod = [self MR_resolveClassMethod:originalSelector]; + if (!resolvedClassMethod) + { + resolvedClassMethod = MRAddShortHandMethodForPrefixedClassMethod(self, originalSelector, kMagicalRecordCategoryPrefix); + } + return resolvedClassMethod; +} + ++ (BOOL)MR_resolveInstanceMethod:(SEL)originalSelector +{ + BOOL resolvedClassMethod = [self MR_resolveInstanceMethod:originalSelector]; + if (!resolvedClassMethod) + { + resolvedClassMethod = MRAddShorthandMethodForPrefixedInstanceMethod(self, originalSelector, kMagicalRecordCategoryPrefix); + } + return resolvedClassMethod; +} + +// In order to add support for non-prefixed AND prefixed methods, we need to swap the existing resolveClassMethod: and resolveInstanceMethod: implementations with the one in this class. ++ (void)updateResolveMethodsForClass:(Class)objectClass +{ + MRReplaceSelectorForTargetWithSourceImplementation(self, @selector(MR_resolveClassMethod:), objectClass, @selector(resolveClassMethod:)); + MRReplaceSelectorForTargetWithSourceImplementation(self, @selector(MR_resolveInstanceMethod:), objectClass, @selector(resolveInstanceMethod:)); +} + +static void MRReplaceSelectorForTargetWithSourceImplementation(Class sourceClass, SEL sourceSelector, Class targetClass, SEL targetSelector) +{ + Method sourceClassMethod = class_getClassMethod(sourceClass, sourceSelector); + Method targetClassMethod = class_getClassMethod(targetClass, targetSelector); + + Class targetMetaClass = objc_getMetaClass([NSStringFromClass(targetClass) cStringUsingEncoding:NSUTF8StringEncoding]); + + BOOL methodWasAdded = class_addMethod(targetMetaClass, sourceSelector, + method_getImplementation(targetClassMethod), + method_getTypeEncoding(targetClassMethod)); + + if (methodWasAdded) + { + class_replaceMethod(targetMetaClass, targetSelector, + method_getImplementation(sourceClassMethod), + method_getTypeEncoding(sourceClassMethod)); + } +} + +static BOOL MRAddShorthandMethodForPrefixedInstanceMethod(Class objectClass, SEL originalSelector, NSString *prefix) +{ + NSString *originalSelectorString = NSStringFromSelector(originalSelector); + + if ([originalSelectorString hasPrefix:prefix] == NO && + ([originalSelectorString hasPrefix:@"_"] || [originalSelectorString hasPrefix:@"init"])) + { + NSString *prefixedSelector = [prefix stringByAppendingString:originalSelectorString]; + Method existingMethod = class_getInstanceMethod(objectClass, NSSelectorFromString(prefixedSelector)); + + if (existingMethod) + { + BOOL methodWasAdded = class_addMethod(objectClass, + originalSelector, + method_getImplementation(existingMethod), + method_getTypeEncoding(existingMethod)); + + return methodWasAdded; + } + } + return NO; +} + +static BOOL MRAddShortHandMethodForPrefixedClassMethod(Class objectClass, SEL originalSelector, NSString *prefix) +{ + NSString *originalSelectorString = NSStringFromSelector(originalSelector); + + if ([originalSelectorString hasPrefix:prefix] == NO && + [originalSelectorString hasSuffix:@"entityName"] == NO) + { + NSString *prefixedSelector = [prefix stringByAppendingString:originalSelectorString]; + Method existingMethod = class_getClassMethod(objectClass, NSSelectorFromString(prefixedSelector)); + + if (existingMethod) + { + Class metaClass = objc_getMetaClass([NSStringFromClass(objectClass) cStringUsingEncoding:NSUTF8StringEncoding]); + BOOL methodWasAdded = class_addMethod(metaClass, + originalSelector, + method_getImplementation(existingMethod), + method_getTypeEncoding(existingMethod)); + + return methodWasAdded; + } + } + return NO; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+iCloud.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+iCloud.h new file mode 100644 index 0000000..c05212e --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+iCloud.h @@ -0,0 +1,44 @@ +// +// MagicalRecord+iCloud.h +// Magical Record +// +// Created by Saul Mora on 3/7/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import +#import + +@interface MagicalRecord (iCloud) + ++ (BOOL)isICloudEnabled; + ++ (void)setupCoreDataStackWithiCloudContainer:(MR_nonnull NSString *)containerID + localStoreNamed:(MR_nonnull NSString *)localStore; + ++ (void)setupCoreDataStackWithiCloudContainer:(MR_nonnull NSString *)containerID + contentNameKey:(MR_nullable NSString *)contentNameKey + localStoreNamed:(MR_nonnull NSString *)localStoreName + cloudStorePathComponent:(MR_nullable NSString *)pathSubcomponent; + ++ (void)setupCoreDataStackWithiCloudContainer:(MR_nonnull NSString *)containerID + contentNameKey:(MR_nullable NSString *)contentNameKey + localStoreNamed:(MR_nonnull NSString *)localStoreName + cloudStorePathComponent:(MR_nullable NSString *)pathSubcomponent + completion:(void (^ __MR_nullable)(void))completion; + ++ (void)setupCoreDataStackWithiCloudContainer:(MR_nonnull NSString *)containerID + localStoreAtURL:(MR_nonnull NSURL *)storeURL; + ++ (void)setupCoreDataStackWithiCloudContainer:(MR_nonnull NSString *)containerID + contentNameKey:(MR_nullable NSString *)contentNameKey + localStoreAtURL:(MR_nonnull NSURL *)storeURL + cloudStorePathComponent:(MR_nullable NSString *)pathSubcomponent; + ++ (void)setupCoreDataStackWithiCloudContainer:(MR_nonnull NSString *)containerID + contentNameKey:(MR_nullable NSString *)contentNameKey + localStoreAtURL:(MR_nonnull NSURL *)storeURL + cloudStorePathComponent:(MR_nullable NSString *)pathSubcomponent + completion:(void (^ __MR_nullable)(void))completion; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+iCloud.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+iCloud.m new file mode 100644 index 0000000..90c6b45 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+iCloud.m @@ -0,0 +1,86 @@ +// +// MagicalRecord+iCloud.m +// Magical Record +// +// Created by Saul Mora on 3/7/12. +// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. +// + +#import "MagicalRecord+iCloud.h" +#import "NSPersistentStoreCoordinator+MagicalRecord.h" +#import "NSManagedObjectContext+MagicalRecord.h" + +static BOOL _iCloudEnabled = NO; + +@implementation MagicalRecord (iCloud) + +#pragma mark - iCloud Methods + ++ (BOOL) isICloudEnabled; +{ + return _iCloudEnabled; +} + ++ (void) setICloudEnabled:(BOOL)enabled; +{ + @synchronized(self) + { + _iCloudEnabled = enabled; + } +} + ++ (void) setupCoreDataStackWithiCloudContainer:(NSString *)containerID localStoreNamed:(NSString *)localStore; +{ + [self setupCoreDataStackWithiCloudContainer:containerID + contentNameKey:nil + localStoreNamed:localStore + cloudStorePathComponent:nil]; +} + ++ (void) setupCoreDataStackWithiCloudContainer:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)pathSubcomponent; +{ + [self setupCoreDataStackWithiCloudContainer:containerID + contentNameKey:contentNameKey + localStoreNamed:localStoreName + cloudStorePathComponent:pathSubcomponent + completion:nil]; +} + ++ (void) setupCoreDataStackWithiCloudContainer:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)pathSubcomponent completion:(void(^)(void))completion; +{ + NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithiCloudContainerID:containerID + contentNameKey:contentNameKey + localStoreNamed:localStoreName + cloudStorePathComponent:pathSubcomponent + completion:completion]; + [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator]; + [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator]; +} + ++ (void) setupCoreDataStackWithiCloudContainer:(NSString *)containerID localStoreAtURL:(NSURL *)storeURL +{ + NSString *contentNameKey = [[[NSBundle mainBundle] infoDictionary] objectForKey:(id)kCFBundleIdentifierKey]; + [self setupCoreDataStackWithiCloudContainer:containerID + contentNameKey:contentNameKey + localStoreAtURL:storeURL + cloudStorePathComponent:nil]; +} + ++ (void) setupCoreDataStackWithiCloudContainer:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreAtURL:(NSURL *)storeURL cloudStorePathComponent:(NSString *)pathSubcomponent +{ + [self setupCoreDataStackWithiCloudContainer:containerID + contentNameKey:contentNameKey + localStoreAtURL:storeURL + cloudStorePathComponent:pathSubcomponent + completion:nil]; +} + ++ (void) setupCoreDataStackWithiCloudContainer:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreAtURL:(NSURL *)storeURL cloudStorePathComponent:(NSString *)pathSubcomponent completion:(void (^)(void))completion +{ + NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithiCloudContainerID:containerID contentNameKey:contentNameKey localStoreAtURL:storeURL cloudStorePathComponent:pathSubcomponent completion:completion]; + + [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator]; + [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator]; +} + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordDeprecationMacros.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordDeprecationMacros.h new file mode 100644 index 0000000..22d80f1 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordDeprecationMacros.h @@ -0,0 +1,7 @@ +// +// Created by Tony Arnold on 10/04/2014. +// Copyright (c) 2014 Magical Panda Software LLC. All rights reserved. +// + +#define MR_DEPRECATED_WILL_BE_REMOVED_IN(VERSION) __attribute__((deprecated("This method has been deprecated and will be removed in MagicalRecord " VERSION "."))) +#define MR_DEPRECATED_WILL_BE_REMOVED_IN_PLEASE_USE(VERSION, METHOD) __attribute__((deprecated("This method has been deprecated and will be removed in MagicalRecord " VERSION ". Please use `" METHOD "` instead."))) diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordInternal.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordInternal.h new file mode 100644 index 0000000..941b0fb --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordInternal.h @@ -0,0 +1,99 @@ +// +// MagicalRecord.h +// +// Created by Saul Mora on 3/11/10. +// Copyright 2010 Magical Panda Software, LLC All rights reserved. +// + +#import +#import + +/** + Defines current and historical version numbers for MagicalRecord. + + @since Available in v2.3 and later. + */ +typedef NS_ENUM(NSUInteger, MagicalRecordVersionTag) +{ + /** Version 2.2.0 */ + MagicalRecordVersionTag2_2 = 220, + + /** Version 2.3.0 */ + MagicalRecordVersionTag2_3 = 230, + + /** Version 3.0.0 */ + MagicalRecordVersionTag3_0 = 300 +}; + +// enable to use caches for the fetchedResultsControllers (iOS only) +// #define STORE_USE_CACHE + +#ifdef NS_BLOCKS_AVAILABLE + +OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordCleanedUpNotification; + +@class NSManagedObjectContext; +typedef void (^CoreDataBlock)(NSManagedObjectContext * __MR_nonnull context); + +#endif + +/** + Provides class methods to help setup, save, handle errors and provide information about the currently loaded version of MagicalRecord. + + @since Available in v1.0 and later. + */ +@interface MagicalRecord : NSObject + +/** + Returns the current version of MagicalRecord. See the MagicalRecordVersionTag enumeration for valid current and historical values. + + @return The current version as a double. + + @since Available in v2.3 and later. + */ ++ (MagicalRecordVersionTag) version; + +/** + Provides information about the current stack, including the model, coordinator, persistent store, the default context and any parent contexts of the default context. + + @return Description of the current state of the stack. + + @since Available in v2.3 and later. + */ ++ (MR_nonnull NSString *) currentStack; + +/** + Cleans up the entire MagicalRecord stack. Sets the default model, store and context to nil before posting a kMagicalRecordCleanedUpNotification notification. + + @since Available in v1.0 and later. + */ ++ (void) cleanUp; + +/** + Calls NSBundle's -bundleForClass: to determine the bundle to search for the default model within. + + @param modelClass Class to set the model from + + @since Available in v2.0 and later. + */ ++ (void) setDefaultModelFromClass:(MR_nonnull Class)modelClass; + +/** + Looks for a momd file with the specified name, and if found sets it as the default model. + + @param modelName Model name as a string, including file extension + + @since Available in v1.0 and later. + */ ++ (void) setDefaultModelNamed:(MR_nonnull NSString *)modelName; + +/** + Determines the store file name your app should use. This method is used by the MagicalRecord SQLite stacks when a store file is not specified. The file name returned is in the form ".sqlite". `` is taken from the application's info dictionary, which is retrieved from the method [[NSBundle mainBundle] infoDictionary]. If no bundle name is available, "CoreDataStore.sqlite" will be used. + + @return String of the form .sqlite + + @since Available in v2.0 and later. + */ ++ (MR_nonnull NSString *) defaultStoreName; + +@end diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordInternal.m b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordInternal.m new file mode 100644 index 0000000..230f04b --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordInternal.m @@ -0,0 +1,111 @@ +// +// MagicalRecord.m +// +// Created by Saul Mora on 3/11/10. +// Copyright 2010 Magical Panda Software, LLC All rights reserved. +// + +#import "MagicalRecord.h" + +NSString * const kMagicalRecordCleanedUpNotification = @"kMagicalRecordCleanedUpNotification"; + +@interface MagicalRecord (Internal) + ++ (void) cleanUpStack; ++ (void) cleanUpErrorHanding; + +@end + +@interface NSManagedObjectContext (MagicalRecordInternal) + ++ (void) MR_cleanUp; + +@end + + +@implementation MagicalRecord + ++ (MagicalRecordVersionTag) version +{ + return MagicalRecordVersionTag2_3; +} + ++ (void) cleanUp +{ + [self cleanUpErrorHanding]; + [self cleanUpStack]; + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter postNotificationName:kMagicalRecordCleanedUpNotification + object:nil + userInfo:nil]; +} + ++ (void) cleanUpStack; +{ + [NSManagedObjectContext MR_cleanUp]; + [NSManagedObjectModel MR_setDefaultManagedObjectModel:nil]; + [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:nil]; + [NSPersistentStore MR_setDefaultPersistentStore:nil]; +} + ++ (NSString *) currentStack +{ + NSMutableString *status = [NSMutableString stringWithString:@"Current Default Core Data Stack: ---- \n"]; + + [status appendFormat:@"Model: %@\n", [[NSManagedObjectModel MR_defaultManagedObjectModel] entityVersionHashesByName]]; + [status appendFormat:@"Coordinator: %@\n", [NSPersistentStoreCoordinator MR_defaultStoreCoordinator]]; + [status appendFormat:@"Store: %@\n", [NSPersistentStore MR_defaultPersistentStore]]; + [status appendFormat:@"Default Context: %@\n", [[NSManagedObjectContext MR_defaultContext] MR_description]]; + [status appendFormat:@"Context Chain: \n%@\n", [[NSManagedObjectContext MR_defaultContext] MR_parentChain]]; + + return status; +} + ++ (void) setDefaultModelNamed:(NSString *)modelName; +{ + NSManagedObjectModel *model = [NSManagedObjectModel MR_managedObjectModelNamed:modelName]; + [NSManagedObjectModel MR_setDefaultManagedObjectModel:model]; +} + ++ (void) setDefaultModelFromClass:(Class)modelClass; +{ + NSBundle *bundle = [NSBundle bundleForClass:modelClass]; + NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:[NSArray arrayWithObject:bundle]]; + [NSManagedObjectModel MR_setDefaultManagedObjectModel:model]; +} + ++ (NSString *) defaultStoreName; +{ + NSString *defaultName = [[[NSBundle mainBundle] infoDictionary] valueForKey:(id)kCFBundleNameKey]; + if (defaultName == nil) + { + defaultName = kMagicalRecordDefaultStoreFileName; + } + if (![defaultName hasSuffix:@"sqlite"]) + { + defaultName = [defaultName stringByAppendingPathExtension:@"sqlite"]; + } + + return defaultName; +} + + +#pragma mark - initialize + ++ (void) initialize; +{ + if (self == [MagicalRecord class]) + { + [self setShouldAutoCreateManagedObjectModel:YES]; + [self setShouldAutoCreateDefaultPersistentStoreCoordinator:NO]; +#ifdef DEBUG + [self setShouldDeleteStoreOnModelMismatch:YES]; +#else + [self setShouldDeleteStoreOnModelMismatch:NO]; +#endif + } +} + +@end + + diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordLogging.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordLogging.h new file mode 100644 index 0000000..11fcc27 --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordLogging.h @@ -0,0 +1,49 @@ +// +// MagicalRecordLogging.h +// MagicalRecord +// +// Created by Saul Mora on 10/4/13. +// Copyright (c) 2013 Magical Panda Software LLC. All rights reserved. +// + +#import + +#if MR_LOGGING_DISABLED + +#define MRLogError(frmt, ...) ((void)0) +#define MRLogWarn(frmt, ...) ((void)0) +#define MRLogInfo(frmt, ...) ((void)0) +#define MRLogDebug(frmt, ...) ((void)0) +#define MRLogVerbose(frmt, ...) ((void)0) + +#else + +#ifndef MR_LOGGING_CONTEXT +#define MR_LOGGING_CONTEXT 0 +#endif + +#if __has_include("CocoaLumberjack.h") || __has_include("CocoaLumberjack/CocoaLumberjack.h") + #define MR_LOG_LEVEL_DEF (DDLogLevel)[MagicalRecord loggingLevel] + #define CAST (DDLogFlag) + #import +#else + #define MR_LOG_LEVEL_DEF [MagicalRecord loggingLevel] + #define LOG_ASYNC_ENABLED YES + #define CAST + #define LOG_MAYBE(async, lvl, flg, ctx, tag, fnct, frmt, ...) \ + do \ + { \ + if ((lvl & flg) == flg) \ + { \ + NSLog(frmt, ##__VA_ARGS__); \ + } \ + } while (0) +#endif + +#define MRLogError(frmt, ...) LOG_MAYBE(NO, MR_LOG_LEVEL_DEF, CAST MagicalRecordLoggingMaskError, MR_LOGGING_CONTEXT, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__) +#define MRLogWarn(frmt, ...) LOG_MAYBE(LOG_ASYNC_ENABLED, MR_LOG_LEVEL_DEF, CAST MagicalRecordLoggingMaskWarn, MR_LOGGING_CONTEXT, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__) +#define MRLogInfo(frmt, ...) LOG_MAYBE(LOG_ASYNC_ENABLED, MR_LOG_LEVEL_DEF, CAST MagicalRecordLoggingMaskInfo, MR_LOGGING_CONTEXT, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__) +#define MRLogDebug(frmt, ...) LOG_MAYBE(LOG_ASYNC_ENABLED, MR_LOG_LEVEL_DEF, CAST MagicalRecordLoggingMaskDebug, MR_LOGGING_CONTEXT, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__) +#define MRLogVerbose(frmt, ...) LOG_MAYBE(LOG_ASYNC_ENABLED, MR_LOG_LEVEL_DEF, CAST MagicalRecordLoggingMaskVerbose, MR_LOGGING_CONTEXT, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__) + +#endif diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordXcode7CompatibilityMacros.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordXcode7CompatibilityMacros.h new file mode 100644 index 0000000..01a451e --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordXcode7CompatibilityMacros.h @@ -0,0 +1,41 @@ +// +// Copyright © 2015 Magical Panda Software LLC. All rights reserved. +// +// The following preprocessor macros can be used to adopt the new nullability annotations and generics +// features available in Xcode 7, while maintaining backwards compatibility with earlier versions of +// Xcode that do not support these features. +// +// Originally taken from https://gist.github.com/smileyborg/d513754bc1cf41678054 + +#ifndef MagicalRecordXcode7CompatibilityMacros_h +#define MagicalRecordXcode7CompatibilityMacros_h + +#if __has_feature(nullability) +#define MR_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN +#define MR_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END +#define MR_nullable nullable +#define MR_nonnull nonnull +#define __MR_nullable __nullable +#define __MR_nonnull __nonnull +#else +#define MR_ASSUME_NONNULL_BEGIN +#define MR_ASSUME_NONNULL_END +#define MR_nullable +#define MR_nonnull +#define __MR_nullable +#define __MR_nonnull +#endif + +#if __has_feature(objc_generics) +#define MR_GENERIC(class, ...) class<__VA_ARGS__> +#define MR_GENERIC_TYPE(type) type +#define __MR_kindof(class) __kindof class +#else +#define MR_GENERIC(class, ...) class +#define MR_GENERIC_TYPE(type) id +#define __MR_kindof(class) id +#endif + +#define MR_NSArrayOfNSManagedObjects MR_GENERIC(NSArray, __MR_kindof(NSManagedObject) *) * + +#endif /* MagicalRecordXcode7CompatibilityMacros_h */ diff --git a/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/MagicalRecord.h b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/MagicalRecord.h new file mode 100644 index 0000000..9e7755d --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/MagicalRecord/MagicalRecord.h @@ -0,0 +1,47 @@ +// +// MagicalRecord.h +// +// Created by Saul Mora on 28/07/10. +// Copyright 2010 Magical Panda Software, LLC All rights reserved. +// + +#import +#import + +//! Project version number for MagicalRecord. +FOUNDATION_EXPORT double MagicalRecordVersionNumber; + +//! Project version string for MagicalRecord. +FOUNDATION_EXPORT const unsigned char MagicalRecordVersionString[]; + +#import +#import +#import + +#import +#import +#import +#import +#import + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#import +#import +#import +#import +#import +#import +#import +#import diff --git a/Autorization:Registration Example/Pods/MagicalRecord/README.md b/Autorization:Registration Example/Pods/MagicalRecord/README.md new file mode 100644 index 0000000..1f5e89b --- /dev/null +++ b/Autorization:Registration Example/Pods/MagicalRecord/README.md @@ -0,0 +1,41 @@ +# ![Awesome](https://github.com/magicalpanda/magicalpanda.github.com/blob/master/images/awesome_logo_small.png?raw=true) MagicalRecord + +[![Circle CI](https://circleci.com/gh/magicalpanda/MagicalRecord/tree/develop.svg?style=svg)](https://circleci.com/gh/magicalpanda/MagicalRecord/tree/develop) + +In software engineering, the active record pattern is a design pattern found in software that stores its data in relational databases. It was named by Martin Fowler in his book Patterns of Enterprise Application Architecture. The interface to such an object would include functions such as Insert, Update, and Delete, plus properties that correspond more-or-less directly to the columns in the underlying database table. + +> Active record is an approach to accessing data in a database. A database table or view is wrapped into a class; thus an object instance is tied to a single row in the table. After creation of an object, a new row is added to the table upon save. Any object loaded gets its information from the database; when an object is updated, the corresponding row in the table is also updated. The wrapper class implements accessor methods or properties for each column in the table or view. + +> *- [Wikipedia]("http://en.wikipedia.org/wiki/Active_record_pattern")* + +MagicalRecord was inspired by the ease of Ruby on Rails' Active Record fetching. The goals of this code are: + +* Clean up my Core Data related code +* Allow for clear, simple, one-line fetches +* Still allow the modification of the NSFetchRequest when request optimizations are needed + +## Documentation + +- [Installation](Docs/Installing-MagicalRecord.md) +- [Getting Started](Docs/Getting-Started.md) +- [Working with Managed Object Contexts](Docs/Working-with-Managed-Object-Contexts.md) +- [Creating Entities](Docs/Creating-Entities.md) +- [Deleting Entities](Docs/Deleting-Entities.md) +- [Fetching Entities](Docs/Fetching-Entities.md) +- [Saving Entities](Docs/Saving-Entities.md) +- [Importing Data](Docs/Importing-Data.md) +- [Logging](Docs/Logging.md) +* [Other Resources](Docs/Other-Resources.md) + +## Support + +MagicalRecord is provided as-is, free of charge. For support, you have a few choices: + +- Ask your support question on [Stackoverflow.com](http://stackoverflow.com), and tag your question with **MagicalRecord**. The core team will be notified of your question only if you mark your question with this tag. The general Stack Overflow community is provided the opportunity to answer the question to help you faster, and to reap the reputation points. If the community is unable to answer, we'll try to step in and answer your question. +- If you believe you have found a bug in MagicalRecord, please submit a support ticket on the [Github Issues page for MagicalRecord](http://github.com/magicalpanda/magicalrecord/issues). We'll get to them as soon as we can. Please do **NOT** ask general questions on the issue tracker. Support questions will be closed unanswered. +- For more personal or immediate support, [MagicalPanda](http://magicalpanda.com/) is available for hire to consult on your project. + + +## Twitter + +Follow [@MagicalRecord](http://twitter.com/magicalrecord) on twitter to stay up to date with the latest updates relating to MagicalRecord. diff --git a/Autorization:Registration Example/Pods/Manifest.lock b/Autorization:Registration Example/Pods/Manifest.lock new file mode 100644 index 0000000..2523fb7 --- /dev/null +++ b/Autorization:Registration Example/Pods/Manifest.lock @@ -0,0 +1,97 @@ +PODS: + - AFNetworking (3.1.0): + - AFNetworking/NSURLSession (= 3.1.0) + - AFNetworking/Reachability (= 3.1.0) + - AFNetworking/Security (= 3.1.0) + - AFNetworking/Serialization (= 3.1.0) + - AFNetworking/UIKit (= 3.1.0) + - AFNetworking/NSURLSession (3.1.0): + - AFNetworking/Reachability + - AFNetworking/Security + - AFNetworking/Serialization + - AFNetworking/Reachability (3.1.0) + - AFNetworking/Security (3.1.0) + - AFNetworking/Serialization (3.1.0) + - AFNetworking/UIKit (3.1.0): + - AFNetworking/NSURLSession + - Crashlytics (3.7.0): + - Fabric (~> 1.6.3) + - Fabric (1.6.7) + - FSHelpers+Swift (2.1) + - Google/Core (2.0.4): + - GoogleInterchangeUtilities (~> 1.0) + - GoogleNetworkingUtilities (~> 1.0) + - GoogleSymbolUtilities (~> 1.0) + - GoogleUtilities (~> 1.1) + - Google/SignIn (2.0.4): + - Google/Core + - GoogleSignIn (~> 3.0) + - GoogleAppUtilities (1.1.1): + - GoogleSymbolUtilities (~> 1.0) + - GoogleAuthUtilities (2.0.1): + - GoogleNetworkingUtilities (~> 1.0) + - GoogleSymbolUtilities (~> 1.0) + - GoogleInterchangeUtilities (1.2.1): + - GoogleSymbolUtilities (~> 1.0) + - GoogleNetworkingUtilities (1.2.1): + - GoogleSymbolUtilities (~> 1.0) + - GoogleSignIn (3.0.0): + - GoogleAppUtilities (~> 1.0) + - GoogleAuthUtilities (~> 2.0) + - GoogleNetworkingUtilities (~> 1.0) + - GoogleUtilities (~> 1.0) + - GoogleSymbolUtilities (1.1.1) + - GoogleUtilities (1.3.1): + - GoogleSymbolUtilities (~> 1.0) + - IOSLinkedInAPI (2.0.0): + - AFNetworking (>= 2.0.0) + - MagicalRecord (2.3.2): + - MagicalRecord/Core (= 2.3.2) + - MagicalRecord/Core (2.3.2) + - SVProgressHUD (2.0.3) + +DEPENDENCIES: + - AFNetworking + - Crashlytics + - Fabric + - FSHelpers+Swift (from `https://github.com/fs/FSHelper.git`) + - Google/SignIn + - IOSLinkedInAPI (from `https://github.com/jeyben/IOSLinkedInAPI.git`, branch `master`) + - MagicalRecord + - SVProgressHUD + +EXTERNAL SOURCES: + FSHelpers+Swift: + :git: https://github.com/fs/FSHelper.git + IOSLinkedInAPI: + :branch: master + :git: https://github.com/jeyben/IOSLinkedInAPI.git + +CHECKOUT OPTIONS: + FSHelpers+Swift: + :commit: 1c0e69208239116ae2444a259a223ef62482c504 + :git: https://github.com/fs/FSHelper.git + IOSLinkedInAPI: + :commit: 7b37caa1d42cccb5757d142b6f0b0b272671afbf + :git: https://github.com/jeyben/IOSLinkedInAPI.git + +SPEC CHECKSUMS: + AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67 + Crashlytics: c3a2333dea9e2733d2777f730910321fc9e25c0d + Fabric: caf7580c725e64db144f610ac65cd60956911dc7 + FSHelpers+Swift: 76ec63cb6a68ee7170c23d3d22cfc933c08d52e5 + Google: d0932824c5b97c96be489aa6f4e8cd6c294d637d + GoogleAppUtilities: f1730f91f67767b453c289577040dd3f425ffdc7 + GoogleAuthUtilities: d7a19615cd7627688afcf181737f1011ee8b5a23 + GoogleInterchangeUtilities: def8415a862effc67d549d5b5b0b9c7a2f97d4de + GoogleNetworkingUtilities: 3e83269048cfb498dc7ec83ab36813360965c74f + GoogleSignIn: 3d571172b8603be39dcb1705d8217146bb76fe62 + GoogleSymbolUtilities: 33117db1b5f290c6fbf259585e4885b4c84b98d7 + GoogleUtilities: 56c5ac05b7aa5dc417a1bb85221a9516e04d7032 + IOSLinkedInAPI: d0adc664472d471b0df9b2aad92a2d82de926c40 + MagicalRecord: 53bed74b4323b930992a725be713e53b37d19755 + SVProgressHUD: b0830714205bea1317ea1a2ebc71e5633af334d4 + +PODFILE CHECKSUM: 3e66716a13293753e85c7998ef90d39cedcd2b92 + +COCOAPODS: 1.0.0 diff --git a/Autorization:Registration Example/Pods/Pods.xcodeproj/project.pbxproj b/Autorization:Registration Example/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..dd31138 --- /dev/null +++ b/Autorization:Registration Example/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,4238 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 02DD605FD5B64D5583FCD27F13F8862C /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E609302F21E595EC9675B1A32F0AEBB /* UIImageView+AFNetworking.m */; }; + 03EBED87D841930C19D22EB58725F8D9 /* FSHelpers+Swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EA4799746EF232D83AF8578676731148 /* FSHelpers+Swift-dummy.m */; }; + 053DABFA92D9BFF453AC6EDEDC8984F6 /* NSAttributeDescription+MagicalDataImport.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E74B138225CEC379972F24B18E56DAD /* NSAttributeDescription+MagicalDataImport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0627EC150C177700387C9E0C44C5D20E /* MagicalRecord+ShorthandMethods.m in Sources */ = {isa = PBXBuildFile; fileRef = 459ADB55B82FCF46E4B337FE3C709B94 /* MagicalRecord+ShorthandMethods.m */; }; + 09CD5E8011F9FF90817B4CEA30CCAF79 /* NSManagedObject+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D9225BF6FA19634A2F90E531A9582D3 /* NSManagedObject+MagicalDataImport.m */; }; + 09E64866A37EAC1852E7FA08CF2BBB07 /* NSAttributeDescription+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 8611F1876BDD6784D2BCF2E703F599D6 /* NSAttributeDescription+MagicalDataImport.m */; }; + 09E6DECD5AB594104764C6F81EB71537 /* MagicalRecordInternal.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DD96C0C33AB8AC647CC155AF66C7E2C /* MagicalRecordInternal.m */; }; + 0E3EA64E5F45DC28DC0777F66DBB1D14 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = D5B4EDEE8B4E8CD9DE55B51B9CD5FD8D /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0F22351DA1A3D702C2E6CDD83E490D5F /* MagicalRecord+ShorthandMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FC2DA89E29CFCC4E2951672AD7A325C /* MagicalRecord+ShorthandMethods.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 13A69E9B380214C8C762E34CD6B3951F /* NSString+MagicalDataImport.h in Headers */ = {isa = PBXBuildFile; fileRef = 686E793C49987978BECBCFC6C3B71C86 /* NSString+MagicalDataImport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1CBFC06BDD2E6004C28A2F70CC85A50E /* IOSLinkedInAPI-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E797AA1C4792408A64921F012952336 /* IOSLinkedInAPI-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1CFC309E0BA6037BCAF7DC74EC015EF8 /* FSE+Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31AF398B0F42AA2265846B4510B6F197 /* FSE+Dictionary.swift */; }; + 1ED25AA526192FB5F23E548CD087A9D3 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = F108959820291A6008F6C7352CD59E40 /* AFSecurityPolicy.m */; }; + 1FBE4F1EF412E7D1439C5C723B0617F1 /* NSManagedObject+MagicalRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = A29829E544A4793FF7A50D567F4C0182 /* NSManagedObject+MagicalRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 233BC55087C727070FEF93DD88E8EE92 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = BEE9062494973F8E7754F725C5AABA24 /* UIWebView+AFNetworking.m */; }; + 2499A91C5EF3776C20B1B3AA0A6EAEC9 /* FSE+UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2B83036DE956277C430B02F8B5D32E9 /* FSE+UIView.swift */; }; + 26619A95FEEF44DD9364917675A895C4 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6323169564EEF3DE10928932C81C710B /* AFHTTPSessionManager.m */; }; + 269BFA01D6EC6E4F4844B4DF8A4D6282 /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = D26749DA24CE1739C3F59453B44C8D4A /* UIImage+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 27DA3708AEF1A64A8C41048BE27602D8 /* FSKeyboardScrollSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56627ACF44B3D72CECE96DECF1C3AD3B /* FSKeyboardScrollSupport.swift */; }; + 27DB4644CB311586956D4E69D03EDECD /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E33DD811E907CB17373273C4C6B3A7A /* AFNetworking-dummy.m */; }; + 28BB165C03A669B64509C79C38D39A33 /* SVRadialGradientLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 449A3EABE9738CED7332D24B4F39F750 /* SVRadialGradientLayer.m */; }; + 2A77F38FE22978DCED7F724F8C554723 /* NSString+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 99501F452E0C1695461758F92411CD45 /* NSString+MagicalDataImport.m */; }; + 2C43A191D8DD208D26DA0C162330063C /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8927427AB8C61FE6F72E84CBB421BC2E /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 301F8AD823893477E2B9E9CBC31F1D9B /* NSManagedObjectModel+MagicalRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CD820CCD190C518BC526EDFEBD9F15E /* NSManagedObjectModel+MagicalRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3174D49C6CD7F435FF97E52DED12B0D5 /* NSRelationshipDescription+MagicalDataImport.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EB8518D076306BEA814BE880E94CA4C /* NSRelationshipDescription+MagicalDataImport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32B280B6F88E5359B67CEDBF1FC04CE0 /* MagicalRecord+Actions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BCE174490A2932D957284E0E77E1DAB /* MagicalRecord+Actions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3521DD81CBF7A37B5C82C98B2B699A1E /* MagicalRecordLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 32C177888237916EC746E6EBC7EA3EC8 /* MagicalRecordLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 365281511F621FEBD2F16C5FBA3EA929 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98306320766086E9F504F025CC74D905 /* SystemConfiguration.framework */; }; + 36BEEF5338EF31B0955DC632E0482747 /* NSManagedObject+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = C9F62A5E5E23841E8AC8792641D37994 /* NSManagedObject+MagicalRecord.m */; }; + 3BFEC1F842226F4A2EA83742A489AF04 /* NSManagedObjectContext+MagicalObserving.m in Sources */ = {isa = PBXBuildFile; fileRef = 846C270DED6C9FC926164D82E589A6E2 /* NSManagedObjectContext+MagicalObserving.m */; }; + 3DD7C1ADF1DA17264B11B3FCA93CDD9A /* MagicalRecord+iCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4C0D5F1E24A380E0FDD35681D7FA5A /* MagicalRecord+iCloud.m */; }; + 3ED8349E833A40310AAAC4A3EE153AA1 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B42B75CF5A21ACF39FFE47796AEB0BE /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3EE596D04B1944834C61A012E557AAFC /* NSManagedObjectContext+MagicalSaves.h in Headers */ = {isa = PBXBuildFile; fileRef = CF6A74CA48D432E6C1BED830EF4F0FC7 /* NSManagedObjectContext+MagicalSaves.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3F5DC541B71A33F6D5AA5012C7630425 /* MagicalRecord+Setup.m in Sources */ = {isa = PBXBuildFile; fileRef = CBF7B8B8C9BBB8F74EB38D310E4BAFBD /* MagicalRecord+Setup.m */; }; + 4067EFCF5E3EB39EF30B61D4ED7CABD8 /* AFAutoPurgingImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A1966DEF6507BFC6F2A1931E5DA3F13 /* AFAutoPurgingImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 438151B3D667A8B3D478F37E744BACF3 /* NSManagedObjectContext+MagicalThreading.m in Sources */ = {isa = PBXBuildFile; fileRef = DB810633B714CDF6D3F2709C91D374D0 /* NSManagedObjectContext+MagicalThreading.m */; }; + 443D2C1F02661304D60280AFD87EDE94 /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AEC2BAF12EA0AFFCD64DC7E03F604740 /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 44FBD4BED7EC0F0835002425D78154C4 /* MagicalRecord+Options.m in Sources */ = {isa = PBXBuildFile; fileRef = 61176A6ABEE1129AD225416AA2811F56 /* MagicalRecord+Options.m */; }; + 47278DCB77975B6063D2702578781B9D /* FSE+Array.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04E4D9CA75E7AF3396F5B41F681AB4A0 /* FSE+Array.swift */; }; + 477AB4D34ED325677FE2EA27C051470A /* SVProgressAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93FFD33C2A851F81F4516C01A8F76038 /* SVProgressAnimatedView.m */; }; + 48A65F1B523A66A65C3D463DD26641CD /* NSEntityDescription+MagicalDataImport.h in Headers */ = {isa = PBXBuildFile; fileRef = D5974283E1DEC016F76DB0B8F4788DD6 /* NSEntityDescription+MagicalDataImport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49063CFE2BE637CB9319D1F794D3B752 /* NSPersistentStoreCoordinator+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 67D17DD484BD73683B885756C62F37F3 /* NSPersistentStoreCoordinator+MagicalRecord.m */; }; + 565DBB9129441D06C3D401E5DF8F1456 /* NSRelationshipDescription+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 8074FB5A14952AD2CC35092CF3E5FD68 /* NSRelationshipDescription+MagicalDataImport.m */; }; + 59F788596D5BD1EF1033AFBB2AB3E595 /* FSE+UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDAF9C103E5055A6565ECB653CCB4A7F /* FSE+UIImage.swift */; }; + 5C648FA64F4E630D1FDD4093AE3DFE9B /* NSManagedObjectContext+MagicalObserving.h in Headers */ = {isa = PBXBuildFile; fileRef = 11BC93C2DFF0ABE09D5BF139F1C75A38 /* NSManagedObjectContext+MagicalObserving.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F939E2D4FAF2FDBFD375C9EF51AB4AC /* MagicalRecord+ErrorHandling.h in Headers */ = {isa = PBXBuildFile; fileRef = CEA737D5E9A6819C6809F7E30BC8ED4F /* MagicalRecord+ErrorHandling.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FF39E1F2818048B8864397EC539649D /* SVIndefiniteAnimatedView.h in Headers */ = {isa = PBXBuildFile; fileRef = C5DFF579BB0FD6E3FA35BC8C22DFC5FA /* SVIndefiniteAnimatedView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 622906F2B2B301EB2762271D4D22ED27 /* SVProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BD4F12310AB5A36E9D71BCDFAFACEB4B /* SVProgressHUD-dummy.m */; }; + 63CD7049BB090C4451B710D904FA59DB /* MagicalRecord+iCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = 54E005061AB36263535BE0D9A741990D /* MagicalRecord+iCloud.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6400299F78C5A1DA4B6DD869578EC2E0 /* LIALinkedInAuthorizationViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 971598A9B5326692505A0A315EF0106D /* LIALinkedInAuthorizationViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 655FA93CBD17F3CF67806F7C48EE7473 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 882C838D91D554BAE5D70B5F56FB6359 /* MobileCoreServices.framework */; }; + 67068CA69A518D1600EFD0CD5047C71C /* LIALinkedInApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 00F9A14F2433DA44052013B901E1223F /* LIALinkedInApplication.m */; }; + 672ED1D44DF4FE74BAEBED0E8CE700D7 /* SVProgressAnimatedView.h in Headers */ = {isa = PBXBuildFile; fileRef = A1B01285D980657C639FE345BCD797AC /* SVProgressAnimatedView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 67567B19EB838CBAA075F047928FFFF6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4724567F3225B5BA655CC9A158570CC8 /* UIKit.framework */; }; + 6A1A3ACAF8EE608ACAAF41A784F1FF38 /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC29C522958FF7B8999013CF400947C /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6A34C7BA2F239663810E50AAC868E031 /* NSNumber+MagicalDataImport.h in Headers */ = {isa = PBXBuildFile; fileRef = B5BEE87EC176C829377772D6E177A928 /* NSNumber+MagicalDataImport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6A9E4F3A65DA9A9C0DBE2F6EB5F7DFEA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2860B53B592FCA17F58D7D117CBCF421 /* Foundation.framework */; }; + 6B0F34719A7A1943DACF0AA8B44ED92F /* IOSLinkedInAPI-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6789CD31100984A9C475A64D17B999C7 /* IOSLinkedInAPI-dummy.m */; }; + 6C4C9F2048F19A2EAA348F55FB1B4E86 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 00F236810BCE44A1818E1679E1437155 /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C4FF9456D8EF07C1C3C086A4E789CB8 /* SVRadialGradientLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 705221588CC820DAE89C8472E137BF4F /* SVRadialGradientLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6D96A2EC3B206F63D2764478B0201144 /* MagicalImportFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 22C58AE3CC2E1EB57E1A2B4902DD142E /* MagicalImportFunctions.m */; }; + 6FED892127561AFCEC7D866B4C73ECAD /* MagicalRecord-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 39523725E6E2B5467F86CE0D238666C3 /* MagicalRecord-dummy.m */; }; + 7089F36838F4B800F0B3FCE6BCEE780A /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = DB64E306DDF54D2B0ACA3A7362948D8E /* UIRefreshControl+AFNetworking.m */; }; + 70B778EC8E66F741693DB5A4621258C8 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CEA2C409E21A03D0B72CB3E61414508 /* UIActivityIndicatorView+AFNetworking.m */; }; + 73D35B8FEA884C0FE7A5109404040AB6 /* Pods-Abstract-Authorization-moduleTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2576DDB93E6B48B6A4A09AFA88DFFFA3 /* Pods-Abstract-Authorization-moduleTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 78E25A4FFF7FD14F7B3C95899BD98466 /* SVIndefiniteAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 275642B8320FF0A584614CDFEE8DFD8E /* SVIndefiniteAnimatedView.m */; }; + 793840ADC4B76F038EA45CBAB9C00411 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 06A39CCAAEB7331EBB368F927FD9CC55 /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 796974B2B7F09A6545FB3599CAE17327 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = B281F621A8B81D601E3439B580FCC127 /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7A7D0D6730D771C4F7B0B6CE85A3EC05 /* SVProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 95854DF68BB20306C1B7DE62514B333D /* SVProgressHUD.m */; }; + 7E0AEE24FBFF0AE843F142BD9077D7EA /* AFImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = C6619B47BE597C81BB416127517E07C8 /* AFImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 812B1AB1534CE74971583AEE0AC98CD4 /* Pods-Abstract-Authorization-moduleUITests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C002F185677B835087A08357C6CA811A /* Pods-Abstract-Authorization-moduleUITests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 813F360497C515D67049CA30039E867E /* NSManagedObjectContext+MagicalChainSave.m in Sources */ = {isa = PBXBuildFile; fileRef = 90A4D7DFFC83899EF1F0A5258A432CAB /* NSManagedObjectContext+MagicalChainSave.m */; }; + 82458864D0CB30150809D33C128F6E71 /* FSHelpers+Swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4330CBEE4B94588D44AF25E2C60617EF /* FSHelpers+Swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 847D9E53AEE22576A05B30DF6EBC0A0A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2860B53B592FCA17F58D7D117CBCF421 /* Foundation.framework */; }; + 855CBA47CAB145C27E7A80357D9EC66B /* NSManagedObjectContext+MagicalChainSave.h in Headers */ = {isa = PBXBuildFile; fileRef = C5A68FF2C7A17FD6709817E0645C81D1 /* NSManagedObjectContext+MagicalChainSave.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 873A2565A8F13A37DC1F948FAE3A0C6B /* MagicalImportFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF4D6A87B4BEE1942C66151B883CEE8 /* MagicalImportFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8902464F0A59CB0157031F524F2FD0A3 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A7A4CF5050782ECD68127BD8FB35122 /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 893B546F3A597121DA0B018E2598FC89 /* FSE+String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 545E37BB89192EFB2DBEE0366C4F01E4 /* FSE+String.swift */; }; + 8DBC6776623D7F14151F2EBF0FA514AA /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58FB27E7E56C8721CC8117B5307C7034 /* CoreGraphics.framework */; }; + 8F0CE9C8293AB633C27761F997F6C4DC /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = CCFB66946166FE94F3F4F5849A4CB157 /* AFURLResponseSerialization.m */; }; + 900D6E6156416DB55D6D6E46E2E98A4B /* FSE+UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A93CD20DB06B1B6B912B78FED9A0AF4E /* FSE+UIColor.swift */; }; + 9164FADF1ABBE01AB6E91BB165EF5667 /* MagicalRecord+Setup.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FE5148EFED6E60AD2B6A3C4B05BD7FB /* MagicalRecord+Setup.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 921F9023DEE0379E9CBF31386853299B /* NSPersistentStore+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = D1379613261D263173BE58F8B0F4ADAF /* NSPersistentStore+MagicalRecord.m */; }; + 961C662C3609037575DE7205C7B9C26F /* LIALinkedInApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = B13957C08DB8CBC5F8ACCF7F5F357BC8 /* LIALinkedInApplication.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96ECBE9AA00698D60C44354C02425234 /* FSE+UITextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5F53B11BE6055955B4AC749D207D6B7 /* FSE+UITextView.swift */; }; + 97248185A6FF443CD481E9A5527FBF90 /* FSE+NSObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1276B2C908C7AC1E3C0FB9058DAF2E14 /* FSE+NSObject.swift */; }; + 99C73C815185BC9E8DFD1EAFB2D87EA4 /* NSManagedObject+MagicalDataImport.h in Headers */ = {isa = PBXBuildFile; fileRef = 61AD2C02ADA040561B01EBCD025BBF54 /* NSManagedObject+MagicalDataImport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B6F3E97E7435489C43BE1CC0F361CB5 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E8A9C054B4FACBFCB4F09D39B237F69 /* Security.framework */; }; + 9CBC32F7EFE35EBB5975CBB5095C3707 /* NSManagedObject+MagicalRequests.h in Headers */ = {isa = PBXBuildFile; fileRef = D97D5EFB60341B134DC0D23862292B1E /* NSManagedObject+MagicalRequests.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A02EC2919F0631338E41DC2B6F05B6E7 /* AFNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 641E912D34C2E34A7FBA62B3E2E616C8 /* AFNetworking.framework */; }; + A4A3B019FF95DC5FDC5A3C9D161F33B4 /* FSE+Double.swift in Sources */ = {isa = PBXBuildFile; fileRef = A05232D71F90B55FAC3A5E1FF3DDEE49 /* FSE+Double.swift */; }; + A4DA1E9955B1D43A2F1DAA06B5310698 /* NSManagedObject+MagicalFinders.h in Headers */ = {isa = PBXBuildFile; fileRef = A4698DFD5385F0CD8E9F13F31B0AC762 /* NSManagedObject+MagicalFinders.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A7016A80A063A737D3A89B2A56D54045 /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = D190C2E566839E35AE5836976DD16DCF /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A8700D660975B75E7CCF3CA1724BB337 /* NSString+LIAEncode.m in Sources */ = {isa = PBXBuildFile; fileRef = 48D02D496999838F09266DA939AD4E59 /* NSString+LIAEncode.m */; }; + A8917F4F856B9BF67E9BB7F740F33E02 /* MagicalRecordInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B2FBA2A36937BC166886C691517DF623 /* MagicalRecordInternal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A9E1A30383A1BA65A4E2BE18DE5B4600 /* FSHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5419EA0F5FC5E39B8B97A0D2187E80E1 /* FSHelpers.swift */; }; + B058AE85A579ADE91B3F00BB5C94F08B /* SVProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E797DE605FD59DFA6AAE73DC04467A9 /* SVProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B34EE327725D3D8A0C0620EB0FAEDBFD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2860B53B592FCA17F58D7D117CBCF421 /* Foundation.framework */; }; + B44E5E753420CC54E6DC5EC80B888CAF /* FSE+UIAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBEDD3EACE186D6EE2E04F1A20BADC09 /* FSE+UIAlertView.swift */; }; + B5819073A6906DA0255B81D9F7C399BF /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EB81DE5716D974030BB95E6297946169 /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B766FF5A7960B3CC2E8689CC5D8965B5 /* FSE+UITableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6657B7CE01896FB6BBC10CC7124E03A6 /* FSE+UITableView.swift */; }; + B8E051AE222124F3922022CD3BDD7C38 /* NSEntityDescription+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 47B62961E2C9DC17BBFED290CC6C62A2 /* NSEntityDescription+MagicalDataImport.m */; }; + BB1A286A7D2F60F7C43C7D43E1525FFE /* NSString+LIAEncode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3690BC957FD82C08711E56A8F33BDB58 /* NSString+LIAEncode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC0245CFFC4C3C09829E9073FC54D055 /* LIALinkedInHttpClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 916FF7753EAF17EE7C106AFD6A5F1213 /* LIALinkedInHttpClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC21786E21AA8A53C2AE66DD3D7C526E /* NSObject+MagicalDataImport.h in Headers */ = {isa = PBXBuildFile; fileRef = C72C8C36126F2D1F18710E1F75D10234 /* NSObject+MagicalDataImport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD35C7AD6DD983685586E62A51A1636B /* AFImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = A2194773513DAEFE257DD6B2ADEBBEE4 /* AFImageDownloader.m */; }; + BE3A4DCFF55EBC8C83DD61586D12C53D /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = F94B18D8AF75EC8D74420EE3284591DC /* UIWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BE86A99F6E977E16DE1BA9AE727FE6BC /* FSHelpersAutolayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F23C53FB9372090F92B1C6A12144DBE /* FSHelpersAutolayout.swift */; }; + BE9CEB3F7C332A3F3307C94CBEEBD384 /* FSE+Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = A89D548CDD543B80817EBB41E180405D /* FSE+Range.swift */; }; + BFF1E51E20B43595BC26047BFE775139 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2860B53B592FCA17F58D7D117CBCF421 /* Foundation.framework */; }; + C1F35A8F2C9F043CD2793B591BB8EA48 /* NSManagedObject+MagicalFinders.m in Sources */ = {isa = PBXBuildFile; fileRef = B88398337AA119DB1C50908DE0682BE0 /* NSManagedObject+MagicalFinders.m */; }; + C3A1FF40CC3EB4C8FFCECDF0C8C6CB68 /* LIALinkedInAuthorizationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 02F405248B5AF707A66BDE8F1B6BD2A0 /* LIALinkedInAuthorizationViewController.m */; }; + C3F7EB6381967C765C617DD8A4F7FC44 /* MagicalRecordDeprecationMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FA25C3C7CD2F05E591694D518212161 /* MagicalRecordDeprecationMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C40E3695531934CBD3592F190A12C58B /* FSE+Enumerations.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD0319B89ACD99E57894D0A68F5045A /* FSE+Enumerations.swift */; }; + C415F7D737863E80325536A51FD7406D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0470F352542C4ED5D186988138E5FDEB /* QuartzCore.framework */; }; + C57FFEC01297CAAF01AD798435A0BFE0 /* MagicalRecord+ErrorHandling.m in Sources */ = {isa = PBXBuildFile; fileRef = DF3E8B489832F4B1BF8C1249F9578EBB /* MagicalRecord+ErrorHandling.m */; }; + C992404482C8B3A404479DCFAB327225 /* LIALinkedInHttpClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FD3C980612F45F8D89FC90A2B85E587 /* LIALinkedInHttpClient.m */; }; + C99C9DBDB177D72695A4D29EAA47AEAE /* Pods-Abstract-Authorization-moduleTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CA72BC3AF8FE3B99E9925ED307784E8 /* Pods-Abstract-Authorization-moduleTests-dummy.m */; }; + CA1FC0E3273FF68DA837600721ECB68A /* NSManagedObjectModel+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = F649A6900B2D9F63EBCBB93808348B8F /* NSManagedObjectModel+MagicalRecord.m */; }; + CB353CD52B7F352D1915DE7955430FCF /* MagicalRecord-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F083134AE7408C0A0FE688AFFBA57EC /* MagicalRecord-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CBE52A7343DAD44D55002BC0245B29AA /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 25BE3CDA96B6B1C9EAD33D362ADE0F87 /* AFNetworkReachabilityManager.m */; }; + CD3A10C0DDE1E46EBFD4D6D95433584B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2860B53B592FCA17F58D7D117CBCF421 /* Foundation.framework */; }; + CFB0C951287F315BAB9676F02C4E1E44 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2860B53B592FCA17F58D7D117CBCF421 /* Foundation.framework */; }; + CFDE86D5953BBABA0DEABDB2D91E7432 /* Pods-Abstract-Authorization-moduleUITests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B4172D2845F0E1FDC8D4CADB741E264 /* Pods-Abstract-Authorization-moduleUITests-dummy.m */; }; + CFEF959D18201FF39D2D5317E42AD329 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2860B53B592FCA17F58D7D117CBCF421 /* Foundation.framework */; }; + D0DBE6E6961116F542077FE5FC2B26BB /* NSPersistentStoreCoordinator+MagicalRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = CFE9C4DCC16B74ED4AE9823D89E2DD35 /* NSPersistentStoreCoordinator+MagicalRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0E6AD841E2C4353D588D7FADAD7B636 /* FSE+NSDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC491F00DAA4C791629BE8AA68BCF098 /* FSE+NSDate.swift */; }; + D3A65693AAE22873697EE935FA5715E9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2860B53B592FCA17F58D7D117CBCF421 /* Foundation.framework */; }; + D56C1A690A12F062DDF9FFAF0BD8828F /* NSPersistentStore+MagicalRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 71152CBE1013719A32A97976D56298EF /* NSPersistentStore+MagicalRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D7054D617BEDE19E4799E46FB7789769 /* MagicalRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = AF848F81446AFE1FDAC7E81D6DD1FBC7 /* MagicalRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D70B5FD4563A492F941324224447056F /* MagicalRecordXcode7CompatibilityMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 661BB3B2834EC25BEF1937FC8CC8E9E4 /* MagicalRecordXcode7CompatibilityMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D99D0572602F471CBD5A25B645BB98CB /* Pods-Abstract-Authorization-module-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 26FC111C77862223A1BFAC49D1D1BA74 /* Pods-Abstract-Authorization-module-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB52E3ED7904BA42F3D27F55E11345E0 /* NSManagedObject+MagicalRequests.m in Sources */ = {isa = PBXBuildFile; fileRef = D9D242639C495D24E7457DB1EDB70F0F /* NSManagedObject+MagicalRequests.m */; }; + DB872C5121AA79D578F353483C0EE236 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F44A081E819E3C0F8E4CA18F2B6F8E6 /* AFNetworkActivityIndicatorManager.m */; }; + DC3CB82B45D21EF61A5EBB84CD7D5D90 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 05E998908AA6C9F99CC45C8CFFE5BECF /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DCD812B08A7235B3A271E5A48B8D76FA /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC4BBDE97A0FB2761153427244209BB8 /* CoreData.framework */; }; + E2D710D57A111023E2247B32A6369355 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 416AA2C2CB2D3DEF579DEAAA4B891321 /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E2F586A7B767B20A354F5D4B5F267C93 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0470F352542C4ED5D186988138E5FDEB /* QuartzCore.framework */; }; + E3A97FC13E0B19F080172C7CA01167E7 /* NSManagedObject+MagicalAggregation.h in Headers */ = {isa = PBXBuildFile; fileRef = 94A53B7EB37D386367A956856811D857 /* NSManagedObject+MagicalAggregation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E3E1503CD0D2E6F273E77E976B68B060 /* NSManagedObjectContext+MagicalThreading.h in Headers */ = {isa = PBXBuildFile; fileRef = 9924BFDA4DE172B4A4C2B3C5874F0BB0 /* NSManagedObjectContext+MagicalThreading.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E481F01CD542237FE777C7886D611E19 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D0B4479AADED9D42BCEF901F416E408 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E4FF1388561CEA6536DD601C59E0E2D8 /* NSManagedObjectContext+MagicalSaves.m in Sources */ = {isa = PBXBuildFile; fileRef = 565F2C2EF7322EE3A9195B3B2BD9604A /* NSManagedObjectContext+MagicalSaves.m */; }; + E5BFD28822640534E062B93949DE373D /* NSManagedObjectContext+MagicalRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = EB0AC3BEF83693588909E04BF7BECBED /* NSManagedObjectContext+MagicalRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E79EA40929885443805EA27AC7A44661 /* SVProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 77CC6AB37BE66B2D7B18241385E73670 /* SVProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ED5E909B740D18CB1D31F5BAE84AEE14 /* SVProgressHUD.bundle in Resources */ = {isa = PBXBuildFile; fileRef = C96077BC792561116BABA23A8EDA9A4A /* SVProgressHUD.bundle */; }; + F073E3199AB1263A0D73EB16465A676D /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AFEBB22875366AA9B2D5E011B0D7340 /* AFURLRequestSerialization.m */; }; + F09211BC390EC440EC8E15ACF457A26E /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = A3B537E664A75141DADF4ED0E8355F82 /* UIProgressView+AFNetworking.m */; }; + F1F8D1CD51E348CBDA66CE9FF0F75B52 /* NSObject+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = D117F94AF14FDCA2BA52F33048737206 /* NSObject+MagicalDataImport.m */; }; + F293B10B4B186E02970888FA95A2919E /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = FF24DEA3BEB7AFBB863660C847DEF36E /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F2A269484A8280B1DDC7D4D45432156F /* AFAutoPurgingImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 36333CBC5824983D395125CAF7EF679F /* AFAutoPurgingImageCache.m */; }; + F3086DFFAA5BBA34A0A5AA264BCD64A5 /* NSManagedObject+MagicalAggregation.m in Sources */ = {isa = PBXBuildFile; fileRef = 82F39BCAE41E363EC08FFFAD4522B8BE /* NSManagedObject+MagicalAggregation.m */; }; + F3FD71DF03D266FF20AE82A7D5D679CF /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = D997B21BE992740C2F6EA8E629D3AE53 /* UIButton+AFNetworking.m */; }; + F6F5DDC77B97AC716A1C7D37223BAF99 /* Pods-Abstract-Authorization-module-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A226B46708C4576A310B5C9B21AD6AC /* Pods-Abstract-Authorization-module-dummy.m */; }; + F7B7200B1DD5F3AA6EF4FB8A7E4D5675 /* NSNumber+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 513D240ECBF6806AA56B9042BBD902D7 /* NSNumber+MagicalDataImport.m */; }; + F8FCBCBA76CE1F4ABDE17D9D6D10DDCC /* FSE+UITextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65C96A4535D4DD6CE0CF58DBF3DF28BB /* FSE+UITextField.swift */; }; + F8FDE00AA639609A248ABB2022049BB3 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EE16800026D6358737B5C11D1229CDF /* AFURLSessionManager.m */; }; + F9C327FAA4DCAFB43A38C93D96E139F6 /* MagicalRecord+Options.h in Headers */ = {isa = PBXBuildFile; fileRef = EC126A1597E0F407A4253F857D11855E /* MagicalRecord+Options.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FED654D996F54BAA458DC0A4E86EBA11 /* NSManagedObjectContext+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 19E4305B9B53F71BBA810E8007E30EAF /* NSManagedObjectContext+MagicalRecord.m */; }; + FEF32063C461B20B65DB2A06A30BB6F7 /* MagicalRecord+Actions.m in Sources */ = {isa = PBXBuildFile; fileRef = 29365C9E65F590657C6B00D1A317B059 /* MagicalRecord+Actions.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 063F644CFB26ABFD90F43FE1998F040F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = A12CE32D481E6A74CB179A8975AC6ED5; + remoteInfo = SVProgressHUD; + }; + 12E4DF9E0872344195E7C3456F74A9C3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = C5410BB8D899B3EB45CF2BF4C2E884EC; + remoteInfo = IOSLinkedInAPI; + }; + 4773C120C1E007BBC8C04BA0770607B1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = A12CE32D481E6A74CB179A8975AC6ED5; + remoteInfo = SVProgressHUD; + }; + 56104AC0E8F50DB07E1FC8E64C5E8444 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = A12CE32D481E6A74CB179A8975AC6ED5; + remoteInfo = SVProgressHUD; + }; + 5793D40EEED2AF0CBA27922C67A77409 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 936FCBCC073E3961EB4D42C738FEB332; + remoteInfo = "FSHelpers+Swift"; + }; + 65B9822BE3C917F6F2991D929097CC4E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 936FCBCC073E3961EB4D42C738FEB332; + remoteInfo = "FSHelpers+Swift"; + }; + 698C455CA21377CB22E43F992BF358FE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = BB6D9DD106D1A7484C107C2C69F9624B; + remoteInfo = AFNetworking; + }; + 714AB78053C62B29C538AB1D59C0AB32 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = AD47E339A26F876F910CD9E671989350; + remoteInfo = MagicalRecord; + }; + 7178E045FB26A04529C060DC16B5E7FB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = BB6D9DD106D1A7484C107C2C69F9624B; + remoteInfo = AFNetworking; + }; + 79A1E20D9617868285BBFC471314710E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = AD47E339A26F876F910CD9E671989350; + remoteInfo = MagicalRecord; + }; + 7E2CED86716839605084CFCB979285CF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = BB6D9DD106D1A7484C107C2C69F9624B; + remoteInfo = AFNetworking; + }; + 90821835A010A0E592163A289C418CE2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = C5410BB8D899B3EB45CF2BF4C2E884EC; + remoteInfo = IOSLinkedInAPI; + }; + 918012DC7BE0377D6F3C60274638C4B3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 936FCBCC073E3961EB4D42C738FEB332; + remoteInfo = "FSHelpers+Swift"; + }; + AB7309E225CF41557DBF52300CE05DC8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = BB6D9DD106D1A7484C107C2C69F9624B; + remoteInfo = AFNetworking; + }; + BA387D23DA054ABA824A99251B68CDC6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = C5410BB8D899B3EB45CF2BF4C2E884EC; + remoteInfo = IOSLinkedInAPI; + }; + F2F6D97CBE288D13B9BE858CFFA30E41 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = AD47E339A26F876F910CD9E671989350; + remoteInfo = MagicalRecord; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 00F236810BCE44A1818E1679E1437155 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; + 00F9A14F2433DA44052013B901E1223F /* LIALinkedInApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LIALinkedInApplication.m; path = IOSLinkedInAPI/LIALinkedInApplication.m; sourceTree = ""; }; + 011DF640F575DCFA4C9170B4BFB42FA3 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; + 02F405248B5AF707A66BDE8F1B6BD2A0 /* LIALinkedInAuthorizationViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LIALinkedInAuthorizationViewController.m; path = IOSLinkedInAPI/LIALinkedInAuthorizationViewController.m; sourceTree = ""; }; + 032FDBA33CBC1014C82442B1E42D032B /* GoogleUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleUtilities.framework; path = Frameworks/GoogleUtilities.framework; sourceTree = ""; }; + 0470F352542C4ED5D186988138E5FDEB /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + 04E4D9CA75E7AF3396F5B41F681AB4A0 /* FSE+Array.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+Array.swift"; path = "Swift/Helpers/FSExtensions/FSE+Array.swift"; sourceTree = ""; }; + 05E998908AA6C9F99CC45C8CFFE5BECF /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + 06A39CCAAEB7331EBB368F927FD9CC55 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; + 07936B200F73DD63648A2CB89445E748 /* FSHelpers+Swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FSHelpers+Swift-prefix.pch"; sourceTree = ""; }; + 0E74B138225CEC379972F24B18E56DAD /* NSAttributeDescription+MagicalDataImport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributeDescription+MagicalDataImport.h"; path = "MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.h"; sourceTree = ""; }; + 0F23C53FB9372090F92B1C6A12144DBE /* FSHelpersAutolayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FSHelpersAutolayout.swift; path = Swift/Helpers/FSHelpersAutolayout.swift; sourceTree = ""; }; + 11BC93C2DFF0ABE09D5BF139F1C75A38 /* NSManagedObjectContext+MagicalObserving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObjectContext+MagicalObserving.h"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.h"; sourceTree = ""; }; + 1276B2C908C7AC1E3C0FB9058DAF2E14 /* FSE+NSObject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+NSObject.swift"; path = "Swift/Helpers/FSExtensions/FSE+NSObject.swift"; sourceTree = ""; }; + 133837E9A2820D9FF2193315947E24A6 /* Pods-Abstract-Authorization-module.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-module.debug.xcconfig"; sourceTree = ""; }; + 14510F1960A179EEBA5E30AFDACAB41B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 154313B130480258286435AC6E96092C /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Fabric.framework; path = iOS/Fabric.framework; sourceTree = ""; }; + 15FEC7E4E15BCFC7DEFBCC1DD2F61C8C /* MagicalRecord.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MagicalRecord.xcconfig; sourceTree = ""; }; + 1632C92BE044A69A8BB9294A6989EEE5 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 167440FE03F30E0E4A8435FE5F2F9062 /* SVProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SVProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 175D51CCCD7F27671472C2E56657286B /* Pods-Abstract-Authorization-moduleTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Abstract-Authorization-moduleTests-resources.sh"; sourceTree = ""; }; + 1780ECDAD9C3685A1B015B7364C2D90F /* Pods-Abstract-Authorization-moduleUITests.appstore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleUITests.appstore.xcconfig"; sourceTree = ""; }; + 18904D86ED9554FAAD8378221C61CEE7 /* Pods-Abstract-Authorization-moduleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleTests.debug.xcconfig"; sourceTree = ""; }; + 19021180158DC8C7D65521F768723231 /* Pods-Abstract-Authorization-moduleTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Abstract-Authorization-moduleTests-acknowledgements.markdown"; sourceTree = ""; }; + 19E4305B9B53F71BBA810E8007E30EAF /* NSManagedObjectContext+MagicalRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObjectContext+MagicalRecord.m"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.m"; sourceTree = ""; }; + 1CEA2C409E21A03D0B72CB3E61414508 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + 1D0B4479AADED9D42BCEF901F416E408 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; + 1F083134AE7408C0A0FE688AFFBA57EC /* MagicalRecord-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MagicalRecord-umbrella.h"; sourceTree = ""; }; + 1FF4D6A87B4BEE1942C66151B883CEE8 /* MagicalImportFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MagicalImportFunctions.h; path = MagicalRecord/Categories/DataImport/MagicalImportFunctions.h; sourceTree = ""; }; + 21A04D41D52ACFB9FC0F17EAE104A2C1 /* Pods-Abstract-Authorization-moduleUITests.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleUITests.test.xcconfig"; sourceTree = ""; }; + 22C58AE3CC2E1EB57E1A2B4902DD142E /* MagicalImportFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MagicalImportFunctions.m; path = MagicalRecord/Categories/DataImport/MagicalImportFunctions.m; sourceTree = ""; }; + 23AAB8CEC70A9442A97AD2E619F3C170 /* Pods-Abstract-Authorization-moduleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleTests.release.xcconfig"; sourceTree = ""; }; + 2576DDB93E6B48B6A4A09AFA88DFFFA3 /* Pods-Abstract-Authorization-moduleTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Abstract-Authorization-moduleTests-umbrella.h"; sourceTree = ""; }; + 25BE3CDA96B6B1C9EAD33D362ADE0F87 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; + 26E0F119705DB029B6DCCA900663AFB6 /* SVProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SVProgressHUD-prefix.pch"; sourceTree = ""; }; + 26FC111C77862223A1BFAC49D1D1BA74 /* Pods-Abstract-Authorization-module-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Abstract-Authorization-module-umbrella.h"; sourceTree = ""; }; + 275642B8320FF0A584614CDFEE8DFD8E /* SVIndefiniteAnimatedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVIndefiniteAnimatedView.m; path = SVProgressHUD/SVIndefiniteAnimatedView.m; sourceTree = ""; }; + 283DD94F66731093E3700B4AC98A4F82 /* GMRConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GMRConfiguration.h; path = Headers/GGLCore/Public/GMRConfiguration.h; sourceTree = ""; }; + 2860B53B592FCA17F58D7D117CBCF421 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 292D9ABFC4DD12BB774CF8B374C37BB2 /* SVProgressHUD.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SVProgressHUD.xcconfig; sourceTree = ""; }; + 29365C9E65F590657C6B00D1A317B059 /* MagicalRecord+Actions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MagicalRecord+Actions.m"; path = "MagicalRecord/Core/MagicalRecord+Actions.m"; sourceTree = ""; }; + 2AFEBB22875366AA9B2D5E011B0D7340 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; + 2BC29C522958FF7B8999013CF400947C /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + 2CD820CCD190C518BC526EDFEBD9F15E /* NSManagedObjectModel+MagicalRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObjectModel+MagicalRecord.h"; path = "MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.h"; sourceTree = ""; }; + 2DD96C0C33AB8AC647CC155AF66C7E2C /* MagicalRecordInternal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MagicalRecordInternal.m; path = MagicalRecord/Core/MagicalRecordInternal.m; sourceTree = ""; }; + 2E797DE605FD59DFA6AAE73DC04467A9 /* SVProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SVProgressHUD-umbrella.h"; sourceTree = ""; }; + 2F44A081E819E3C0F8E4CA18F2B6F8E6 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; + 311BE8D6E097138F066FCE0802AD0DDD /* GGLContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GGLContext.h; path = Headers/GGLCore/Public/GGLContext.h; sourceTree = ""; }; + 3133FF43BE7B95ED8A49428A2FA7C973 /* FSHelpers+Swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "FSHelpers+Swift.xcconfig"; sourceTree = ""; }; + 31AF398B0F42AA2265846B4510B6F197 /* FSE+Dictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+Dictionary.swift"; path = "Swift/Helpers/FSExtensions/FSE+Dictionary.swift"; sourceTree = ""; }; + 3236238E2EDA99B5574B7F4F4EACF4B4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 32473AA30D201FD15475F14C93BC74BF /* SignIn.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SignIn.h; path = Headers/GGLSignIn/Public/SignIn.h; sourceTree = ""; }; + 32C177888237916EC746E6EBC7EA3EC8 /* MagicalRecordLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MagicalRecordLogging.h; path = MagicalRecord/Core/MagicalRecordLogging.h; sourceTree = ""; }; + 336C6515D2C59DF0ECAB24D2A2EB7297 /* Pods-Abstract-Authorization-module-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Abstract-Authorization-module-frameworks.sh"; sourceTree = ""; }; + 36333CBC5824983D395125CAF7EF679F /* AFAutoPurgingImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFAutoPurgingImageCache.m; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.m"; sourceTree = ""; }; + 3690BC957FD82C08711E56A8F33BDB58 /* NSString+LIAEncode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+LIAEncode.h"; path = "IOSLinkedInAPI/NSString+LIAEncode.h"; sourceTree = ""; }; + 39523725E6E2B5467F86CE0D238666C3 /* MagicalRecord-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MagicalRecord-dummy.m"; sourceTree = ""; }; + 3A226B46708C4576A310B5C9B21AD6AC /* Pods-Abstract-Authorization-module-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Abstract-Authorization-module-dummy.m"; sourceTree = ""; }; + 3FE5148EFED6E60AD2B6A3C4B05BD7FB /* MagicalRecord+Setup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MagicalRecord+Setup.h"; path = "MagicalRecord/Core/MagicalRecord+Setup.h"; sourceTree = ""; }; + 416AA2C2CB2D3DEF579DEAAA4B891321 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; + 4217D728C94CDE166E7B0ADB5AABD63E /* Pods-Abstract-Authorization-module.test staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-module.test staging.xcconfig"; sourceTree = ""; }; + 4330CBEE4B94588D44AF25E2C60617EF /* FSHelpers+Swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FSHelpers+Swift-umbrella.h"; sourceTree = ""; }; + 449A3EABE9738CED7332D24B4F39F750 /* SVRadialGradientLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVRadialGradientLayer.m; path = SVProgressHUD/SVRadialGradientLayer.m; sourceTree = ""; }; + 453387A932BD97D9099B65F557C46F31 /* MagicalRecord.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MagicalRecord.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 459ADB55B82FCF46E4B337FE3C709B94 /* MagicalRecord+ShorthandMethods.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MagicalRecord+ShorthandMethods.m"; path = "MagicalRecord/Core/MagicalRecord+ShorthandMethods.m"; sourceTree = ""; }; + 461012D670D1FD4BB2567D4F73D27C43 /* Pods-Abstract-Authorization-module.appstore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-module.appstore.xcconfig"; sourceTree = ""; }; + 4724567F3225B5BA655CC9A158570CC8 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 47B62961E2C9DC17BBFED290CC6C62A2 /* NSEntityDescription+MagicalDataImport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSEntityDescription+MagicalDataImport.m"; path = "MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.m"; sourceTree = ""; }; + 48D02D496999838F09266DA939AD4E59 /* NSString+LIAEncode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+LIAEncode.m"; path = "IOSLinkedInAPI/NSString+LIAEncode.m"; sourceTree = ""; }; + 4B6C28C6F73195528ED6571812E7E146 /* libGIPNSURL+FIFE_external.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = "libGIPNSURL+FIFE_external.a"; path = "Libraries/libGIPNSURL+FIFE_external.a"; sourceTree = ""; }; + 4D645511F4ED7002A97FF29B45218B27 /* GIDSignIn.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignIn.h; path = Headers/Public/GIDSignIn.h; sourceTree = ""; }; + 4FC2DA89E29CFCC4E2951672AD7A325C /* MagicalRecord+ShorthandMethods.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MagicalRecord+ShorthandMethods.h"; path = "MagicalRecord/Core/MagicalRecord+ShorthandMethods.h"; sourceTree = ""; }; + 4FD3C980612F45F8D89FC90A2B85E587 /* LIALinkedInHttpClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LIALinkedInHttpClient.m; path = IOSLinkedInAPI/LIALinkedInHttpClient.m; sourceTree = ""; }; + 51229A4E8607C2CEEB6AAFF62A6C0908 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 513D240ECBF6806AA56B9042BBD902D7 /* NSNumber+MagicalDataImport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNumber+MagicalDataImport.m"; path = "MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.m"; sourceTree = ""; }; + 5148777883878BE53C001A2F0DF59474 /* GoogleInterchangeUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleInterchangeUtilities.framework; path = Frameworks/GoogleInterchangeUtilities.framework; sourceTree = ""; }; + 5419EA0F5FC5E39B8B97A0D2187E80E1 /* FSHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FSHelpers.swift; path = Swift/Helpers/FSHelpers.swift; sourceTree = ""; }; + 545E37BB89192EFB2DBEE0366C4F01E4 /* FSE+String.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+String.swift"; path = "Swift/Helpers/FSExtensions/FSE+String.swift"; sourceTree = ""; }; + 546F95D1B6A61CD50ADE42559ECC378B /* Pods_Abstract_Swift_BaseTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Abstract_Swift_BaseTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 54E005061AB36263535BE0D9A741990D /* MagicalRecord+iCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MagicalRecord+iCloud.h"; path = "MagicalRecord/Core/MagicalRecord+iCloud.h"; sourceTree = ""; }; + 565F2C2EF7322EE3A9195B3B2BD9604A /* NSManagedObjectContext+MagicalSaves.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObjectContext+MagicalSaves.m"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.m"; sourceTree = ""; }; + 56627ACF44B3D72CECE96DECF1C3AD3B /* FSKeyboardScrollSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FSKeyboardScrollSupport.swift; path = Swift/Helpers/FSProtocols/FSKeyboardScrollSupport.swift; sourceTree = ""; }; + 58FB27E7E56C8721CC8117B5307C7034 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + 5A7A4CF5050782ECD68127BD8FB35122 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + 5BCE174490A2932D957284E0E77E1DAB /* MagicalRecord+Actions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MagicalRecord+Actions.h"; path = "MagicalRecord/Core/MagicalRecord+Actions.h"; sourceTree = ""; }; + 5CA72BC3AF8FE3B99E9925ED307784E8 /* Pods-Abstract-Authorization-moduleTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Abstract-Authorization-moduleTests-dummy.m"; sourceTree = ""; }; + 5D826BE60B03B9AF42EA2997CFB21C05 /* Pods-Abstract-Authorization-moduleTests.release staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleTests.release staging.xcconfig"; sourceTree = ""; }; + 5EB8518D076306BEA814BE880E94CA4C /* NSRelationshipDescription+MagicalDataImport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSRelationshipDescription+MagicalDataImport.h"; path = "MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.h"; sourceTree = ""; }; + 5F975077F9F0258494AD090D3E02BC6E /* Core-Module.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Core-Module.h"; path = "Headers/ModuleHeaders/Core-Module.h"; sourceTree = ""; }; + 5FA25C3C7CD2F05E591694D518212161 /* MagicalRecordDeprecationMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MagicalRecordDeprecationMacros.h; path = MagicalRecord/Core/MagicalRecordDeprecationMacros.h; sourceTree = ""; }; + 61176A6ABEE1129AD225416AA2811F56 /* MagicalRecord+Options.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MagicalRecord+Options.m"; path = "MagicalRecord/Core/MagicalRecord+Options.m"; sourceTree = ""; }; + 61AD2C02ADA040561B01EBCD025BBF54 /* NSManagedObject+MagicalDataImport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObject+MagicalDataImport.h"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.h"; sourceTree = ""; }; + 6265B6C90B31BE74D2BFEF9374304265 /* Pods-Abstract-Authorization-moduleTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Abstract-Authorization-moduleTests-frameworks.sh"; sourceTree = ""; }; + 6323169564EEF3DE10928932C81C710B /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; + 641E912D34C2E34A7FBA62B3E2E616C8 /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 64F5C16C4C1307E30350E00F8CEB8DEB /* FSHelpers_Swift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FSHelpers_Swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 65C96A4535D4DD6CE0CF58DBF3DF28BB /* FSE+UITextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+UITextField.swift"; path = "Swift/Helpers/FSExtensions/FSE+UITextField.swift"; sourceTree = ""; }; + 661BB3B2834EC25BEF1937FC8CC8E9E4 /* MagicalRecordXcode7CompatibilityMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MagicalRecordXcode7CompatibilityMacros.h; path = MagicalRecord/Core/MagicalRecordXcode7CompatibilityMacros.h; sourceTree = ""; }; + 6657B7CE01896FB6BBC10CC7124E03A6 /* FSE+UITableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+UITableView.swift"; path = "Swift/Helpers/FSExtensions/FSE+UITableView.swift"; sourceTree = ""; }; + 6789CD31100984A9C475A64D17B999C7 /* IOSLinkedInAPI-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IOSLinkedInAPI-dummy.m"; sourceTree = ""; }; + 67D17DD484BD73683B885756C62F37F3 /* NSPersistentStoreCoordinator+MagicalRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSPersistentStoreCoordinator+MagicalRecord.m"; path = "MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.m"; sourceTree = ""; }; + 686E793C49987978BECBCFC6C3B71C86 /* NSString+MagicalDataImport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+MagicalDataImport.h"; path = "MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.h"; sourceTree = ""; }; + 6C34817385A1DA8DD6DD889E7D0A514D /* MagicalRecord-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MagicalRecord-prefix.pch"; sourceTree = ""; }; + 6F3B478C56C027121467C8C2E8672F73 /* Pods_Abstract_Swift_BaseUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Abstract_Swift_BaseUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 701585C54E5213D7ECF31C02DCAAF0BF /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; + 704B57C8D6765867EE21709B12E22ECA /* libGGLSignIn.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libGGLSignIn.a; path = Libraries/libGGLSignIn.a; sourceTree = ""; }; + 705221588CC820DAE89C8472E137BF4F /* SVRadialGradientLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVRadialGradientLayer.h; path = SVProgressHUD/SVRadialGradientLayer.h; sourceTree = ""; }; + 71152CBE1013719A32A97976D56298EF /* NSPersistentStore+MagicalRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSPersistentStore+MagicalRecord.h"; path = "MagicalRecord/Categories/NSPersistentStore+MagicalRecord.h"; sourceTree = ""; }; + 7314B6F9ABB069823B957361B0AE09B0 /* FSHelpers+Swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "FSHelpers+Swift.modulemap"; sourceTree = ""; }; + 75773C340C4343539A573B5505624A34 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 77CC6AB37BE66B2D7B18241385E73670 /* SVProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVProgressHUD.h; path = SVProgressHUD/SVProgressHUD.h; sourceTree = ""; }; + 79514319288A4ABE30193D7D3C0A6A25 /* GIDGoogleUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDGoogleUser.h; path = Headers/Public/GIDGoogleUser.h; sourceTree = ""; }; + 7A1966DEF6507BFC6F2A1931E5DA3F13 /* AFAutoPurgingImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFAutoPurgingImageCache.h; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.h"; sourceTree = ""; }; + 7B4172D2845F0E1FDC8D4CADB741E264 /* Pods-Abstract-Authorization-moduleUITests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Abstract-Authorization-moduleUITests-dummy.m"; sourceTree = ""; }; + 7B8CAF47E94C6D72D599420DC737A162 /* Pods-Abstract-Authorization-moduleTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Abstract-Authorization-moduleTests.modulemap"; sourceTree = ""; }; + 7C7DBB220A5C5F4C2F46DD8800984C55 /* SignIn-Module.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SignIn-Module.h"; path = "Headers/ModuleHeaders/SignIn-Module.h"; sourceTree = ""; }; + 7E45734D098A84D75E4A51D29C40109F /* GIDSignInButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInButton.h; path = Headers/Public/GIDSignInButton.h; sourceTree = ""; }; + 8074FB5A14952AD2CC35092CF3E5FD68 /* NSRelationshipDescription+MagicalDataImport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSRelationshipDescription+MagicalDataImport.m"; path = "MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.m"; sourceTree = ""; }; + 811BE53BC6F16D359DB71B97877D588C /* Pods-Abstract-Authorization-moduleUITests.appstore debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleUITests.appstore debug.xcconfig"; sourceTree = ""; }; + 81EE21845FCC2A4092C0F62D6A664EB4 /* Analytics-Module.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Analytics-Module.h"; path = "Headers/ModuleHeaders/Analytics-Module.h"; sourceTree = ""; }; + 82F39BCAE41E363EC08FFFAD4522B8BE /* NSManagedObject+MagicalAggregation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObject+MagicalAggregation.m"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.m"; sourceTree = ""; }; + 846C270DED6C9FC926164D82E589A6E2 /* NSManagedObjectContext+MagicalObserving.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObjectContext+MagicalObserving.m"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.m"; sourceTree = ""; }; + 8611F1876BDD6784D2BCF2E703F599D6 /* NSAttributeDescription+MagicalDataImport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributeDescription+MagicalDataImport.m"; path = "MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.m"; sourceTree = ""; }; + 8663B1FB252AABFF771B639E9EAB481E /* Pods-Abstract-Authorization-module-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Abstract-Authorization-module-resources.sh"; sourceTree = ""; }; + 8768CB74047F80A9F6E31C717A34C92F /* Pods-Abstract-Authorization-moduleTests.appstore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleTests.appstore.xcconfig"; sourceTree = ""; }; + 882C838D91D554BAE5D70B5F56FB6359 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; + 886EBEEB6B2651214D7CFF2C86594076 /* Pods_Abstract_Swift_Base.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Abstract_Swift_Base.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8927427AB8C61FE6F72E84CBB421BC2E /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; + 89522148299D0E30CA9EBED74CDD8770 /* GoogleNetworkingUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleNetworkingUtilities.framework; path = Frameworks/GoogleNetworkingUtilities.framework; sourceTree = ""; }; + 8AA8B068CB83D13D7FE15F04CDD8F70A /* SVProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SVProgressHUD.modulemap; sourceTree = ""; }; + 8D9225BF6FA19634A2F90E531A9582D3 /* NSManagedObject+MagicalDataImport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObject+MagicalDataImport.m"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.m"; sourceTree = ""; }; + 8E33DD811E907CB17373273C4C6B3A7A /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; + 8E609302F21E595EC9675B1A32F0AEBB /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; + 8E797AA1C4792408A64921F012952336 /* IOSLinkedInAPI-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IOSLinkedInAPI-umbrella.h"; sourceTree = ""; }; + 8ECB6EC43C1B869BC9333558B8E670E6 /* GoogleAuthUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleAuthUtilities.framework; path = Frameworks/GoogleAuthUtilities.framework; sourceTree = ""; }; + 8EE16800026D6358737B5C11D1229CDF /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; + 90A4D7DFFC83899EF1F0A5258A432CAB /* NSManagedObjectContext+MagicalChainSave.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObjectContext+MagicalChainSave.m"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalChainSave.m"; sourceTree = ""; }; + 916798D524C722E53DF6AC89F1C4F681 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 916FF7753EAF17EE7C106AFD6A5F1213 /* LIALinkedInHttpClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LIALinkedInHttpClient.h; path = IOSLinkedInAPI/LIALinkedInHttpClient.h; sourceTree = ""; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 93FFD33C2A851F81F4516C01A8F76038 /* SVProgressAnimatedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVProgressAnimatedView.m; path = SVProgressHUD/SVProgressAnimatedView.m; sourceTree = ""; }; + 948C70A2F9570EFE6162101B289F461A /* Pods-Abstract-Authorization-moduleUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleUITests.release.xcconfig"; sourceTree = ""; }; + 949B765502F9EFCC6CCCEF46752A4696 /* Pods-Abstract-Authorization-module-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Abstract-Authorization-module-acknowledgements.markdown"; sourceTree = ""; }; + 94A53B7EB37D386367A956856811D857 /* NSManagedObject+MagicalAggregation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObject+MagicalAggregation.h"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.h"; sourceTree = ""; }; + 94A89DFE2D9B36D9298C3CD7295BFD3A /* GoogleSignIn.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GoogleSignIn.h; path = Headers/Public/GoogleSignIn.h; sourceTree = ""; }; + 95854DF68BB20306C1B7DE62514B333D /* SVProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVProgressHUD.m; path = SVProgressHUD/SVProgressHUD.m; sourceTree = ""; }; + 971598A9B5326692505A0A315EF0106D /* LIALinkedInAuthorizationViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LIALinkedInAuthorizationViewController.h; path = IOSLinkedInAPI/LIALinkedInAuthorizationViewController.h; sourceTree = ""; }; + 98306320766086E9F504F025CC74D905 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + 9924BFDA4DE172B4A4C2B3C5874F0BB0 /* NSManagedObjectContext+MagicalThreading.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObjectContext+MagicalThreading.h"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.h"; sourceTree = ""; }; + 99501F452E0C1695461758F92411CD45 /* NSString+MagicalDataImport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+MagicalDataImport.m"; path = "MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.m"; sourceTree = ""; }; + 9B42B75CF5A21ACF39FFE47796AEB0BE /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; + 9E18D59F06564A3B4FFE3C0C197CD918 /* IOSLinkedInAPI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IOSLinkedInAPI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9E8A9C054B4FACBFCB4F09D39B237F69 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + A05232D71F90B55FAC3A5E1FF3DDEE49 /* FSE+Double.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+Double.swift"; path = "Swift/Helpers/FSExtensions/FSE+Double.swift"; sourceTree = ""; }; + A1B01285D980657C639FE345BCD797AC /* SVProgressAnimatedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVProgressAnimatedView.h; path = SVProgressHUD/SVProgressAnimatedView.h; sourceTree = ""; }; + A2194773513DAEFE257DD6B2ADEBBEE4 /* AFImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFImageDownloader.m; path = "UIKit+AFNetworking/AFImageDownloader.m"; sourceTree = ""; }; + A29829E544A4793FF7A50D567F4C0182 /* NSManagedObject+MagicalRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObject+MagicalRecord.h"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.h"; sourceTree = ""; }; + A3B537E664A75141DADF4ED0E8355F82 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; + A4698DFD5385F0CD8E9F13F31B0AC762 /* NSManagedObject+MagicalFinders.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObject+MagicalFinders.h"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.h"; sourceTree = ""; }; + A4C6B22819794B90F4DDC1ABB1BBA740 /* GoogleSymbolUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleSymbolUtilities.framework; path = Frameworks/GoogleSymbolUtilities.framework; sourceTree = ""; }; + A89D548CDD543B80817EBB41E180405D /* FSE+Range.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+Range.swift"; path = "Swift/Helpers/FSExtensions/FSE+Range.swift"; sourceTree = ""; }; + A93CD20DB06B1B6B912B78FED9A0AF4E /* FSE+UIColor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+UIColor.swift"; path = "Swift/Helpers/FSExtensions/FSE+UIColor.swift"; sourceTree = ""; }; + AA5E166E9E5472B42B4DD92FEE086184 /* AppInvite-Module.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "AppInvite-Module.h"; path = "Headers/ModuleHeaders/AppInvite-Module.h"; sourceTree = ""; }; + AC5BD194830BBCFDD2A306F0B8179AC7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AC699D0ED6C43F4C0D8CF4F3CFF541A7 /* IOSLinkedInAPI.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IOSLinkedInAPI.xcconfig; sourceTree = ""; }; + AD159C0AC13C935EA358E3B284FFF587 /* libSignIn_external.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libSignIn_external.a; path = Libraries/libSignIn_external.a; sourceTree = ""; }; + AEC2BAF12EA0AFFCD64DC7E03F604740 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; + AF848F81446AFE1FDAC7E81D6DD1FBC7 /* MagicalRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MagicalRecord.h; path = MagicalRecord/MagicalRecord.h; sourceTree = ""; }; + B13957C08DB8CBC5F8ACCF7F5F357BC8 /* LIALinkedInApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LIALinkedInApplication.h; path = IOSLinkedInAPI/LIALinkedInApplication.h; sourceTree = ""; }; + B281F621A8B81D601E3439B580FCC127 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; + B2FBA2A36937BC166886C691517DF623 /* MagicalRecordInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MagicalRecordInternal.h; path = MagicalRecord/Core/MagicalRecordInternal.h; sourceTree = ""; }; + B425B3B0E7AE099323B2CD289E9066A9 /* Pods-Abstract-Authorization-module.release staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-module.release staging.xcconfig"; sourceTree = ""; }; + B46F923C2063110D98BC936D027B350D /* Pods-Abstract-Authorization-moduleTests.test staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleTests.test staging.xcconfig"; sourceTree = ""; }; + B4DD23FC739D81CCC8FDF8B6D060C4EC /* GoogleAppUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleAppUtilities.framework; path = Frameworks/GoogleAppUtilities.framework; sourceTree = ""; }; + B5BEE87EC176C829377772D6E177A928 /* NSNumber+MagicalDataImport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNumber+MagicalDataImport.h"; path = "MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.h"; sourceTree = ""; }; + B6C384A3A59332A9E6EB7EA0F7311986 /* Pods-Abstract-Authorization-moduleUITests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Abstract-Authorization-moduleUITests-frameworks.sh"; sourceTree = ""; }; + B88398337AA119DB1C50908DE0682BE0 /* NSManagedObject+MagicalFinders.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObject+MagicalFinders.m"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.m"; sourceTree = ""; }; + BA766EEC9DAEC183C9EF484424A0FAE6 /* Pods-Abstract-Authorization-module.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-module.test.xcconfig"; sourceTree = ""; }; + BC4C0D5F1E24A380E0FDD35681D7FA5A /* MagicalRecord+iCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MagicalRecord+iCloud.m"; path = "MagicalRecord/Core/MagicalRecord+iCloud.m"; sourceTree = ""; }; + BD05EDD49D2B46E8956B9A0DB7F3D929 /* GGLErrorCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GGLErrorCode.h; path = Headers/GGLCore/Public/GGLErrorCode.h; sourceTree = ""; }; + BD4F12310AB5A36E9D71BCDFAFACEB4B /* SVProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SVProgressHUD-dummy.m"; sourceTree = ""; }; + BD894F116AE90258A166D273495BE0C0 /* Pods-Abstract-Authorization-module.appstore debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-module.appstore debug.xcconfig"; sourceTree = ""; }; + BDAF9C103E5055A6565ECB653CCB4A7F /* FSE+UIImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+UIImage.swift"; path = "Swift/Helpers/FSExtensions/FSE+UIImage.swift"; sourceTree = ""; }; + BEA8F6FFB6B4706DACEFFB959E85A2E2 /* Pods-Abstract-Authorization-module.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-module.release.xcconfig"; sourceTree = ""; }; + BEB943BA7CB4D70419CE9BDA4E3C3143 /* Pods-Abstract-Authorization-module.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-module.debug staging.xcconfig"; sourceTree = ""; }; + BEE9062494973F8E7754F725C5AABA24 /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; + C002F185677B835087A08357C6CA811A /* Pods-Abstract-Authorization-moduleUITests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Abstract-Authorization-moduleUITests-umbrella.h"; sourceTree = ""; }; + C010D691B712EF834AE2D800AD2B0C2F /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = iOS/Crashlytics.framework; sourceTree = ""; }; + C12FECEFA4B3B50F0A160007031C6126 /* Pods-Abstract-Authorization-moduleUITests.release staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleUITests.release staging.xcconfig"; sourceTree = ""; }; + C14A80B1DDF59E185932EB2D5CE2EB4D /* Pods-Abstract-Authorization-moduleUITests.test staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleUITests.test staging.xcconfig"; sourceTree = ""; }; + C17D935C3D970BC04BB23E0A3B223E69 /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C3504E61623A91ED09BFBDFD6F73AC46 /* CloudMessaging-Module.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CloudMessaging-Module.h"; path = "Headers/ModuleHeaders/CloudMessaging-Module.h"; sourceTree = ""; }; + C538171DF1F099DE1F8D10CCF64D642A /* Pods-Abstract-Authorization-moduleUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleUITests.debug.xcconfig"; sourceTree = ""; }; + C5A68FF2C7A17FD6709817E0645C81D1 /* NSManagedObjectContext+MagicalChainSave.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObjectContext+MagicalChainSave.h"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalChainSave.h"; sourceTree = ""; }; + C5DFF579BB0FD6E3FA35BC8C22DFC5FA /* SVIndefiniteAnimatedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVIndefiniteAnimatedView.h; path = SVProgressHUD/SVIndefiniteAnimatedView.h; sourceTree = ""; }; + C5F53B11BE6055955B4AC749D207D6B7 /* FSE+UITextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+UITextView.swift"; path = "Swift/Helpers/FSExtensions/FSE+UITextView.swift"; sourceTree = ""; }; + C6619B47BE597C81BB416127517E07C8 /* AFImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFImageDownloader.h; path = "UIKit+AFNetworking/AFImageDownloader.h"; sourceTree = ""; }; + C72C8C36126F2D1F18710E1F75D10234 /* NSObject+MagicalDataImport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MagicalDataImport.h"; path = "MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.h"; sourceTree = ""; }; + C758B23965E37459F156351FEF58EB78 /* Pods-Abstract-Authorization-moduleUITests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Abstract-Authorization-moduleUITests.modulemap"; sourceTree = ""; }; + C9295856AC71969AE4D989BA5D4E4FFD /* Pods-Abstract-Authorization-moduleUITests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Abstract-Authorization-moduleUITests-resources.sh"; sourceTree = ""; }; + C96077BC792561116BABA23A8EDA9A4A /* SVProgressHUD.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SVProgressHUD.bundle; path = SVProgressHUD/SVProgressHUD.bundle; sourceTree = ""; }; + C9F62A5E5E23841E8AC8792641D37994 /* NSManagedObject+MagicalRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObject+MagicalRecord.m"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.m"; sourceTree = ""; }; + CB189499CCCC95D47625934F8B345BB4 /* GIDAuthentication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDAuthentication.h; path = Headers/Public/GIDAuthentication.h; sourceTree = ""; }; + CBF7B8B8C9BBB8F74EB38D310E4BAFBD /* MagicalRecord+Setup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MagicalRecord+Setup.m"; path = "MagicalRecord/Core/MagicalRecord+Setup.m"; sourceTree = ""; }; + CC491F00DAA4C791629BE8AA68BCF098 /* FSE+NSDate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+NSDate.swift"; path = "Swift/Helpers/FSExtensions/FSE+NSDate.swift"; sourceTree = ""; }; + CCFB66946166FE94F3F4F5849A4CB157 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; + CD958644AF5D863120ED64BF2C588CB8 /* Pods-Abstract-Authorization-module.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Abstract-Authorization-module.modulemap"; sourceTree = ""; }; + CEA737D5E9A6819C6809F7E30BC8ED4F /* MagicalRecord+ErrorHandling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MagicalRecord+ErrorHandling.h"; path = "MagicalRecord/Core/MagicalRecord+ErrorHandling.h"; sourceTree = ""; }; + CF6A74CA48D432E6C1BED830EF4F0FC7 /* NSManagedObjectContext+MagicalSaves.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObjectContext+MagicalSaves.h"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.h"; sourceTree = ""; }; + CFE9C4DCC16B74ED4AE9823D89E2DD35 /* NSPersistentStoreCoordinator+MagicalRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSPersistentStoreCoordinator+MagicalRecord.h"; path = "MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.h"; sourceTree = ""; }; + D025E803A3D753B48A970981592DBB51 /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = AFNetworking.modulemap; sourceTree = ""; }; + D117F94AF14FDCA2BA52F33048737206 /* NSObject+MagicalDataImport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MagicalDataImport.m"; path = "MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.m"; sourceTree = ""; }; + D1379613261D263173BE58F8B0F4ADAF /* NSPersistentStore+MagicalRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSPersistentStore+MagicalRecord.m"; path = "MagicalRecord/Categories/NSPersistentStore+MagicalRecord.m"; sourceTree = ""; }; + D190C2E566839E35AE5836976DD16DCF /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; + D26749DA24CE1739C3F59453B44C8D4A /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; + D4E31353F750F2D6EC790AF712C362FC /* AdMob-Module.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "AdMob-Module.h"; path = "Headers/ModuleHeaders/AdMob-Module.h"; sourceTree = ""; }; + D5974283E1DEC016F76DB0B8F4788DD6 /* NSEntityDescription+MagicalDataImport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSEntityDescription+MagicalDataImport.h"; path = "MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.h"; sourceTree = ""; }; + D5B4EDEE8B4E8CD9DE55B51B9CD5FD8D /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; + D86871AF2439679D191FB40DA285FED0 /* Pods-Abstract-Authorization-moduleTests.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleTests.debug staging.xcconfig"; sourceTree = ""; }; + D89391D74719FA1EB60A1054210FDD39 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D97D5EFB60341B134DC0D23862292B1E /* NSManagedObject+MagicalRequests.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObject+MagicalRequests.h"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.h"; sourceTree = ""; }; + D997B21BE992740C2F6EA8E629D3AE53 /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; + D9D242639C495D24E7457DB1EDB70F0F /* NSManagedObject+MagicalRequests.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObject+MagicalRequests.m"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.m"; sourceTree = ""; }; + DB64E306DDF54D2B0ACA3A7362948D8E /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; + DB810633B714CDF6D3F2709C91D374D0 /* NSManagedObjectContext+MagicalThreading.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObjectContext+MagicalThreading.m"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.m"; sourceTree = ""; }; + DBEDD3EACE186D6EE2E04F1A20BADC09 /* FSE+UIAlertView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+UIAlertView.swift"; path = "Swift/Helpers/FSExtensions/FSE+UIAlertView.swift"; sourceTree = ""; }; + DCB57A2175B80E53A0B10064B907ED85 /* GoogleSignIn.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = GoogleSignIn.bundle; path = Resources/GoogleSignIn.bundle; sourceTree = ""; }; + DF3E8B489832F4B1BF8C1249F9578EBB /* MagicalRecord+ErrorHandling.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MagicalRecord+ErrorHandling.m"; path = "MagicalRecord/Core/MagicalRecord+ErrorHandling.m"; sourceTree = ""; }; + E10269F842F4A2EE0C362A1799A550BE /* MagicalRecord.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = MagicalRecord.modulemap; sourceTree = ""; }; + E1AACC42030BBA39E4174CCF48245E2E /* Pods-Abstract-Authorization-moduleTests.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleTests.test.xcconfig"; sourceTree = ""; }; + E30B1C51F26B033D1FD87A4B6E7ACF72 /* GGLContext+SignIn.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GGLContext+SignIn.h"; path = "Headers/GGLSignIn/Public/GGLContext+SignIn.h"; sourceTree = ""; }; + E76B6957FA98D4C54437E2C6AEB8F9F8 /* Pods-Abstract-Authorization-moduleUITests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Abstract-Authorization-moduleUITests-acknowledgements.markdown"; sourceTree = ""; }; + EA4799746EF232D83AF8578676731148 /* FSHelpers+Swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FSHelpers+Swift-dummy.m"; sourceTree = ""; }; + EB0AC3BEF83693588909E04BF7BECBED /* NSManagedObjectContext+MagicalRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObjectContext+MagicalRecord.h"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.h"; sourceTree = ""; }; + EB81DE5716D974030BB95E6297946169 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; + EC126A1597E0F407A4253F857D11855E /* MagicalRecord+Options.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MagicalRecord+Options.h"; path = "MagicalRecord/Core/MagicalRecord+Options.h"; sourceTree = ""; }; + ECD3A739188DCB486FB90D30E99BF134 /* IOSLinkedInAPI.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = IOSLinkedInAPI.modulemap; sourceTree = ""; }; + EDB8E9A8B05E16AC81B1155821D5B4B9 /* IOSLinkedInAPI-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IOSLinkedInAPI-prefix.pch"; sourceTree = ""; }; + EDC22AB484AF932B4B0BF8C4D3FEAE2E /* libGGLCore.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libGGLCore.a; path = Libraries/libGGLCore.a; sourceTree = ""; }; + EE3523A242BA7B670992FAA573C95052 /* Core.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Core.h; path = Headers/GGLCore/Public/Core.h; sourceTree = ""; }; + F0602F0718AED3FF8B21437836355D1F /* Pods-Abstract-Authorization-moduleTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Abstract-Authorization-moduleTests-acknowledgements.plist"; sourceTree = ""; }; + F108959820291A6008F6C7352CD59E40 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; + F2B83036DE956277C430B02F8B5D32E9 /* FSE+UIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+UIView.swift"; path = "Swift/Helpers/FSExtensions/FSE+UIView.swift"; sourceTree = ""; }; + F425F71945376282A40B0935FE56A575 /* Pods-Abstract-Authorization-moduleUITests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Abstract-Authorization-moduleUITests-acknowledgements.plist"; sourceTree = ""; }; + F4BA3FA2E3B19AFA93FACD03E36F247C /* GGLConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GGLConfiguration.h; path = Headers/GGLCore/Public/GGLConfiguration.h; sourceTree = ""; }; + F649A6900B2D9F63EBCBB93808348B8F /* NSManagedObjectModel+MagicalRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObjectModel+MagicalRecord.m"; path = "MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.m"; sourceTree = ""; }; + F7A2214D0AE42BEEA2C0A536A5F8D8A9 /* Pods-Abstract-Authorization-moduleTests.appstore debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleTests.appstore debug.xcconfig"; sourceTree = ""; }; + F94B18D8AF75EC8D74420EE3284591DC /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; + FAD0319B89ACD99E57894D0A68F5045A /* FSE+Enumerations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FSE+Enumerations.swift"; path = "Swift/Helpers/FSExtensions/FSE+Enumerations.swift"; sourceTree = ""; }; + FC4BBDE97A0FB2761153427244209BB8 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; }; + FCEEB5FE45042BF7B80B69DD8F6C9168 /* GIDProfileData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDProfileData.h; path = Headers/Public/GIDProfileData.h; sourceTree = ""; }; + FCFEADEE7B63E12CC9B5BA691D46D73D /* Pods-Abstract-Authorization-moduleUITests.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Abstract-Authorization-moduleUITests.debug staging.xcconfig"; sourceTree = ""; }; + FD0B1706DE22D10D7A186A7448B46D32 /* Pods-Abstract-Authorization-module-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Abstract-Authorization-module-acknowledgements.plist"; sourceTree = ""; }; + FF24DEA3BEB7AFBB863660C847DEF36E /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0EB329B8E12A89DCC06053ADC52451E1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8DBC6776623D7F14151F2EBF0FA514AA /* CoreGraphics.framework in Frameworks */, + B34EE327725D3D8A0C0620EB0FAEDBFD /* Foundation.framework in Frameworks */, + 655FA93CBD17F3CF67806F7C48EE7473 /* MobileCoreServices.framework in Frameworks */, + 9B6F3E97E7435489C43BE1CC0F361CB5 /* Security.framework in Frameworks */, + 365281511F621FEBD2F16C5FBA3EA929 /* SystemConfiguration.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 112BDE3F79ACCBC59869EBA062F513F9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DCD812B08A7235B3A271E5A48B8D76FA /* CoreData.framework in Frameworks */, + BFF1E51E20B43595BC26047BFE775139 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 161EE1E6AFF02A718DCACD18847B7C07 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A02EC2919F0631338E41DC2B6F05B6E7 /* AFNetworking.framework in Frameworks */, + CFB0C951287F315BAB9676F02C4E1E44 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2AC5CD43A3B959508C69C017D30CD31D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CFEF959D18201FF39D2D5317E42AD329 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6696A75CD3B1696FB3EF9A274C149737 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CD3A10C0DDE1E46EBFD4D6D95433584B /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 68B7478C53EEE1D14C595CE74FDCE6B5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D3A65693AAE22873697EE935FA5715E9 /* Foundation.framework in Frameworks */, + E2F586A7B767B20A354F5D4B5F267C93 /* QuartzCore.framework in Frameworks */, + 67567B19EB838CBAA075F047928FFFF6 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BAF31E37C9E5A098494BC7FD84773A37 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6A9E4F3A65DA9A9C0DBE2F6EB5F7DFEA /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F59B4225F98CAF41FAB52FAC1AADAE03 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 847D9E53AEE22576A05B30DF6EBC0A0A /* Foundation.framework in Frameworks */, + C415F7D737863E80325536A51FD7406D /* QuartzCore.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0490604202E32853E6D039C300F14E31 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 641E912D34C2E34A7FBA62B3E2E616C8 /* AFNetworking.framework */, + 78DA5B6AC7424FDA6439975BBA6996AB /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + 06394D51C4BA7B67BC33F417873C93FD /* Pods-Abstract-Authorization-moduleUITests */ = { + isa = PBXGroup; + children = ( + 916798D524C722E53DF6AC89F1C4F681 /* Info.plist */, + C758B23965E37459F156351FEF58EB78 /* Pods-Abstract-Authorization-moduleUITests.modulemap */, + E76B6957FA98D4C54437E2C6AEB8F9F8 /* Pods-Abstract-Authorization-moduleUITests-acknowledgements.markdown */, + F425F71945376282A40B0935FE56A575 /* Pods-Abstract-Authorization-moduleUITests-acknowledgements.plist */, + 7B4172D2845F0E1FDC8D4CADB741E264 /* Pods-Abstract-Authorization-moduleUITests-dummy.m */, + B6C384A3A59332A9E6EB7EA0F7311986 /* Pods-Abstract-Authorization-moduleUITests-frameworks.sh */, + C9295856AC71969AE4D989BA5D4E4FFD /* Pods-Abstract-Authorization-moduleUITests-resources.sh */, + C002F185677B835087A08357C6CA811A /* Pods-Abstract-Authorization-moduleUITests-umbrella.h */, + 1780ECDAD9C3685A1B015B7364C2D90F /* Pods-Abstract-Authorization-moduleUITests.appstore.xcconfig */, + 811BE53BC6F16D359DB71B97877D588C /* Pods-Abstract-Authorization-moduleUITests.appstore debug.xcconfig */, + C538171DF1F099DE1F8D10CCF64D642A /* Pods-Abstract-Authorization-moduleUITests.debug.xcconfig */, + FCFEADEE7B63E12CC9B5BA691D46D73D /* Pods-Abstract-Authorization-moduleUITests.debug staging.xcconfig */, + 948C70A2F9570EFE6162101B289F461A /* Pods-Abstract-Authorization-moduleUITests.release.xcconfig */, + C12FECEFA4B3B50F0A160007031C6126 /* Pods-Abstract-Authorization-moduleUITests.release staging.xcconfig */, + 21A04D41D52ACFB9FC0F17EAE104A2C1 /* Pods-Abstract-Authorization-moduleUITests.test.xcconfig */, + C14A80B1DDF59E185932EB2D5CE2EB4D /* Pods-Abstract-Authorization-moduleUITests.test staging.xcconfig */, + ); + name = "Pods-Abstract-Authorization-moduleUITests"; + path = "Target Support Files/Pods-Abstract-Authorization-moduleUITests"; + sourceTree = ""; + }; + 0ABDDEC4B1D89A51C68DD8DDCCD47B6B /* Frameworks */ = { + isa = PBXGroup; + children = ( + 704B57C8D6765867EE21709B12E22ECA /* libGGLSignIn.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 114F881233B60A3D1E4199E995E82DC7 /* Support Files */ = { + isa = PBXGroup; + children = ( + 51229A4E8607C2CEEB6AAFF62A6C0908 /* Info.plist */, + ECD3A739188DCB486FB90D30E99BF134 /* IOSLinkedInAPI.modulemap */, + AC699D0ED6C43F4C0D8CF4F3CFF541A7 /* IOSLinkedInAPI.xcconfig */, + 6789CD31100984A9C475A64D17B999C7 /* IOSLinkedInAPI-dummy.m */, + EDB8E9A8B05E16AC81B1155821D5B4B9 /* IOSLinkedInAPI-prefix.pch */, + 8E797AA1C4792408A64921F012952336 /* IOSLinkedInAPI-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/IOSLinkedInAPI"; + sourceTree = ""; + }; + 130CC9AA7E62AF30EDB0BDDE660710C0 /* Security */ = { + isa = PBXGroup; + children = ( + 06A39CCAAEB7331EBB368F927FD9CC55 /* AFSecurityPolicy.h */, + F108959820291A6008F6C7352CD59E40 /* AFSecurityPolicy.m */, + ); + name = Security; + sourceTree = ""; + }; + 148F7573A48D0C30DDEE880F4437E674 /* AFNetworking */ = { + isa = PBXGroup; + children = ( + D190C2E566839E35AE5836976DD16DCF /* AFNetworking.h */, + 9DD1E1AD1C689D8478CF7D98BA4E53AF /* NSURLSession */, + A0D5B232B51BC2C07E1966340F7E8DD4 /* Reachability */, + 130CC9AA7E62AF30EDB0BDDE660710C0 /* Security */, + BE9273347064E10575F952DF418C2CC9 /* Serialization */, + D83FBE823223DB63C7ECC04D9BD549DE /* Support Files */, + 4104709A1141919FBB897B82F71E87ED /* UIKit */, + ); + path = AFNetworking; + sourceTree = ""; + }; + 15D253F205F379BC1CA5568D7B8255CE /* Support Files */ = { + isa = PBXGroup; + children = ( + 14510F1960A179EEBA5E30AFDACAB41B /* Info.plist */, + 8AA8B068CB83D13D7FE15F04CDD8F70A /* SVProgressHUD.modulemap */, + 292D9ABFC4DD12BB774CF8B374C37BB2 /* SVProgressHUD.xcconfig */, + BD4F12310AB5A36E9D71BCDFAFACEB4B /* SVProgressHUD-dummy.m */, + 26E0F119705DB029B6DCCA900663AFB6 /* SVProgressHUD-prefix.pch */, + 2E797DE605FD59DFA6AAE73DC04467A9 /* SVProgressHUD-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SVProgressHUD"; + sourceTree = ""; + }; + 198A2B79D2BC232F5EB1BAF48FAEA08E /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4B6C28C6F73195528ED6571812E7E146 /* libGIPNSURL+FIFE_external.a */, + AD159C0AC13C935EA358E3B284FFF587 /* libSignIn_external.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 19F438F363CBB4FF8A72F05C0B80CD5C /* Fabric */ = { + isa = PBXGroup; + children = ( + B55BCC3167ED6AFAFE675C19644723DA /* Frameworks */, + ); + path = Fabric; + sourceTree = ""; + }; + 1A59F3EB5344BD8E249C2B3EC1E09444 /* GoogleInterchangeUtilities */ = { + isa = PBXGroup; + children = ( + 68EDD5319E82FBBBC097CA3EB97A2AC7 /* Frameworks */, + ); + path = GoogleInterchangeUtilities; + sourceTree = ""; + }; + 1D26B89ED03776B35BB8AC179C2F5055 /* Pods-Abstract-Authorization-module */ = { + isa = PBXGroup; + children = ( + 1632C92BE044A69A8BB9294A6989EEE5 /* Info.plist */, + CD958644AF5D863120ED64BF2C588CB8 /* Pods-Abstract-Authorization-module.modulemap */, + 949B765502F9EFCC6CCCEF46752A4696 /* Pods-Abstract-Authorization-module-acknowledgements.markdown */, + FD0B1706DE22D10D7A186A7448B46D32 /* Pods-Abstract-Authorization-module-acknowledgements.plist */, + 3A226B46708C4576A310B5C9B21AD6AC /* Pods-Abstract-Authorization-module-dummy.m */, + 336C6515D2C59DF0ECAB24D2A2EB7297 /* Pods-Abstract-Authorization-module-frameworks.sh */, + 8663B1FB252AABFF771B639E9EAB481E /* Pods-Abstract-Authorization-module-resources.sh */, + 26FC111C77862223A1BFAC49D1D1BA74 /* Pods-Abstract-Authorization-module-umbrella.h */, + 461012D670D1FD4BB2567D4F73D27C43 /* Pods-Abstract-Authorization-module.appstore.xcconfig */, + BD894F116AE90258A166D273495BE0C0 /* Pods-Abstract-Authorization-module.appstore debug.xcconfig */, + 133837E9A2820D9FF2193315947E24A6 /* Pods-Abstract-Authorization-module.debug.xcconfig */, + BEB943BA7CB4D70419CE9BDA4E3C3143 /* Pods-Abstract-Authorization-module.debug staging.xcconfig */, + BEA8F6FFB6B4706DACEFFB959E85A2E2 /* Pods-Abstract-Authorization-module.release.xcconfig */, + B425B3B0E7AE099323B2CD289E9066A9 /* Pods-Abstract-Authorization-module.release staging.xcconfig */, + BA766EEC9DAEC183C9EF484424A0FAE6 /* Pods-Abstract-Authorization-module.test.xcconfig */, + 4217D728C94CDE166E7B0ADB5AABD63E /* Pods-Abstract-Authorization-module.test staging.xcconfig */, + ); + name = "Pods-Abstract-Authorization-module"; + path = "Target Support Files/Pods-Abstract-Authorization-module"; + sourceTree = ""; + }; + 22104A11AAE866F1CD1866A43FCC5E7B /* Frameworks */ = { + isa = PBXGroup; + children = ( + A4C6B22819794B90F4DDC1ABB1BBA740 /* GoogleSymbolUtilities.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 283D29FE50568D9D02F45BA02A661BDD /* MagicalRecord */ = { + isa = PBXGroup; + children = ( + A9493994593180891EC289DD2F94FD37 /* Core */, + 3D99117E7A7944388E12EFCB7DF74700 /* Support Files */, + ); + path = MagicalRecord; + sourceTree = ""; + }; + 33CD05651DC62598D823C74C2372D071 /* Core */ = { + isa = PBXGroup; + children = ( + D4E31353F750F2D6EC790AF712C362FC /* AdMob-Module.h */, + 81EE21845FCC2A4092C0F62D6A664EB4 /* Analytics-Module.h */, + AA5E166E9E5472B42B4DD92FEE086184 /* AppInvite-Module.h */, + C3504E61623A91ED09BFBDFD6F73AC46 /* CloudMessaging-Module.h */, + EE3523A242BA7B670992FAA573C95052 /* Core.h */, + 5F975077F9F0258494AD090D3E02BC6E /* Core-Module.h */, + F4BA3FA2E3B19AFA93FACD03E36F247C /* GGLConfiguration.h */, + 311BE8D6E097138F066FCE0802AD0DDD /* GGLContext.h */, + BD05EDD49D2B46E8956B9A0DB7F3D929 /* GGLErrorCode.h */, + 283DD94F66731093E3700B4AC98A4F82 /* GMRConfiguration.h */, + 7C7DBB220A5C5F4C2F46DD8800984C55 /* SignIn-Module.h */, + 4F373BA905623242B27FB672121C61A6 /* Frameworks */, + ); + name = Core; + sourceTree = ""; + }; + 39ABC73A1F079697A89015B5F6D4F584 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B4DD23FC739D81CCC8FDF8B6D060C4EC /* GoogleAppUtilities.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 3D99117E7A7944388E12EFCB7DF74700 /* Support Files */ = { + isa = PBXGroup; + children = ( + 3236238E2EDA99B5574B7F4F4EACF4B4 /* Info.plist */, + E10269F842F4A2EE0C362A1799A550BE /* MagicalRecord.modulemap */, + 15FEC7E4E15BCFC7DEFBCC1DD2F61C8C /* MagicalRecord.xcconfig */, + 39523725E6E2B5467F86CE0D238666C3 /* MagicalRecord-dummy.m */, + 6C34817385A1DA8DD6DD889E7D0A514D /* MagicalRecord-prefix.pch */, + 1F083134AE7408C0A0FE688AFFBA57EC /* MagicalRecord-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/MagicalRecord"; + sourceTree = ""; + }; + 4104709A1141919FBB897B82F71E87ED /* UIKit */ = { + isa = PBXGroup; + children = ( + 7A1966DEF6507BFC6F2A1931E5DA3F13 /* AFAutoPurgingImageCache.h */, + 36333CBC5824983D395125CAF7EF679F /* AFAutoPurgingImageCache.m */, + C6619B47BE597C81BB416127517E07C8 /* AFImageDownloader.h */, + A2194773513DAEFE257DD6B2ADEBBEE4 /* AFImageDownloader.m */, + AEC2BAF12EA0AFFCD64DC7E03F604740 /* AFNetworkActivityIndicatorManager.h */, + 2F44A081E819E3C0F8E4CA18F2B6F8E6 /* AFNetworkActivityIndicatorManager.m */, + 2BC29C522958FF7B8999013CF400947C /* UIActivityIndicatorView+AFNetworking.h */, + 1CEA2C409E21A03D0B72CB3E61414508 /* UIActivityIndicatorView+AFNetworking.m */, + FF24DEA3BEB7AFBB863660C847DEF36E /* UIButton+AFNetworking.h */, + D997B21BE992740C2F6EA8E629D3AE53 /* UIButton+AFNetworking.m */, + D26749DA24CE1739C3F59453B44C8D4A /* UIImage+AFNetworking.h */, + 00F236810BCE44A1818E1679E1437155 /* UIImageView+AFNetworking.h */, + 8E609302F21E595EC9675B1A32F0AEBB /* UIImageView+AFNetworking.m */, + 416AA2C2CB2D3DEF579DEAAA4B891321 /* UIKit+AFNetworking.h */, + 9B42B75CF5A21ACF39FFE47796AEB0BE /* UIProgressView+AFNetworking.h */, + A3B537E664A75141DADF4ED0E8355F82 /* UIProgressView+AFNetworking.m */, + 5A7A4CF5050782ECD68127BD8FB35122 /* UIRefreshControl+AFNetworking.h */, + DB64E306DDF54D2B0ACA3A7362948D8E /* UIRefreshControl+AFNetworking.m */, + F94B18D8AF75EC8D74420EE3284591DC /* UIWebView+AFNetworking.h */, + BEE9062494973F8E7754F725C5AABA24 /* UIWebView+AFNetworking.m */, + ); + name = UIKit; + sourceTree = ""; + }; + 45AEF41692C209DF7050EB074F83A8BE /* Frameworks */ = { + isa = PBXGroup; + children = ( + 8ECB6EC43C1B869BC9333558B8E670E6 /* GoogleAuthUtilities.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 4F373BA905623242B27FB672121C61A6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EDC22AB484AF932B4B0BF8C4D3FEAE2E /* libGGLCore.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 58BC4BB151A253615B49CC11086A42AF /* Frameworks */ = { + isa = PBXGroup; + children = ( + 032FDBA33CBC1014C82442B1E42D032B /* GoogleUtilities.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 59A1E2EA9B587EDE928E4D63C7D28A32 /* GoogleAuthUtilities */ = { + isa = PBXGroup; + children = ( + 45AEF41692C209DF7050EB074F83A8BE /* Frameworks */, + ); + path = GoogleAuthUtilities; + sourceTree = ""; + }; + 5AC1CED4ECE14F16C9D2D4ABBF2A526A /* Pods */ = { + isa = PBXGroup; + children = ( + 148F7573A48D0C30DDEE880F4437E674 /* AFNetworking */, + 879A12A6B8C3DBA8846ADC86C1B27A90 /* Crashlytics */, + 19F438F363CBB4FF8A72F05C0B80CD5C /* Fabric */, + 7BD8953D50106BBFF0EF665809DEC583 /* FSHelpers+Swift */, + 6029C17AB5D447789D2CD9C50E058ED1 /* Google */, + 7E8653F857C3F06C1BA7E14EA2AA7583 /* GoogleAppUtilities */, + 59A1E2EA9B587EDE928E4D63C7D28A32 /* GoogleAuthUtilities */, + 1A59F3EB5344BD8E249C2B3EC1E09444 /* GoogleInterchangeUtilities */, + A8308F391F865E0ED0E3DB8A362C1EBB /* GoogleNetworkingUtilities */, + E099D04AB68382F4DE869F956E36558C /* GoogleSignIn */, + 5B50C05F62CFA54CB21449F0088605A5 /* GoogleSymbolUtilities */, + 81F346A57D5BCE7D9EBB7EC8F465BB36 /* GoogleUtilities */, + DCD5871F94996FE9965C67948A3D87F1 /* IOSLinkedInAPI */, + 283D29FE50568D9D02F45BA02A661BDD /* MagicalRecord */, + AE4F6408E0DBDBD6495BEF64ACF8B066 /* SVProgressHUD */, + ); + name = Pods; + sourceTree = ""; + }; + 5B50C05F62CFA54CB21449F0088605A5 /* GoogleSymbolUtilities */ = { + isa = PBXGroup; + children = ( + 22104A11AAE866F1CD1866A43FCC5E7B /* Frameworks */, + ); + path = GoogleSymbolUtilities; + sourceTree = ""; + }; + 6029C17AB5D447789D2CD9C50E058ED1 /* Google */ = { + isa = PBXGroup; + children = ( + 33CD05651DC62598D823C74C2372D071 /* Core */, + F3100B2B7BF17A34338537C1A0E9E81F /* SignIn */, + ); + path = Google; + sourceTree = ""; + }; + 6166D4FF9CC321AAABED663C4E1C8D87 /* Support Files */ = { + isa = PBXGroup; + children = ( + 7314B6F9ABB069823B957361B0AE09B0 /* FSHelpers+Swift.modulemap */, + 3133FF43BE7B95ED8A49428A2FA7C973 /* FSHelpers+Swift.xcconfig */, + EA4799746EF232D83AF8578676731148 /* FSHelpers+Swift-dummy.m */, + 07936B200F73DD63648A2CB89445E748 /* FSHelpers+Swift-prefix.pch */, + 4330CBEE4B94588D44AF25E2C60617EF /* FSHelpers+Swift-umbrella.h */, + AC5BD194830BBCFDD2A306F0B8179AC7 /* Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/FSHelpers+Swift"; + sourceTree = ""; + }; + 68EDD5319E82FBBBC097CA3EB97A2AC7 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5148777883878BE53C001A2F0DF59474 /* GoogleInterchangeUtilities.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 6D541872191DD28354DA3DBEF1BA7F5D /* Products */ = { + isa = PBXGroup; + children = ( + C17D935C3D970BC04BB23E0A3B223E69 /* AFNetworking.framework */, + 64F5C16C4C1307E30350E00F8CEB8DEB /* FSHelpers_Swift.framework */, + 9E18D59F06564A3B4FFE3C0C197CD918 /* IOSLinkedInAPI.framework */, + 453387A932BD97D9099B65F557C46F31 /* MagicalRecord.framework */, + 886EBEEB6B2651214D7CFF2C86594076 /* Pods_Abstract_Swift_Base.framework */, + 546F95D1B6A61CD50ADE42559ECC378B /* Pods_Abstract_Swift_BaseTests.framework */, + 6F3B478C56C027121467C8C2E8672F73 /* Pods_Abstract_Swift_BaseUITests.framework */, + 167440FE03F30E0E4A8435FE5F2F9062 /* SVProgressHUD.framework */, + ); + name = Products; + sourceTree = ""; + }; + 78DA5B6AC7424FDA6439975BBA6996AB /* iOS */ = { + isa = PBXGroup; + children = ( + FC4BBDE97A0FB2761153427244209BB8 /* CoreData.framework */, + 58FB27E7E56C8721CC8117B5307C7034 /* CoreGraphics.framework */, + 2860B53B592FCA17F58D7D117CBCF421 /* Foundation.framework */, + 882C838D91D554BAE5D70B5F56FB6359 /* MobileCoreServices.framework */, + 0470F352542C4ED5D186988138E5FDEB /* QuartzCore.framework */, + 9E8A9C054B4FACBFCB4F09D39B237F69 /* Security.framework */, + 98306320766086E9F504F025CC74D905 /* SystemConfiguration.framework */, + 4724567F3225B5BA655CC9A158570CC8 /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 7A384B687E0C5F97B21A6A4F2A10CB6B /* Frameworks */ = { + isa = PBXGroup; + children = ( + 89522148299D0E30CA9EBED74CDD8770 /* GoogleNetworkingUtilities.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 7BD8953D50106BBFF0EF665809DEC583 /* FSHelpers+Swift */ = { + isa = PBXGroup; + children = ( + 04E4D9CA75E7AF3396F5B41F681AB4A0 /* FSE+Array.swift */, + 31AF398B0F42AA2265846B4510B6F197 /* FSE+Dictionary.swift */, + A05232D71F90B55FAC3A5E1FF3DDEE49 /* FSE+Double.swift */, + FAD0319B89ACD99E57894D0A68F5045A /* FSE+Enumerations.swift */, + CC491F00DAA4C791629BE8AA68BCF098 /* FSE+NSDate.swift */, + 1276B2C908C7AC1E3C0FB9058DAF2E14 /* FSE+NSObject.swift */, + A89D548CDD543B80817EBB41E180405D /* FSE+Range.swift */, + 545E37BB89192EFB2DBEE0366C4F01E4 /* FSE+String.swift */, + DBEDD3EACE186D6EE2E04F1A20BADC09 /* FSE+UIAlertView.swift */, + A93CD20DB06B1B6B912B78FED9A0AF4E /* FSE+UIColor.swift */, + BDAF9C103E5055A6565ECB653CCB4A7F /* FSE+UIImage.swift */, + 6657B7CE01896FB6BBC10CC7124E03A6 /* FSE+UITableView.swift */, + 65C96A4535D4DD6CE0CF58DBF3DF28BB /* FSE+UITextField.swift */, + C5F53B11BE6055955B4AC749D207D6B7 /* FSE+UITextView.swift */, + F2B83036DE956277C430B02F8B5D32E9 /* FSE+UIView.swift */, + 5419EA0F5FC5E39B8B97A0D2187E80E1 /* FSHelpers.swift */, + 0F23C53FB9372090F92B1C6A12144DBE /* FSHelpersAutolayout.swift */, + 56627ACF44B3D72CECE96DECF1C3AD3B /* FSKeyboardScrollSupport.swift */, + 6166D4FF9CC321AAABED663C4E1C8D87 /* Support Files */, + ); + path = "FSHelpers+Swift"; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, + 0490604202E32853E6D039C300F14E31 /* Frameworks */, + 5AC1CED4ECE14F16C9D2D4ABBF2A526A /* Pods */, + 6D541872191DD28354DA3DBEF1BA7F5D /* Products */, + C8E3CA20B233E2BFC2C210468262FE7D /* Targets Support Files */, + ); + sourceTree = ""; + }; + 7E8653F857C3F06C1BA7E14EA2AA7583 /* GoogleAppUtilities */ = { + isa = PBXGroup; + children = ( + 39ABC73A1F079697A89015B5F6D4F584 /* Frameworks */, + ); + path = GoogleAppUtilities; + sourceTree = ""; + }; + 81F346A57D5BCE7D9EBB7EC8F465BB36 /* GoogleUtilities */ = { + isa = PBXGroup; + children = ( + 58BC4BB151A253615B49CC11086A42AF /* Frameworks */, + ); + path = GoogleUtilities; + sourceTree = ""; + }; + 879A12A6B8C3DBA8846ADC86C1B27A90 /* Crashlytics */ = { + isa = PBXGroup; + children = ( + FD0308682A58CF72844529533FE45372 /* Frameworks */, + ); + path = Crashlytics; + sourceTree = ""; + }; + 9DD1E1AD1C689D8478CF7D98BA4E53AF /* NSURLSession */ = { + isa = PBXGroup; + children = ( + EB81DE5716D974030BB95E6297946169 /* AFHTTPSessionManager.h */, + 6323169564EEF3DE10928932C81C710B /* AFHTTPSessionManager.m */, + 05E998908AA6C9F99CC45C8CFFE5BECF /* AFURLSessionManager.h */, + 8EE16800026D6358737B5C11D1229CDF /* AFURLSessionManager.m */, + ); + name = NSURLSession; + sourceTree = ""; + }; + A0D5B232B51BC2C07E1966340F7E8DD4 /* Reachability */ = { + isa = PBXGroup; + children = ( + 1D0B4479AADED9D42BCEF901F416E408 /* AFNetworkReachabilityManager.h */, + 25BE3CDA96B6B1C9EAD33D362ADE0F87 /* AFNetworkReachabilityManager.m */, + ); + name = Reachability; + sourceTree = ""; + }; + A8308F391F865E0ED0E3DB8A362C1EBB /* GoogleNetworkingUtilities */ = { + isa = PBXGroup; + children = ( + 7A384B687E0C5F97B21A6A4F2A10CB6B /* Frameworks */, + ); + path = GoogleNetworkingUtilities; + sourceTree = ""; + }; + A9493994593180891EC289DD2F94FD37 /* Core */ = { + isa = PBXGroup; + children = ( + 1FF4D6A87B4BEE1942C66151B883CEE8 /* MagicalImportFunctions.h */, + 22C58AE3CC2E1EB57E1A2B4902DD142E /* MagicalImportFunctions.m */, + AF848F81446AFE1FDAC7E81D6DD1FBC7 /* MagicalRecord.h */, + 5BCE174490A2932D957284E0E77E1DAB /* MagicalRecord+Actions.h */, + 29365C9E65F590657C6B00D1A317B059 /* MagicalRecord+Actions.m */, + CEA737D5E9A6819C6809F7E30BC8ED4F /* MagicalRecord+ErrorHandling.h */, + DF3E8B489832F4B1BF8C1249F9578EBB /* MagicalRecord+ErrorHandling.m */, + 54E005061AB36263535BE0D9A741990D /* MagicalRecord+iCloud.h */, + BC4C0D5F1E24A380E0FDD35681D7FA5A /* MagicalRecord+iCloud.m */, + EC126A1597E0F407A4253F857D11855E /* MagicalRecord+Options.h */, + 61176A6ABEE1129AD225416AA2811F56 /* MagicalRecord+Options.m */, + 3FE5148EFED6E60AD2B6A3C4B05BD7FB /* MagicalRecord+Setup.h */, + CBF7B8B8C9BBB8F74EB38D310E4BAFBD /* MagicalRecord+Setup.m */, + 4FC2DA89E29CFCC4E2951672AD7A325C /* MagicalRecord+ShorthandMethods.h */, + 459ADB55B82FCF46E4B337FE3C709B94 /* MagicalRecord+ShorthandMethods.m */, + 5FA25C3C7CD2F05E591694D518212161 /* MagicalRecordDeprecationMacros.h */, + B2FBA2A36937BC166886C691517DF623 /* MagicalRecordInternal.h */, + 2DD96C0C33AB8AC647CC155AF66C7E2C /* MagicalRecordInternal.m */, + 32C177888237916EC746E6EBC7EA3EC8 /* MagicalRecordLogging.h */, + 661BB3B2834EC25BEF1937FC8CC8E9E4 /* MagicalRecordXcode7CompatibilityMacros.h */, + 0E74B138225CEC379972F24B18E56DAD /* NSAttributeDescription+MagicalDataImport.h */, + 8611F1876BDD6784D2BCF2E703F599D6 /* NSAttributeDescription+MagicalDataImport.m */, + D5974283E1DEC016F76DB0B8F4788DD6 /* NSEntityDescription+MagicalDataImport.h */, + 47B62961E2C9DC17BBFED290CC6C62A2 /* NSEntityDescription+MagicalDataImport.m */, + 94A53B7EB37D386367A956856811D857 /* NSManagedObject+MagicalAggregation.h */, + 82F39BCAE41E363EC08FFFAD4522B8BE /* NSManagedObject+MagicalAggregation.m */, + 61AD2C02ADA040561B01EBCD025BBF54 /* NSManagedObject+MagicalDataImport.h */, + 8D9225BF6FA19634A2F90E531A9582D3 /* NSManagedObject+MagicalDataImport.m */, + A4698DFD5385F0CD8E9F13F31B0AC762 /* NSManagedObject+MagicalFinders.h */, + B88398337AA119DB1C50908DE0682BE0 /* NSManagedObject+MagicalFinders.m */, + A29829E544A4793FF7A50D567F4C0182 /* NSManagedObject+MagicalRecord.h */, + C9F62A5E5E23841E8AC8792641D37994 /* NSManagedObject+MagicalRecord.m */, + D97D5EFB60341B134DC0D23862292B1E /* NSManagedObject+MagicalRequests.h */, + D9D242639C495D24E7457DB1EDB70F0F /* NSManagedObject+MagicalRequests.m */, + C5A68FF2C7A17FD6709817E0645C81D1 /* NSManagedObjectContext+MagicalChainSave.h */, + 90A4D7DFFC83899EF1F0A5258A432CAB /* NSManagedObjectContext+MagicalChainSave.m */, + 11BC93C2DFF0ABE09D5BF139F1C75A38 /* NSManagedObjectContext+MagicalObserving.h */, + 846C270DED6C9FC926164D82E589A6E2 /* NSManagedObjectContext+MagicalObserving.m */, + EB0AC3BEF83693588909E04BF7BECBED /* NSManagedObjectContext+MagicalRecord.h */, + 19E4305B9B53F71BBA810E8007E30EAF /* NSManagedObjectContext+MagicalRecord.m */, + CF6A74CA48D432E6C1BED830EF4F0FC7 /* NSManagedObjectContext+MagicalSaves.h */, + 565F2C2EF7322EE3A9195B3B2BD9604A /* NSManagedObjectContext+MagicalSaves.m */, + 9924BFDA4DE172B4A4C2B3C5874F0BB0 /* NSManagedObjectContext+MagicalThreading.h */, + DB810633B714CDF6D3F2709C91D374D0 /* NSManagedObjectContext+MagicalThreading.m */, + 2CD820CCD190C518BC526EDFEBD9F15E /* NSManagedObjectModel+MagicalRecord.h */, + F649A6900B2D9F63EBCBB93808348B8F /* NSManagedObjectModel+MagicalRecord.m */, + B5BEE87EC176C829377772D6E177A928 /* NSNumber+MagicalDataImport.h */, + 513D240ECBF6806AA56B9042BBD902D7 /* NSNumber+MagicalDataImport.m */, + C72C8C36126F2D1F18710E1F75D10234 /* NSObject+MagicalDataImport.h */, + D117F94AF14FDCA2BA52F33048737206 /* NSObject+MagicalDataImport.m */, + 71152CBE1013719A32A97976D56298EF /* NSPersistentStore+MagicalRecord.h */, + D1379613261D263173BE58F8B0F4ADAF /* NSPersistentStore+MagicalRecord.m */, + CFE9C4DCC16B74ED4AE9823D89E2DD35 /* NSPersistentStoreCoordinator+MagicalRecord.h */, + 67D17DD484BD73683B885756C62F37F3 /* NSPersistentStoreCoordinator+MagicalRecord.m */, + 5EB8518D076306BEA814BE880E94CA4C /* NSRelationshipDescription+MagicalDataImport.h */, + 8074FB5A14952AD2CC35092CF3E5FD68 /* NSRelationshipDescription+MagicalDataImport.m */, + 686E793C49987978BECBCFC6C3B71C86 /* NSString+MagicalDataImport.h */, + 99501F452E0C1695461758F92411CD45 /* NSString+MagicalDataImport.m */, + ); + name = Core; + sourceTree = ""; + }; + AE4F6408E0DBDBD6495BEF64ACF8B066 /* SVProgressHUD */ = { + isa = PBXGroup; + children = ( + C5DFF579BB0FD6E3FA35BC8C22DFC5FA /* SVIndefiniteAnimatedView.h */, + 275642B8320FF0A584614CDFEE8DFD8E /* SVIndefiniteAnimatedView.m */, + A1B01285D980657C639FE345BCD797AC /* SVProgressAnimatedView.h */, + 93FFD33C2A851F81F4516C01A8F76038 /* SVProgressAnimatedView.m */, + 77CC6AB37BE66B2D7B18241385E73670 /* SVProgressHUD.h */, + 95854DF68BB20306C1B7DE62514B333D /* SVProgressHUD.m */, + 705221588CC820DAE89C8472E137BF4F /* SVRadialGradientLayer.h */, + 449A3EABE9738CED7332D24B4F39F750 /* SVRadialGradientLayer.m */, + C3E26BBFB21D7B6CB1A71C24961686AE /* Resources */, + 15D253F205F379BC1CA5568D7B8255CE /* Support Files */, + ); + path = SVProgressHUD; + sourceTree = ""; + }; + B55BCC3167ED6AFAFE675C19644723DA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 154313B130480258286435AC6E96092C /* Fabric.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + BE9273347064E10575F952DF418C2CC9 /* Serialization */ = { + isa = PBXGroup; + children = ( + D5B4EDEE8B4E8CD9DE55B51B9CD5FD8D /* AFURLRequestSerialization.h */, + 2AFEBB22875366AA9B2D5E011B0D7340 /* AFURLRequestSerialization.m */, + B281F621A8B81D601E3439B580FCC127 /* AFURLResponseSerialization.h */, + CCFB66946166FE94F3F4F5849A4CB157 /* AFURLResponseSerialization.m */, + ); + name = Serialization; + sourceTree = ""; + }; + C3E26BBFB21D7B6CB1A71C24961686AE /* Resources */ = { + isa = PBXGroup; + children = ( + C96077BC792561116BABA23A8EDA9A4A /* SVProgressHUD.bundle */, + ); + name = Resources; + sourceTree = ""; + }; + C571BFB7B57E0B1554B92E404A399AA0 /* Pods-Abstract-Authorization-moduleTests */ = { + isa = PBXGroup; + children = ( + 75773C340C4343539A573B5505624A34 /* Info.plist */, + 7B8CAF47E94C6D72D599420DC737A162 /* Pods-Abstract-Authorization-moduleTests.modulemap */, + 19021180158DC8C7D65521F768723231 /* Pods-Abstract-Authorization-moduleTests-acknowledgements.markdown */, + F0602F0718AED3FF8B21437836355D1F /* Pods-Abstract-Authorization-moduleTests-acknowledgements.plist */, + 5CA72BC3AF8FE3B99E9925ED307784E8 /* Pods-Abstract-Authorization-moduleTests-dummy.m */, + 6265B6C90B31BE74D2BFEF9374304265 /* Pods-Abstract-Authorization-moduleTests-frameworks.sh */, + 175D51CCCD7F27671472C2E56657286B /* Pods-Abstract-Authorization-moduleTests-resources.sh */, + 2576DDB93E6B48B6A4A09AFA88DFFFA3 /* Pods-Abstract-Authorization-moduleTests-umbrella.h */, + 8768CB74047F80A9F6E31C717A34C92F /* Pods-Abstract-Authorization-moduleTests.appstore.xcconfig */, + F7A2214D0AE42BEEA2C0A536A5F8D8A9 /* Pods-Abstract-Authorization-moduleTests.appstore debug.xcconfig */, + 18904D86ED9554FAAD8378221C61CEE7 /* Pods-Abstract-Authorization-moduleTests.debug.xcconfig */, + D86871AF2439679D191FB40DA285FED0 /* Pods-Abstract-Authorization-moduleTests.debug staging.xcconfig */, + 23AAB8CEC70A9442A97AD2E619F3C170 /* Pods-Abstract-Authorization-moduleTests.release.xcconfig */, + 5D826BE60B03B9AF42EA2997CFB21C05 /* Pods-Abstract-Authorization-moduleTests.release staging.xcconfig */, + E1AACC42030BBA39E4174CCF48245E2E /* Pods-Abstract-Authorization-moduleTests.test.xcconfig */, + B46F923C2063110D98BC936D027B350D /* Pods-Abstract-Authorization-moduleTests.test staging.xcconfig */, + ); + name = "Pods-Abstract-Authorization-moduleTests"; + path = "Target Support Files/Pods-Abstract-Authorization-moduleTests"; + sourceTree = ""; + }; + C8E3CA20B233E2BFC2C210468262FE7D /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 1D26B89ED03776B35BB8AC179C2F5055 /* Pods-Abstract-Authorization-module */, + C571BFB7B57E0B1554B92E404A399AA0 /* Pods-Abstract-Authorization-moduleTests */, + 06394D51C4BA7B67BC33F417873C93FD /* Pods-Abstract-Authorization-moduleUITests */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + D83FBE823223DB63C7ECC04D9BD549DE /* Support Files */ = { + isa = PBXGroup; + children = ( + D025E803A3D753B48A970981592DBB51 /* AFNetworking.modulemap */, + 701585C54E5213D7ECF31C02DCAAF0BF /* AFNetworking.xcconfig */, + 8E33DD811E907CB17373273C4C6B3A7A /* AFNetworking-dummy.m */, + 011DF640F575DCFA4C9170B4BFB42FA3 /* AFNetworking-prefix.pch */, + 8927427AB8C61FE6F72E84CBB421BC2E /* AFNetworking-umbrella.h */, + D89391D74719FA1EB60A1054210FDD39 /* Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/AFNetworking"; + sourceTree = ""; + }; + DCD5871F94996FE9965C67948A3D87F1 /* IOSLinkedInAPI */ = { + isa = PBXGroup; + children = ( + B13957C08DB8CBC5F8ACCF7F5F357BC8 /* LIALinkedInApplication.h */, + 00F9A14F2433DA44052013B901E1223F /* LIALinkedInApplication.m */, + 971598A9B5326692505A0A315EF0106D /* LIALinkedInAuthorizationViewController.h */, + 02F405248B5AF707A66BDE8F1B6BD2A0 /* LIALinkedInAuthorizationViewController.m */, + 916FF7753EAF17EE7C106AFD6A5F1213 /* LIALinkedInHttpClient.h */, + 4FD3C980612F45F8D89FC90A2B85E587 /* LIALinkedInHttpClient.m */, + 3690BC957FD82C08711E56A8F33BDB58 /* NSString+LIAEncode.h */, + 48D02D496999838F09266DA939AD4E59 /* NSString+LIAEncode.m */, + 114F881233B60A3D1E4199E995E82DC7 /* Support Files */, + ); + path = IOSLinkedInAPI; + sourceTree = ""; + }; + DF3DE31E0AE5DD169E33F0D28B7A8A30 /* Resources */ = { + isa = PBXGroup; + children = ( + DCB57A2175B80E53A0B10064B907ED85 /* GoogleSignIn.bundle */, + ); + name = Resources; + sourceTree = ""; + }; + E099D04AB68382F4DE869F956E36558C /* GoogleSignIn */ = { + isa = PBXGroup; + children = ( + CB189499CCCC95D47625934F8B345BB4 /* GIDAuthentication.h */, + 79514319288A4ABE30193D7D3C0A6A25 /* GIDGoogleUser.h */, + FCEEB5FE45042BF7B80B69DD8F6C9168 /* GIDProfileData.h */, + 4D645511F4ED7002A97FF29B45218B27 /* GIDSignIn.h */, + 7E45734D098A84D75E4A51D29C40109F /* GIDSignInButton.h */, + 94A89DFE2D9B36D9298C3CD7295BFD3A /* GoogleSignIn.h */, + 198A2B79D2BC232F5EB1BAF48FAEA08E /* Frameworks */, + DF3DE31E0AE5DD169E33F0D28B7A8A30 /* Resources */, + ); + path = GoogleSignIn; + sourceTree = ""; + }; + F3100B2B7BF17A34338537C1A0E9E81F /* SignIn */ = { + isa = PBXGroup; + children = ( + E30B1C51F26B033D1FD87A4B6E7ACF72 /* GGLContext+SignIn.h */, + 32473AA30D201FD15475F14C93BC74BF /* SignIn.h */, + 0ABDDEC4B1D89A51C68DD8DDCCD47B6B /* Frameworks */, + ); + name = SignIn; + sourceTree = ""; + }; + FD0308682A58CF72844529533FE45372 /* Frameworks */ = { + isa = PBXGroup; + children = ( + C010D691B712EF834AE2D800AD2B0C2F /* Crashlytics.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 1901FA69A7852E4AA67584D8BEFF3601 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 82458864D0CB30150809D33C128F6E71 /* FSHelpers+Swift-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 290E23B144CFF61D9283BB4A669D5896 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4067EFCF5E3EB39EF30B61D4ED7CABD8 /* AFAutoPurgingImageCache.h in Headers */, + B5819073A6906DA0255B81D9F7C399BF /* AFHTTPSessionManager.h in Headers */, + 7E0AEE24FBFF0AE843F142BD9077D7EA /* AFImageDownloader.h in Headers */, + 443D2C1F02661304D60280AFD87EDE94 /* AFNetworkActivityIndicatorManager.h in Headers */, + 2C43A191D8DD208D26DA0C162330063C /* AFNetworking-umbrella.h in Headers */, + A7016A80A063A737D3A89B2A56D54045 /* AFNetworking.h in Headers */, + E481F01CD542237FE777C7886D611E19 /* AFNetworkReachabilityManager.h in Headers */, + 793840ADC4B76F038EA45CBAB9C00411 /* AFSecurityPolicy.h in Headers */, + 0E3EA64E5F45DC28DC0777F66DBB1D14 /* AFURLRequestSerialization.h in Headers */, + 796974B2B7F09A6545FB3599CAE17327 /* AFURLResponseSerialization.h in Headers */, + DC3CB82B45D21EF61A5EBB84CD7D5D90 /* AFURLSessionManager.h in Headers */, + 6A1A3ACAF8EE608ACAAF41A784F1FF38 /* UIActivityIndicatorView+AFNetworking.h in Headers */, + F293B10B4B186E02970888FA95A2919E /* UIButton+AFNetworking.h in Headers */, + 269BFA01D6EC6E4F4844B4DF8A4D6282 /* UIImage+AFNetworking.h in Headers */, + 6C4C9F2048F19A2EAA348F55FB1B4E86 /* UIImageView+AFNetworking.h in Headers */, + E2D710D57A111023E2247B32A6369355 /* UIKit+AFNetworking.h in Headers */, + 3ED8349E833A40310AAAC4A3EE153AA1 /* UIProgressView+AFNetworking.h in Headers */, + 8902464F0A59CB0157031F524F2FD0A3 /* UIRefreshControl+AFNetworking.h in Headers */, + BE3A4DCFF55EBC8C83DD61586D12C53D /* UIWebView+AFNetworking.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 741C47924587DF0C435B13292AFE9737 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 5FF39E1F2818048B8864397EC539649D /* SVIndefiniteAnimatedView.h in Headers */, + 672ED1D44DF4FE74BAEBED0E8CE700D7 /* SVProgressAnimatedView.h in Headers */, + B058AE85A579ADE91B3F00BB5C94F08B /* SVProgressHUD-umbrella.h in Headers */, + E79EA40929885443805EA27AC7A44661 /* SVProgressHUD.h in Headers */, + 6C4FF9456D8EF07C1C3C086A4E789CB8 /* SVRadialGradientLayer.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A91AAEC97FF99CC28EEC90A247B15C53 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 73D35B8FEA884C0FE7A5109404040AB6 /* Pods-Abstract-Authorization-moduleTests-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B907FC578D39AAA49C9A33FD7D2AEE8E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 1CBFC06BDD2E6004C28A2F70CC85A50E /* IOSLinkedInAPI-umbrella.h in Headers */, + 961C662C3609037575DE7205C7B9C26F /* LIALinkedInApplication.h in Headers */, + 6400299F78C5A1DA4B6DD869578EC2E0 /* LIALinkedInAuthorizationViewController.h in Headers */, + BC0245CFFC4C3C09829E9073FC54D055 /* LIALinkedInHttpClient.h in Headers */, + BB1A286A7D2F60F7C43C7D43E1525FFE /* NSString+LIAEncode.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D3C6C8898034002DE76B503CB392F118 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 873A2565A8F13A37DC1F948FAE3A0C6B /* MagicalImportFunctions.h in Headers */, + 32B280B6F88E5359B67CEDBF1FC04CE0 /* MagicalRecord+Actions.h in Headers */, + 5F939E2D4FAF2FDBFD375C9EF51AB4AC /* MagicalRecord+ErrorHandling.h in Headers */, + 63CD7049BB090C4451B710D904FA59DB /* MagicalRecord+iCloud.h in Headers */, + F9C327FAA4DCAFB43A38C93D96E139F6 /* MagicalRecord+Options.h in Headers */, + 9164FADF1ABBE01AB6E91BB165EF5667 /* MagicalRecord+Setup.h in Headers */, + 0F22351DA1A3D702C2E6CDD83E490D5F /* MagicalRecord+ShorthandMethods.h in Headers */, + CB353CD52B7F352D1915DE7955430FCF /* MagicalRecord-umbrella.h in Headers */, + D7054D617BEDE19E4799E46FB7789769 /* MagicalRecord.h in Headers */, + C3F7EB6381967C765C617DD8A4F7FC44 /* MagicalRecordDeprecationMacros.h in Headers */, + A8917F4F856B9BF67E9BB7F740F33E02 /* MagicalRecordInternal.h in Headers */, + 3521DD81CBF7A37B5C82C98B2B699A1E /* MagicalRecordLogging.h in Headers */, + D70B5FD4563A492F941324224447056F /* MagicalRecordXcode7CompatibilityMacros.h in Headers */, + 053DABFA92D9BFF453AC6EDEDC8984F6 /* NSAttributeDescription+MagicalDataImport.h in Headers */, + 48A65F1B523A66A65C3D463DD26641CD /* NSEntityDescription+MagicalDataImport.h in Headers */, + E3A97FC13E0B19F080172C7CA01167E7 /* NSManagedObject+MagicalAggregation.h in Headers */, + 99C73C815185BC9E8DFD1EAFB2D87EA4 /* NSManagedObject+MagicalDataImport.h in Headers */, + A4DA1E9955B1D43A2F1DAA06B5310698 /* NSManagedObject+MagicalFinders.h in Headers */, + 1FBE4F1EF412E7D1439C5C723B0617F1 /* NSManagedObject+MagicalRecord.h in Headers */, + 9CBC32F7EFE35EBB5975CBB5095C3707 /* NSManagedObject+MagicalRequests.h in Headers */, + 855CBA47CAB145C27E7A80357D9EC66B /* NSManagedObjectContext+MagicalChainSave.h in Headers */, + 5C648FA64F4E630D1FDD4093AE3DFE9B /* NSManagedObjectContext+MagicalObserving.h in Headers */, + E5BFD28822640534E062B93949DE373D /* NSManagedObjectContext+MagicalRecord.h in Headers */, + 3EE596D04B1944834C61A012E557AAFC /* NSManagedObjectContext+MagicalSaves.h in Headers */, + E3E1503CD0D2E6F273E77E976B68B060 /* NSManagedObjectContext+MagicalThreading.h in Headers */, + 301F8AD823893477E2B9E9CBC31F1D9B /* NSManagedObjectModel+MagicalRecord.h in Headers */, + 6A34C7BA2F239663810E50AAC868E031 /* NSNumber+MagicalDataImport.h in Headers */, + BC21786E21AA8A53C2AE66DD3D7C526E /* NSObject+MagicalDataImport.h in Headers */, + D56C1A690A12F062DDF9FFAF0BD8828F /* NSPersistentStore+MagicalRecord.h in Headers */, + D0DBE6E6961116F542077FE5FC2B26BB /* NSPersistentStoreCoordinator+MagicalRecord.h in Headers */, + 3174D49C6CD7F435FF97E52DED12B0D5 /* NSRelationshipDescription+MagicalDataImport.h in Headers */, + 13A69E9B380214C8C762E34CD6B3951F /* NSString+MagicalDataImport.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E7D0CB1C91F89912005C574CC4F74B2E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 812B1AB1534CE74971583AEE0AC98CD4 /* Pods-Abstract-Authorization-moduleUITests-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FCF9729D65818ECA311D4D6702EA7E30 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D99D0572602F471CBD5A25B645BB98CB /* Pods-Abstract-Authorization-module-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 21DA40213C592EE25A150A71176761DE /* Pods-Abstract-Authorization-module */ = { + isa = PBXNativeTarget; + buildConfigurationList = 19F093A2F1E32F4AD991FD2B48119215 /* Build configuration list for PBXNativeTarget "Pods-Abstract-Authorization-module" */; + buildPhases = ( + 645503427B40F8205EFDA53ABDDE8A13 /* Sources */, + 6696A75CD3B1696FB3EF9A274C149737 /* Frameworks */, + FCF9729D65818ECA311D4D6702EA7E30 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 62F336528DFF36EE6B524E3BE98A3161 /* PBXTargetDependency */, + C2BDDC5E87BA0C5F04E4E04B2D2F9DFC /* PBXTargetDependency */, + 60BC86116E2E561DC630BCCB55ED1096 /* PBXTargetDependency */, + 1C7E28CDAF15A6AC2C81A39DDB335CB7 /* PBXTargetDependency */, + D5606665FB12365EC7661CE8EBC126AB /* PBXTargetDependency */, + ); + name = "Pods-Abstract-Authorization-module"; + productName = "Pods-Abstract-Authorization-module"; + productReference = 886EBEEB6B2651214D7CFF2C86594076 /* Pods_Abstract_Swift_Base.framework */; + productType = "com.apple.product-type.framework"; + }; + 936FCBCC073E3961EB4D42C738FEB332 /* FSHelpers+Swift */ = { + isa = PBXNativeTarget; + buildConfigurationList = E2C511AB70D66145EB013763538DA83C /* Build configuration list for PBXNativeTarget "FSHelpers+Swift" */; + buildPhases = ( + DC7DCC802B22033413096685FB9B6965 /* Sources */, + 68B7478C53EEE1D14C595CE74FDCE6B5 /* Frameworks */, + 1901FA69A7852E4AA67584D8BEFF3601 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "FSHelpers+Swift"; + productName = "FSHelpers+Swift"; + productReference = 64F5C16C4C1307E30350E00F8CEB8DEB /* FSHelpers_Swift.framework */; + productType = "com.apple.product-type.framework"; + }; + A12CE32D481E6A74CB179A8975AC6ED5 /* SVProgressHUD */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4C9D3BDF290525BD2F60E412404E309F /* Build configuration list for PBXNativeTarget "SVProgressHUD" */; + buildPhases = ( + 2695B9057466CDA786212FB9255EBCBB /* Sources */, + F59B4225F98CAF41FAB52FAC1AADAE03 /* Frameworks */, + 741C47924587DF0C435B13292AFE9737 /* Headers */, + 99B0886C688443DB77C8B4AC753CF709 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SVProgressHUD; + productName = SVProgressHUD; + productReference = 167440FE03F30E0E4A8435FE5F2F9062 /* SVProgressHUD.framework */; + productType = "com.apple.product-type.framework"; + }; + A4548415250B1E3AC4F2D42E21C97E96 /* Pods-Abstract-Authorization-moduleUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7A723A13D64D45399111CBD70B091352 /* Build configuration list for PBXNativeTarget "Pods-Abstract-Authorization-moduleUITests" */; + buildPhases = ( + BF068660EA5829D471E7E8720756F54F /* Sources */, + BAF31E37C9E5A098494BC7FD84773A37 /* Frameworks */, + E7D0CB1C91F89912005C574CC4F74B2E /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + A5BD72A891C7CB24404F113C0B8005C5 /* PBXTargetDependency */, + D0333F3C693746C83A16798F9A83146F /* PBXTargetDependency */, + 84057AE0A587FBF6A794F17CF308449E /* PBXTargetDependency */, + 189A362589D3FCC74D99707C085A3FCE /* PBXTargetDependency */, + 23A076DF593564C41E04FA92AEF15A13 /* PBXTargetDependency */, + ); + name = "Pods-Abstract-Authorization-moduleUITests"; + productName = "Pods-Abstract-Authorization-moduleUITests"; + productReference = 6F3B478C56C027121467C8C2E8672F73 /* Pods_Abstract_Swift_BaseUITests.framework */; + productType = "com.apple.product-type.framework"; + }; + AD47E339A26F876F910CD9E671989350 /* MagicalRecord */ = { + isa = PBXNativeTarget; + buildConfigurationList = C3DD98F93CFF0CDAF92F03F2D77E6BF2 /* Build configuration list for PBXNativeTarget "MagicalRecord" */; + buildPhases = ( + 599C5A9217D2613663CFF2AE142CB5EB /* Sources */, + 112BDE3F79ACCBC59869EBA062F513F9 /* Frameworks */, + D3C6C8898034002DE76B503CB392F118 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MagicalRecord; + productName = MagicalRecord; + productReference = 453387A932BD97D9099B65F557C46F31 /* MagicalRecord.framework */; + productType = "com.apple.product-type.framework"; + }; + BB6D9DD106D1A7484C107C2C69F9624B /* AFNetworking */ = { + isa = PBXNativeTarget; + buildConfigurationList = 01ADEA938D0C4E7FAE6E8FE2072482C0 /* Build configuration list for PBXNativeTarget "AFNetworking" */; + buildPhases = ( + 658676A0AFE16D327F91992D15090717 /* Sources */, + 0EB329B8E12A89DCC06053ADC52451E1 /* Frameworks */, + 290E23B144CFF61D9283BB4A669D5896 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AFNetworking; + productName = AFNetworking; + productReference = C17D935C3D970BC04BB23E0A3B223E69 /* AFNetworking.framework */; + productType = "com.apple.product-type.framework"; + }; + C5410BB8D899B3EB45CF2BF4C2E884EC /* IOSLinkedInAPI */ = { + isa = PBXNativeTarget; + buildConfigurationList = B784CF01550570EE7FC89BD48233B59B /* Build configuration list for PBXNativeTarget "IOSLinkedInAPI" */; + buildPhases = ( + 5B9670DE0E119934C1EB2F4CFAE648CF /* Sources */, + 161EE1E6AFF02A718DCACD18847B7C07 /* Frameworks */, + B907FC578D39AAA49C9A33FD7D2AEE8E /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 03891D2B18459CE64207D2D0D52C969B /* PBXTargetDependency */, + ); + name = IOSLinkedInAPI; + productName = IOSLinkedInAPI; + productReference = 9E18D59F06564A3B4FFE3C0C197CD918 /* IOSLinkedInAPI.framework */; + productType = "com.apple.product-type.framework"; + }; + E7EF33AADEDB1CA01725DBC5B3DC97CF /* Pods-Abstract-Authorization-moduleTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = D5F4C9BC4C356AA5D5B8E66E0857C973 /* Build configuration list for PBXNativeTarget "Pods-Abstract-Authorization-moduleTests" */; + buildPhases = ( + 5D6FDDEC7ECDD1D7DCA90A48ABCA3EEB /* Sources */, + 2AC5CD43A3B959508C69C017D30CD31D /* Frameworks */, + A91AAEC97FF99CC28EEC90A247B15C53 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 508D978B59EAADFE00D1DD2F4EDE2032 /* PBXTargetDependency */, + 4B90DCD72532E92676A192E92461D489 /* PBXTargetDependency */, + 9B667B6F29A365E04A6C1F170C672D28 /* PBXTargetDependency */, + FD66F1988BF29C9B26807037C4D8DE71 /* PBXTargetDependency */, + 20FC8B7E5C00D62838C786B2F17D2A32 /* PBXTargetDependency */, + ); + name = "Pods-Abstract-Authorization-moduleTests"; + productName = "Pods-Abstract-Authorization-moduleTests"; + productReference = 546F95D1B6A61CD50ADE42559ECC378B /* Pods_Abstract_Swift_BaseTests.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0730; + LastUpgradeCheck = 0700; + }; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = 6D541872191DD28354DA3DBEF1BA7F5D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + BB6D9DD106D1A7484C107C2C69F9624B /* AFNetworking */, + 936FCBCC073E3961EB4D42C738FEB332 /* FSHelpers+Swift */, + C5410BB8D899B3EB45CF2BF4C2E884EC /* IOSLinkedInAPI */, + AD47E339A26F876F910CD9E671989350 /* MagicalRecord */, + 21DA40213C592EE25A150A71176761DE /* Pods-Abstract-Authorization-module */, + E7EF33AADEDB1CA01725DBC5B3DC97CF /* Pods-Abstract-Authorization-moduleTests */, + A4548415250B1E3AC4F2D42E21C97E96 /* Pods-Abstract-Authorization-moduleUITests */, + A12CE32D481E6A74CB179A8975AC6ED5 /* SVProgressHUD */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 99B0886C688443DB77C8B4AC753CF709 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ED5E909B740D18CB1D31F5BAE84AEE14 /* SVProgressHUD.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2695B9057466CDA786212FB9255EBCBB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 78E25A4FFF7FD14F7B3C95899BD98466 /* SVIndefiniteAnimatedView.m in Sources */, + 477AB4D34ED325677FE2EA27C051470A /* SVProgressAnimatedView.m in Sources */, + 622906F2B2B301EB2762271D4D22ED27 /* SVProgressHUD-dummy.m in Sources */, + 7A7D0D6730D771C4F7B0B6CE85A3EC05 /* SVProgressHUD.m in Sources */, + 28BB165C03A669B64509C79C38D39A33 /* SVRadialGradientLayer.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 599C5A9217D2613663CFF2AE142CB5EB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6D96A2EC3B206F63D2764478B0201144 /* MagicalImportFunctions.m in Sources */, + FEF32063C461B20B65DB2A06A30BB6F7 /* MagicalRecord+Actions.m in Sources */, + C57FFEC01297CAAF01AD798435A0BFE0 /* MagicalRecord+ErrorHandling.m in Sources */, + 3DD7C1ADF1DA17264B11B3FCA93CDD9A /* MagicalRecord+iCloud.m in Sources */, + 44FBD4BED7EC0F0835002425D78154C4 /* MagicalRecord+Options.m in Sources */, + 3F5DC541B71A33F6D5AA5012C7630425 /* MagicalRecord+Setup.m in Sources */, + 0627EC150C177700387C9E0C44C5D20E /* MagicalRecord+ShorthandMethods.m in Sources */, + 6FED892127561AFCEC7D866B4C73ECAD /* MagicalRecord-dummy.m in Sources */, + 09E6DECD5AB594104764C6F81EB71537 /* MagicalRecordInternal.m in Sources */, + 09E64866A37EAC1852E7FA08CF2BBB07 /* NSAttributeDescription+MagicalDataImport.m in Sources */, + B8E051AE222124F3922022CD3BDD7C38 /* NSEntityDescription+MagicalDataImport.m in Sources */, + F3086DFFAA5BBA34A0A5AA264BCD64A5 /* NSManagedObject+MagicalAggregation.m in Sources */, + 09CD5E8011F9FF90817B4CEA30CCAF79 /* NSManagedObject+MagicalDataImport.m in Sources */, + C1F35A8F2C9F043CD2793B591BB8EA48 /* NSManagedObject+MagicalFinders.m in Sources */, + 36BEEF5338EF31B0955DC632E0482747 /* NSManagedObject+MagicalRecord.m in Sources */, + DB52E3ED7904BA42F3D27F55E11345E0 /* NSManagedObject+MagicalRequests.m in Sources */, + 813F360497C515D67049CA30039E867E /* NSManagedObjectContext+MagicalChainSave.m in Sources */, + 3BFEC1F842226F4A2EA83742A489AF04 /* NSManagedObjectContext+MagicalObserving.m in Sources */, + FED654D996F54BAA458DC0A4E86EBA11 /* NSManagedObjectContext+MagicalRecord.m in Sources */, + E4FF1388561CEA6536DD601C59E0E2D8 /* NSManagedObjectContext+MagicalSaves.m in Sources */, + 438151B3D667A8B3D478F37E744BACF3 /* NSManagedObjectContext+MagicalThreading.m in Sources */, + CA1FC0E3273FF68DA837600721ECB68A /* NSManagedObjectModel+MagicalRecord.m in Sources */, + F7B7200B1DD5F3AA6EF4FB8A7E4D5675 /* NSNumber+MagicalDataImport.m in Sources */, + F1F8D1CD51E348CBDA66CE9FF0F75B52 /* NSObject+MagicalDataImport.m in Sources */, + 921F9023DEE0379E9CBF31386853299B /* NSPersistentStore+MagicalRecord.m in Sources */, + 49063CFE2BE637CB9319D1F794D3B752 /* NSPersistentStoreCoordinator+MagicalRecord.m in Sources */, + 565DBB9129441D06C3D401E5DF8F1456 /* NSRelationshipDescription+MagicalDataImport.m in Sources */, + 2A77F38FE22978DCED7F724F8C554723 /* NSString+MagicalDataImport.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5B9670DE0E119934C1EB2F4CFAE648CF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6B0F34719A7A1943DACF0AA8B44ED92F /* IOSLinkedInAPI-dummy.m in Sources */, + 67068CA69A518D1600EFD0CD5047C71C /* LIALinkedInApplication.m in Sources */, + C3A1FF40CC3EB4C8FFCECDF0C8C6CB68 /* LIALinkedInAuthorizationViewController.m in Sources */, + C992404482C8B3A404479DCFAB327225 /* LIALinkedInHttpClient.m in Sources */, + A8700D660975B75E7CCF3CA1724BB337 /* NSString+LIAEncode.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5D6FDDEC7ECDD1D7DCA90A48ABCA3EEB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C99C9DBDB177D72695A4D29EAA47AEAE /* Pods-Abstract-Authorization-moduleTests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 645503427B40F8205EFDA53ABDDE8A13 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F6F5DDC77B97AC716A1C7D37223BAF99 /* Pods-Abstract-Authorization-module-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 658676A0AFE16D327F91992D15090717 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F2A269484A8280B1DDC7D4D45432156F /* AFAutoPurgingImageCache.m in Sources */, + 26619A95FEEF44DD9364917675A895C4 /* AFHTTPSessionManager.m in Sources */, + BD35C7AD6DD983685586E62A51A1636B /* AFImageDownloader.m in Sources */, + DB872C5121AA79D578F353483C0EE236 /* AFNetworkActivityIndicatorManager.m in Sources */, + 27DB4644CB311586956D4E69D03EDECD /* AFNetworking-dummy.m in Sources */, + CBE52A7343DAD44D55002BC0245B29AA /* AFNetworkReachabilityManager.m in Sources */, + 1ED25AA526192FB5F23E548CD087A9D3 /* AFSecurityPolicy.m in Sources */, + F073E3199AB1263A0D73EB16465A676D /* AFURLRequestSerialization.m in Sources */, + 8F0CE9C8293AB633C27761F997F6C4DC /* AFURLResponseSerialization.m in Sources */, + F8FDE00AA639609A248ABB2022049BB3 /* AFURLSessionManager.m in Sources */, + 70B778EC8E66F741693DB5A4621258C8 /* UIActivityIndicatorView+AFNetworking.m in Sources */, + F3FD71DF03D266FF20AE82A7D5D679CF /* UIButton+AFNetworking.m in Sources */, + 02DD605FD5B64D5583FCD27F13F8862C /* UIImageView+AFNetworking.m in Sources */, + F09211BC390EC440EC8E15ACF457A26E /* UIProgressView+AFNetworking.m in Sources */, + 7089F36838F4B800F0B3FCE6BCEE780A /* UIRefreshControl+AFNetworking.m in Sources */, + 233BC55087C727070FEF93DD88E8EE92 /* UIWebView+AFNetworking.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BF068660EA5829D471E7E8720756F54F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CFDE86D5953BBABA0DEABDB2D91E7432 /* Pods-Abstract-Authorization-moduleUITests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DC7DCC802B22033413096685FB9B6965 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 47278DCB77975B6063D2702578781B9D /* FSE+Array.swift in Sources */, + 1CFC309E0BA6037BCAF7DC74EC015EF8 /* FSE+Dictionary.swift in Sources */, + A4A3B019FF95DC5FDC5A3C9D161F33B4 /* FSE+Double.swift in Sources */, + C40E3695531934CBD3592F190A12C58B /* FSE+Enumerations.swift in Sources */, + D0E6AD841E2C4353D588D7FADAD7B636 /* FSE+NSDate.swift in Sources */, + 97248185A6FF443CD481E9A5527FBF90 /* FSE+NSObject.swift in Sources */, + BE9CEB3F7C332A3F3307C94CBEEBD384 /* FSE+Range.swift in Sources */, + 893B546F3A597121DA0B018E2598FC89 /* FSE+String.swift in Sources */, + B44E5E753420CC54E6DC5EC80B888CAF /* FSE+UIAlertView.swift in Sources */, + 900D6E6156416DB55D6D6E46E2E98A4B /* FSE+UIColor.swift in Sources */, + 59F788596D5BD1EF1033AFBB2AB3E595 /* FSE+UIImage.swift in Sources */, + B766FF5A7960B3CC2E8689CC5D8965B5 /* FSE+UITableView.swift in Sources */, + F8FCBCBA76CE1F4ABDE17D9D6D10DDCC /* FSE+UITextField.swift in Sources */, + 96ECBE9AA00698D60C44354C02425234 /* FSE+UITextView.swift in Sources */, + 2499A91C5EF3776C20B1B3AA0A6EAEC9 /* FSE+UIView.swift in Sources */, + 03EBED87D841930C19D22EB58725F8D9 /* FSHelpers+Swift-dummy.m in Sources */, + A9E1A30383A1BA65A4E2BE18DE5B4600 /* FSHelpers.swift in Sources */, + BE86A99F6E977E16DE1BA9AE727FE6BC /* FSHelpersAutolayout.swift in Sources */, + 27DA3708AEF1A64A8C41048BE27602D8 /* FSKeyboardScrollSupport.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 03891D2B18459CE64207D2D0D52C969B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AFNetworking; + target = BB6D9DD106D1A7484C107C2C69F9624B /* AFNetworking */; + targetProxy = 7178E045FB26A04529C060DC16B5E7FB /* PBXContainerItemProxy */; + }; + 189A362589D3FCC74D99707C085A3FCE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MagicalRecord; + target = AD47E339A26F876F910CD9E671989350 /* MagicalRecord */; + targetProxy = 79A1E20D9617868285BBFC471314710E /* PBXContainerItemProxy */; + }; + 1C7E28CDAF15A6AC2C81A39DDB335CB7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MagicalRecord; + target = AD47E339A26F876F910CD9E671989350 /* MagicalRecord */; + targetProxy = F2F6D97CBE288D13B9BE858CFFA30E41 /* PBXContainerItemProxy */; + }; + 20FC8B7E5C00D62838C786B2F17D2A32 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SVProgressHUD; + target = A12CE32D481E6A74CB179A8975AC6ED5 /* SVProgressHUD */; + targetProxy = 4773C120C1E007BBC8C04BA0770607B1 /* PBXContainerItemProxy */; + }; + 23A076DF593564C41E04FA92AEF15A13 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SVProgressHUD; + target = A12CE32D481E6A74CB179A8975AC6ED5 /* SVProgressHUD */; + targetProxy = 063F644CFB26ABFD90F43FE1998F040F /* PBXContainerItemProxy */; + }; + 4B90DCD72532E92676A192E92461D489 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "FSHelpers+Swift"; + target = 936FCBCC073E3961EB4D42C738FEB332 /* FSHelpers+Swift */; + targetProxy = 5793D40EEED2AF0CBA27922C67A77409 /* PBXContainerItemProxy */; + }; + 508D978B59EAADFE00D1DD2F4EDE2032 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AFNetworking; + target = BB6D9DD106D1A7484C107C2C69F9624B /* AFNetworking */; + targetProxy = AB7309E225CF41557DBF52300CE05DC8 /* PBXContainerItemProxy */; + }; + 60BC86116E2E561DC630BCCB55ED1096 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IOSLinkedInAPI; + target = C5410BB8D899B3EB45CF2BF4C2E884EC /* IOSLinkedInAPI */; + targetProxy = 12E4DF9E0872344195E7C3456F74A9C3 /* PBXContainerItemProxy */; + }; + 62F336528DFF36EE6B524E3BE98A3161 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AFNetworking; + target = BB6D9DD106D1A7484C107C2C69F9624B /* AFNetworking */; + targetProxy = 698C455CA21377CB22E43F992BF358FE /* PBXContainerItemProxy */; + }; + 84057AE0A587FBF6A794F17CF308449E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IOSLinkedInAPI; + target = C5410BB8D899B3EB45CF2BF4C2E884EC /* IOSLinkedInAPI */; + targetProxy = 90821835A010A0E592163A289C418CE2 /* PBXContainerItemProxy */; + }; + 9B667B6F29A365E04A6C1F170C672D28 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IOSLinkedInAPI; + target = C5410BB8D899B3EB45CF2BF4C2E884EC /* IOSLinkedInAPI */; + targetProxy = BA387D23DA054ABA824A99251B68CDC6 /* PBXContainerItemProxy */; + }; + A5BD72A891C7CB24404F113C0B8005C5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AFNetworking; + target = BB6D9DD106D1A7484C107C2C69F9624B /* AFNetworking */; + targetProxy = 7E2CED86716839605084CFCB979285CF /* PBXContainerItemProxy */; + }; + C2BDDC5E87BA0C5F04E4E04B2D2F9DFC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "FSHelpers+Swift"; + target = 936FCBCC073E3961EB4D42C738FEB332 /* FSHelpers+Swift */; + targetProxy = 918012DC7BE0377D6F3C60274638C4B3 /* PBXContainerItemProxy */; + }; + D0333F3C693746C83A16798F9A83146F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "FSHelpers+Swift"; + target = 936FCBCC073E3961EB4D42C738FEB332 /* FSHelpers+Swift */; + targetProxy = 65B9822BE3C917F6F2991D929097CC4E /* PBXContainerItemProxy */; + }; + D5606665FB12365EC7661CE8EBC126AB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SVProgressHUD; + target = A12CE32D481E6A74CB179A8975AC6ED5 /* SVProgressHUD */; + targetProxy = 56104AC0E8F50DB07E1FC8E64C5E8444 /* PBXContainerItemProxy */; + }; + FD66F1988BF29C9B26807037C4D8DE71 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MagicalRecord; + target = AD47E339A26F876F910CD9E671989350 /* MagicalRecord */; + targetProxy = 714AB78053C62B29C538AB1D59C0AB32 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 0128D348FB650EA1FEC367BFFE6DA5BF /* Release Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5D826BE60B03B9AF42EA2997CFB21C05 /* Pods-Abstract-Authorization-moduleTests.release staging.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseTests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Release Staging"; + }; + 0A39D1BDAAC1AE07BFB4C5A625ED4AB0 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 701585C54E5213D7ECF31C02DCAAF0BF /* AFNetworking.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = AFNetworking; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Test; + }; + 1407DDF5E0E42729A53ADA242796BCF7 /* AppStore Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F7A2214D0AE42BEEA2C0A536A5F8D8A9 /* Pods-Abstract-Authorization-moduleTests.appstore debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseTests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "AppStore Debug"; + }; + 1678F19E931D4E4D7FC2C47B7B31DF19 /* AppStore */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1780ECDAD9C3685A1B015B7364C2D90F /* Pods-Abstract-Authorization-moduleUITests.appstore.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseUITests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = AppStore; + }; + 168E9AA95045D7B7C44EB0E5D467FBB8 /* AppStore Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3133FF43BE7B95ED8A49428A2FA7C973 /* FSHelpers+Swift.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FSHelpers+Swift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = FSHelpers_Swift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "AppStore Debug"; + }; + 1BB2751AF6947A28DDBAE49AF8DF84EC /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 23AAB8CEC70A9442A97AD2E619F3C170 /* Pods-Abstract-Authorization-moduleTests.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseTests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 1C9390B495C33D1D160F7DEB2A4F60FA /* AppStore Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 701585C54E5213D7ECF31C02DCAAF0BF /* AFNetworking.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = AFNetworking; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "AppStore Debug"; + }; + 2279A3D4D32DE8F476DD489E07DA1902 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 15FEC7E4E15BCFC7DEFBCC1DD2F61C8C /* MagicalRecord.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/MagicalRecord/MagicalRecord-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MagicalRecord/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MagicalRecord/MagicalRecord.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = MagicalRecord; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 2588EA364419D831347938453F4F6DE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + ONLY_ACTIVE_ARCH = YES; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 2738D39F715C27964B6CF654A57063DD /* AppStore Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_APP_STORE_DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + STRIP_INSTALLED_PRODUCT = NO; + VALIDATE_PRODUCT = YES; + }; + name = "AppStore Debug"; + }; + 2A02B07F5832EB297600E9CDD10B9860 /* Release Staging */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE_STAGING=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + STRIP_INSTALLED_PRODUCT = NO; + VALIDATE_PRODUCT = YES; + }; + name = "Release Staging"; + }; + 2A2EB7F2E5F5C4CB804D790FD114FB8B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3133FF43BE7B95ED8A49428A2FA7C973 /* FSHelpers+Swift.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FSHelpers+Swift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = FSHelpers_Swift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 2AE764FF64DD2B563D3A23EA96F72A63 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3133FF43BE7B95ED8A49428A2FA7C973 /* FSHelpers+Swift.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FSHelpers+Swift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = FSHelpers_Swift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Test; + }; + 2C38658C68BD795B171B6CB47C2A3B20 /* Test Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B46F923C2063110D98BC936D027B350D /* Pods-Abstract-Authorization-moduleTests.test staging.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseTests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Test Staging"; + }; + 395A25B78A2DDA0C58C6180BC0CC5DDA /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E1AACC42030BBA39E4174CCF48245E2E /* Pods-Abstract-Authorization-moduleTests.test.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseTests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Test; + }; + 3B014618B9B56FD30756F99686DCEAC4 /* Test Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C14A80B1DDF59E185932EB2D5CE2EB4D /* Pods-Abstract-Authorization-moduleUITests.test staging.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseUITests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Test Staging"; + }; + 3C0BEE0C5F4BE42FA064CC3A87933959 /* Release Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3133FF43BE7B95ED8A49428A2FA7C973 /* FSHelpers+Swift.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FSHelpers+Swift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = FSHelpers_Swift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Release Staging"; + }; + 3E005ABFE18820BEC48356CA9CE78179 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 292D9ABFC4DD12BB774CF8B374C37BB2 /* SVProgressHUD.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVProgressHUD/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = SVProgressHUD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 3FE6A59FD59249DDB4F495DF267A7FC5 /* Debug Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BEB943BA7CB4D70419CE9BDA4E3C3143 /* Pods-Abstract-Authorization-module.debug staging.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_Base; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Debug Staging"; + }; + 40A866965860BED60E8017A2F00BE70D /* Release Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B425B3B0E7AE099323B2CD289E9066A9 /* Pods-Abstract-Authorization-module.release staging.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_Base; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Release Staging"; + }; + 428EED8EC31CEAC4FABEEA4BCB4AFD94 /* Test Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 701585C54E5213D7ECF31C02DCAAF0BF /* AFNetworking.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = AFNetworking; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Test Staging"; + }; + 43CFB3E1572193B97A4CF59A2A072C67 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C538171DF1F099DE1F8D10CCF64D642A /* Pods-Abstract-Authorization-moduleUITests.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseUITests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 484A4EB22BAB427BF993CAC393DB466A /* Debug Staging */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG_STAGING=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + STRIP_INSTALLED_PRODUCT = NO; + VALIDATE_PRODUCT = YES; + }; + name = "Debug Staging"; + }; + 491A07CE3343F635FCE2E354062C1985 /* Release Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 292D9ABFC4DD12BB774CF8B374C37BB2 /* SVProgressHUD.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVProgressHUD/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SVProgressHUD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Release Staging"; + }; + 4ACEEECF5516800D3561A3BAE08BE2E7 /* Test Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 15FEC7E4E15BCFC7DEFBCC1DD2F61C8C /* MagicalRecord.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/MagicalRecord/MagicalRecord-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MagicalRecord/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MagicalRecord/MagicalRecord.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = MagicalRecord; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Test Staging"; + }; + 4ADFEE8ACAF960F0E5D9EE1F86F34D19 /* AppStore */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 15FEC7E4E15BCFC7DEFBCC1DD2F61C8C /* MagicalRecord.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/MagicalRecord/MagicalRecord-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MagicalRecord/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MagicalRecord/MagicalRecord.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = MagicalRecord; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = AppStore; + }; + 4BB352EFDD82973944CCCEC843C6FF38 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AC699D0ED6C43F4C0D8CF4F3CFF541A7 /* IOSLinkedInAPI.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IOSLinkedInAPI/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = IOSLinkedInAPI; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 4C1768BCB5569E4FD3C9850D89C3A3AD /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 133837E9A2820D9FF2193315947E24A6 /* Pods-Abstract-Authorization-module.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_Base; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 504AAD2657ED5987773B687F6E3DAA02 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3133FF43BE7B95ED8A49428A2FA7C973 /* FSHelpers+Swift.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FSHelpers+Swift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = FSHelpers_Swift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 529FE271AF5CFA64C3D7A897ADD98B8B /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 21A04D41D52ACFB9FC0F17EAE104A2C1 /* Pods-Abstract-Authorization-moduleUITests.test.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseUITests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Test; + }; + 5A249446DADB65AA964875DCB21B77FE /* AppStore */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8768CB74047F80A9F6E31C717A34C92F /* Pods-Abstract-Authorization-moduleTests.appstore.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseTests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = AppStore; + }; + 60ADB1218CA5D8C269461B988CA8D5CF /* AppStore Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BD894F116AE90258A166D273495BE0C0 /* Pods-Abstract-Authorization-module.appstore debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_Base; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "AppStore Debug"; + }; + 61093934E94B60A97469FD8C4FD5E8BD /* AppStore Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AC699D0ED6C43F4C0D8CF4F3CFF541A7 /* IOSLinkedInAPI.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IOSLinkedInAPI/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = IOSLinkedInAPI; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "AppStore Debug"; + }; + 61910BA3DB09B01F7BD468445326E983 /* Release Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C12FECEFA4B3B50F0A160007031C6126 /* Pods-Abstract-Authorization-moduleUITests.release staging.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseUITests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Release Staging"; + }; + 61AD4929AC3440F8BFA0595E8DCD90C8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 6A6E805F6778FBF4C6D829CEBCBE50CA /* Test Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4217D728C94CDE166E7B0ADB5AABD63E /* Pods-Abstract-Authorization-module.test staging.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_Base; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Test Staging"; + }; + 7065A7AECE491D7761CEF3914FF3871B /* AppStore */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 461012D670D1FD4BB2567D4F73D27C43 /* Pods-Abstract-Authorization-module.appstore.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_Base; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = AppStore; + }; + 73A75FC6F2091C974B4ABE6A45806017 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BEA8F6FFB6B4706DACEFFB959E85A2E2 /* Pods-Abstract-Authorization-module.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_Base; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 758FCECF6C12C2E26DD0AA88BF533CA2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 18904D86ED9554FAAD8378221C61CEE7 /* Pods-Abstract-Authorization-moduleTests.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseTests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 77A8506A5DAA1B15BDC8A82EB60372D6 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 701585C54E5213D7ECF31C02DCAAF0BF /* AFNetworking.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = AFNetworking; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 78C49DD7538E79BC52E5367C45F44BE6 /* AppStore Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 292D9ABFC4DD12BB774CF8B374C37BB2 /* SVProgressHUD.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVProgressHUD/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SVProgressHUD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "AppStore Debug"; + }; + 7D0D7656552118F42510B8DAAC83172B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 701585C54E5213D7ECF31C02DCAAF0BF /* AFNetworking.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = AFNetworking; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 863DE222943D6BCC386CDF950B2229BD /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 15FEC7E4E15BCFC7DEFBCC1DD2F61C8C /* MagicalRecord.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/MagicalRecord/MagicalRecord-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MagicalRecord/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MagicalRecord/MagicalRecord.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = MagicalRecord; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Test; + }; + 895D8C66D651358D6D374001312108F8 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BA766EEC9DAEC183C9EF484424A0FAE6 /* Pods-Abstract-Authorization-module.test.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_Base; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Test; + }; + 8C3696E19C86C2E023AAFACE81954EAF /* AppStore Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 15FEC7E4E15BCFC7DEFBCC1DD2F61C8C /* MagicalRecord.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/MagicalRecord/MagicalRecord-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MagicalRecord/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MagicalRecord/MagicalRecord.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = MagicalRecord; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "AppStore Debug"; + }; + 907BE8B5ECDF9EDBF9FE157F678982E4 /* Release Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 15FEC7E4E15BCFC7DEFBCC1DD2F61C8C /* MagicalRecord.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/MagicalRecord/MagicalRecord-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MagicalRecord/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MagicalRecord/MagicalRecord.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = MagicalRecord; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Release Staging"; + }; + 934B5EE51B79EB521A79E7FD72253DFB /* Debug Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FCFEADEE7B63E12CC9B5BA691D46D73D /* Pods-Abstract-Authorization-moduleUITests.debug staging.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseUITests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Debug Staging"; + }; + 9474DFB42082CB07CEC55D883103AD12 /* Test Staging */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_TEST_STAGING=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + STRIP_INSTALLED_PRODUCT = NO; + VALIDATE_PRODUCT = YES; + }; + name = "Test Staging"; + }; + 9DD3AFDC254C8C42F3AB621B8D4A9CC8 /* Release Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AC699D0ED6C43F4C0D8CF4F3CFF541A7 /* IOSLinkedInAPI.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IOSLinkedInAPI/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = IOSLinkedInAPI; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Release Staging"; + }; + 9F423C956C5FFA0400FABD0DBD1B501D /* AppStore */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3133FF43BE7B95ED8A49428A2FA7C973 /* FSHelpers+Swift.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FSHelpers+Swift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = FSHelpers_Swift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = AppStore; + }; + A1A5D2031A42E22E07A4308C343BE7BA /* Test */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_TEST=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + STRIP_INSTALLED_PRODUCT = NO; + VALIDATE_PRODUCT = YES; + }; + name = Test; + }; + A2BAF3B15594C34CC86045C1496BD7A6 /* Debug Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 15FEC7E4E15BCFC7DEFBCC1DD2F61C8C /* MagicalRecord.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/MagicalRecord/MagicalRecord-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MagicalRecord/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MagicalRecord/MagicalRecord.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = MagicalRecord; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Debug Staging"; + }; + A39A38DCB45114A552A2F5E75CA6B87F /* Debug Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 292D9ABFC4DD12BB774CF8B374C37BB2 /* SVProgressHUD.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVProgressHUD/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SVProgressHUD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Debug Staging"; + }; + A623E0D4246FB285D45D7056DE8BEF37 /* Debug Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AC699D0ED6C43F4C0D8CF4F3CFF541A7 /* IOSLinkedInAPI.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IOSLinkedInAPI/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = IOSLinkedInAPI; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Debug Staging"; + }; + A7C639205D59974B7F3B1A96801E590D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 292D9ABFC4DD12BB774CF8B374C37BB2 /* SVProgressHUD.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVProgressHUD/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SVProgressHUD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + AAA13BE2DD9C1AF5C7C204393A01BBFC /* Debug Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D86871AF2439679D191FB40DA285FED0 /* Pods-Abstract-Authorization-moduleTests.debug staging.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseTests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Debug Staging"; + }; + AB6DA421550D764D5746ABD3378B59C0 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 948C70A2F9570EFE6162101B289F461A /* Pods-Abstract-Authorization-moduleUITests.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseUITests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + B23C4D3921CBD5B663D68CC019FEEE7B /* Debug Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 701585C54E5213D7ECF31C02DCAAF0BF /* AFNetworking.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = AFNetworking; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Debug Staging"; + }; + B3EE32CE6141C9E633F4EA32297D0F70 /* Release Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 701585C54E5213D7ECF31C02DCAAF0BF /* AFNetworking.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = AFNetworking; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Release Staging"; + }; + B78C1B4ED517DDA346611D2129614421 /* Debug Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3133FF43BE7B95ED8A49428A2FA7C973 /* FSHelpers+Swift.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FSHelpers+Swift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = FSHelpers_Swift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Debug Staging"; + }; + C8B834C192FACF5102D0CB7466D8F06A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 15FEC7E4E15BCFC7DEFBCC1DD2F61C8C /* MagicalRecord.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/MagicalRecord/MagicalRecord-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MagicalRecord/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MagicalRecord/MagicalRecord.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = MagicalRecord; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + CAF16D9285007D82084A44DD154E901D /* AppStore */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 701585C54E5213D7ECF31C02DCAAF0BF /* AFNetworking.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = AFNetworking; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = AppStore; + }; + CC91FBFE32F8EFEB4A4D65DEBAC72DBE /* AppStore */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AC699D0ED6C43F4C0D8CF4F3CFF541A7 /* IOSLinkedInAPI.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IOSLinkedInAPI/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = IOSLinkedInAPI; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = AppStore; + }; + D5F93E22D1EF989F7DBEB7DAE69D9AA8 /* Test Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3133FF43BE7B95ED8A49428A2FA7C973 /* FSHelpers+Swift.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FSHelpers+Swift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/FSHelpers+Swift/FSHelpers+Swift.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = FSHelpers_Swift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Test Staging"; + }; + D9F2AF7AEAFB282BFEBA25076B5E76AD /* AppStore */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 292D9ABFC4DD12BB774CF8B374C37BB2 /* SVProgressHUD.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVProgressHUD/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SVProgressHUD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = AppStore; + }; + DC4E9686C0304F392F957829D1CBDDE9 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AC699D0ED6C43F4C0D8CF4F3CFF541A7 /* IOSLinkedInAPI.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IOSLinkedInAPI/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = IOSLinkedInAPI; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + E46BB8298802CAC72919EBDCCFCCDFF6 /* Test Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 292D9ABFC4DD12BB774CF8B374C37BB2 /* SVProgressHUD.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVProgressHUD/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SVProgressHUD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Test Staging"; + }; + F0D4C710D0D2C2FC866BD1CF03BFEE9B /* AppStore */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_APP_STORE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + STRIP_INSTALLED_PRODUCT = NO; + VALIDATE_PRODUCT = YES; + }; + name = AppStore; + }; + F3511DB8E26EEAFF23A29C42186A9EFD /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 292D9ABFC4DD12BB774CF8B374C37BB2 /* SVProgressHUD.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVProgressHUD/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SVProgressHUD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Test; + }; + F6DA5CD198FD54FE0537147B47DA3D50 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AC699D0ED6C43F4C0D8CF4F3CFF541A7 /* IOSLinkedInAPI.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IOSLinkedInAPI/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = IOSLinkedInAPI; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Test; + }; + F759427D0DCF6F52294802CFD13BA8BC /* AppStore Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 811BE53BC6F16D359DB71B97877D588C /* Pods-Abstract-Authorization-moduleUITests.appstore debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Abstract_Swift_BaseUITests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "AppStore Debug"; + }; + FF53BA03C38EA7ECEC798ABE594F7EFE /* Test Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AC699D0ED6C43F4C0D8CF4F3CFF541A7 /* IOSLinkedInAPI.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IOSLinkedInAPI/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = IOSLinkedInAPI; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Test Staging"; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 01ADEA938D0C4E7FAE6E8FE2072482C0 /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CAF16D9285007D82084A44DD154E901D /* AppStore */, + 1C9390B495C33D1D160F7DEB2A4F60FA /* AppStore Debug */, + 77A8506A5DAA1B15BDC8A82EB60372D6 /* Debug */, + B23C4D3921CBD5B663D68CC019FEEE7B /* Debug Staging */, + 7D0D7656552118F42510B8DAAC83172B /* Release */, + B3EE32CE6141C9E633F4EA32297D0F70 /* Release Staging */, + 0A39D1BDAAC1AE07BFB4C5A625ED4AB0 /* Test */, + 428EED8EC31CEAC4FABEEA4BCB4AFD94 /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 19F093A2F1E32F4AD991FD2B48119215 /* Build configuration list for PBXNativeTarget "Pods-Abstract-Authorization-module" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7065A7AECE491D7761CEF3914FF3871B /* AppStore */, + 60ADB1218CA5D8C269461B988CA8D5CF /* AppStore Debug */, + 4C1768BCB5569E4FD3C9850D89C3A3AD /* Debug */, + 3FE6A59FD59249DDB4F495DF267A7FC5 /* Debug Staging */, + 73A75FC6F2091C974B4ABE6A45806017 /* Release */, + 40A866965860BED60E8017A2F00BE70D /* Release Staging */, + 895D8C66D651358D6D374001312108F8 /* Test */, + 6A6E805F6778FBF4C6D829CEBCBE50CA /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F0D4C710D0D2C2FC866BD1CF03BFEE9B /* AppStore */, + 2738D39F715C27964B6CF654A57063DD /* AppStore Debug */, + 2588EA364419D831347938453F4F6DE5 /* Debug */, + 484A4EB22BAB427BF993CAC393DB466A /* Debug Staging */, + 61AD4929AC3440F8BFA0595E8DCD90C8 /* Release */, + 2A02B07F5832EB297600E9CDD10B9860 /* Release Staging */, + A1A5D2031A42E22E07A4308C343BE7BA /* Test */, + 9474DFB42082CB07CEC55D883103AD12 /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4C9D3BDF290525BD2F60E412404E309F /* Build configuration list for PBXNativeTarget "SVProgressHUD" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D9F2AF7AEAFB282BFEBA25076B5E76AD /* AppStore */, + 78C49DD7538E79BC52E5367C45F44BE6 /* AppStore Debug */, + 3E005ABFE18820BEC48356CA9CE78179 /* Debug */, + A39A38DCB45114A552A2F5E75CA6B87F /* Debug Staging */, + A7C639205D59974B7F3B1A96801E590D /* Release */, + 491A07CE3343F635FCE2E354062C1985 /* Release Staging */, + F3511DB8E26EEAFF23A29C42186A9EFD /* Test */, + E46BB8298802CAC72919EBDCCFCCDFF6 /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7A723A13D64D45399111CBD70B091352 /* Build configuration list for PBXNativeTarget "Pods-Abstract-Authorization-moduleUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1678F19E931D4E4D7FC2C47B7B31DF19 /* AppStore */, + F759427D0DCF6F52294802CFD13BA8BC /* AppStore Debug */, + 43CFB3E1572193B97A4CF59A2A072C67 /* Debug */, + 934B5EE51B79EB521A79E7FD72253DFB /* Debug Staging */, + AB6DA421550D764D5746ABD3378B59C0 /* Release */, + 61910BA3DB09B01F7BD468445326E983 /* Release Staging */, + 529FE271AF5CFA64C3D7A897ADD98B8B /* Test */, + 3B014618B9B56FD30756F99686DCEAC4 /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B784CF01550570EE7FC89BD48233B59B /* Build configuration list for PBXNativeTarget "IOSLinkedInAPI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CC91FBFE32F8EFEB4A4D65DEBAC72DBE /* AppStore */, + 61093934E94B60A97469FD8C4FD5E8BD /* AppStore Debug */, + 4BB352EFDD82973944CCCEC843C6FF38 /* Debug */, + A623E0D4246FB285D45D7056DE8BEF37 /* Debug Staging */, + DC4E9686C0304F392F957829D1CBDDE9 /* Release */, + 9DD3AFDC254C8C42F3AB621B8D4A9CC8 /* Release Staging */, + F6DA5CD198FD54FE0537147B47DA3D50 /* Test */, + FF53BA03C38EA7ECEC798ABE594F7EFE /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C3DD98F93CFF0CDAF92F03F2D77E6BF2 /* Build configuration list for PBXNativeTarget "MagicalRecord" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4ADFEE8ACAF960F0E5D9EE1F86F34D19 /* AppStore */, + 8C3696E19C86C2E023AAFACE81954EAF /* AppStore Debug */, + 2279A3D4D32DE8F476DD489E07DA1902 /* Debug */, + A2BAF3B15594C34CC86045C1496BD7A6 /* Debug Staging */, + C8B834C192FACF5102D0CB7466D8F06A /* Release */, + 907BE8B5ECDF9EDBF9FE157F678982E4 /* Release Staging */, + 863DE222943D6BCC386CDF950B2229BD /* Test */, + 4ACEEECF5516800D3561A3BAE08BE2E7 /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D5F4C9BC4C356AA5D5B8E66E0857C973 /* Build configuration list for PBXNativeTarget "Pods-Abstract-Authorization-moduleTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5A249446DADB65AA964875DCB21B77FE /* AppStore */, + 1407DDF5E0E42729A53ADA242796BCF7 /* AppStore Debug */, + 758FCECF6C12C2E26DD0AA88BF533CA2 /* Debug */, + AAA13BE2DD9C1AF5C7C204393A01BBFC /* Debug Staging */, + 1BB2751AF6947A28DDBAE49AF8DF84EC /* Release */, + 0128D348FB650EA1FEC367BFFE6DA5BF /* Release Staging */, + 395A25B78A2DDA0C58C6180BC0CC5DDA /* Test */, + 2C38658C68BD795B171B6CB47C2A3B20 /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E2C511AB70D66145EB013763538DA83C /* Build configuration list for PBXNativeTarget "FSHelpers+Swift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9F423C956C5FFA0400FABD0DBD1B501D /* AppStore */, + 168E9AA95045D7B7C44EB0E5D467FBB8 /* AppStore Debug */, + 504AAD2657ED5987773B687F6E3DAA02 /* Debug */, + B78C1B4ED517DDA346611D2129614421 /* Debug Staging */, + 2A2EB7F2E5F5C4CB804D790FD114FB8B /* Release */, + 3C0BEE0C5F4BE42FA064CC3A87933959 /* Release Staging */, + 2AE764FF64DD2B563D3A23EA96F72A63 /* Test */, + D5F93E22D1EF989F7DBEB7DAE69D9AA8 /* Test Staging */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; +} diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/LICENSE.txt b/Autorization:Registration Example/Pods/SVProgressHUD/LICENSE.txt new file mode 100644 index 0000000..7c5f87f --- /dev/null +++ b/Autorization:Registration Example/Pods/SVProgressHUD/LICENSE.txt @@ -0,0 +1,26 @@ +Copyright (c) 2011-2016 Sam Vermette, Tobias Tiemerding and contributors. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +A different license may apply to other resources included in this package, +including Freepik Icons. Please consult their +respective headers for the terms of their individual licenses. diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/README.md b/Autorization:Registration Example/Pods/SVProgressHUD/README.md new file mode 100644 index 0000000..753db7e --- /dev/null +++ b/Autorization:Registration Example/Pods/SVProgressHUD/README.md @@ -0,0 +1,196 @@ +# SVProgressHUD + +![Pod Version](https://img.shields.io/cocoapods/v/SVProgressHUD.svg?style=flat) +![Pod License](https://img.shields.io/cocoapods/l/SVProgressHUD.svg?style=flat) +![Pod Platform](https://img.shields.io/cocoapods/p/SVProgressHUD.svg?style=flat) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) + +`SVProgressHUD` is a clean and easy-to-use HUD meant to display the progress of an ongoing task on iOS and tvOS. + +![SVProgressHUD](http://f.cl.ly/items/2G1F1Z0M0k0h2U3V1p39/SVProgressHUD.gif) + +## Demo + +Try `SVProgressHUD` on [Appetize.io](https://appetize.io/app/p8r2cvy8kq74x7q7tjqf5gyatr). + +## Installation + +### From CocoaPods + +[CocoaPods](http://cocoapods.org) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries like `SVProgressHUD` in your projects. First, add the following line to your [Podfile](http://guides.cocoapods.org/using/using-cocoapods.html): + +```ruby +pod 'SVProgressHUD' +``` + +If you want to use the latest features of `SVProgressHUD` use normal external source dependencies. + +```ruby +pod 'SVProgressHUD', :git => 'https://github.com/SVProgressHUD/SVProgressHUD.git' +``` + +This pulls from the `master` branch directly. We are usually careful about what we push there and this is the version we use ourselves in all of our projects. + +Second, install `SVProgressHUD` into your project: + +```ruby +pod install +``` + +### Carthage + +[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. + +You can install Carthage with [Homebrew](http://brew.sh/) using the following command: + +```bash +$ brew update +$ brew install carthage +``` + +To integrate `SVProgressHUD` into your Xcode project using Carthage, specify it in your `Cartfile`: + +```ogdl +github "SVProgressHUD/SVProgressHUD" +``` + +Run `carthage update` to build the framework and drag the built `SVProgressHUD.framework` (in Carthage/Build/iOS folder) into your Xcode project (Linked Frameworks and Libraries in `Targets`). + + +### Manually + +* Drag the `SVProgressHUD/SVProgressHUD` folder into your project. +* Take care that `SVProgressHUD.bundle` is added to `Targets->Build Phases->Copy Bundle Resources`. +* Add the **QuartzCore** framework to your project. + +## Usage + +(see sample Xcode project in `/Demo`) + +`SVProgressHUD` is created as a singleton (i.e. it doesn't need to be explicitly allocated and instantiated; you directly call `[SVProgressHUD method]`). + +**Use `SVProgressHUD` wisely! Only use it if you absolutely need to perform a task before taking the user forward. Bad use case examples: pull to refresh, infinite scrolling, sending message.** + +Using `SVProgressHUD` in your app will usually look as simple as this (using Grand Central Dispatch): + +```objective-c +[SVProgressHUD show]; +dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + // time-consuming task + dispatch_async(dispatch_get_main_queue(), ^{ + [SVProgressHUD dismiss]; + }); +}); +``` + +### Showing the HUD + +You can show the status of indeterminate tasks using one of the following: + +```objective-c ++ (void)show; ++ (void)showWithStatus:(NSString*)string; +``` + +If you'd like the HUD to reflect the progress of a task, use one of these: + +```objective-c ++ (void)showProgress:(CGFloat)progress; ++ (void)showProgress:(CGFloat)progress status:(NSString*)status; +``` + +### Dismissing the HUD + +The HUD can be dismissed using: + +```objective-c ++ (void)dismiss; ++ (void)dismissWithDelay:(NSTimeInterval)delay; +``` + +If you'd like to stack HUDs, you can balance out every show call using: + +```objective-c ++ (void)popActivity; +``` + +The HUD will get dismissed once the `popActivity` calls will match the number of show calls. + +Or show a confirmation glyph before before getting dismissed a little bit later. The display time depends on `minimumDismissTimeInterval` and the length of the given string. + +```objective-c ++ (void)showInfoWithStatus:(NSString*)string; ++ (void)showSuccessWithStatus:(NSString*)string; ++ (void)showErrorWithStatus:(NSString*)string; ++ (void)showImage:(UIImage*)image status:(NSString*)string; +``` + +## Customization + +`SVProgressHUD` can be customized via the following methods: + +```objective-c ++ (void)setDefaultStyle:(SVProgressHUDStyle)style; // default is SVProgressHUDStyleLight ++ (void)setDefaultMaskType:(SVProgressHUDMaskType)maskType; // default is SVProgressHUDMaskTypeNone ++ (void)setDefaultAnimationType:(SVProgressHUDAnimationType)type; // default is SVProgressHUDAnimationTypeFlat ++ (void)setMinimumSize:(CGSize)minimumSize; // default is CGSizeZero, can be used to avoid resizing for a larger message ++ (void)setRingThickness:(CGFloat)width; // default is 2 pt ++ (void)setRingRadius:(CGFloat)radius; // default is 18 pt ++ (void)setRingNoTextRadius:(CGFloat)radius; // default is 24 pt ++ (void)setCornerRadius:(CGFloat)cornerRadius; // default is 14 pt ++ (void)setFont:(UIFont*)font; // default is [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline] ++ (void)setForegroundColor:(UIColor*)color; // default is [UIColor blackColor], only used for SVProgressHUDStyleCustom ++ (void)setBackgroundColor:(UIColor*)color; // default is [UIColor whiteColor], only used for SVProgressHUDStyleCustom ++ (void)setBackgroundLayerColor:(UIColor*)color; // default is [UIColor colorWithWhite:0 alpha:0.4], only used for SVProgressHUDMaskTypeCustom ++ (void)setInfoImage:(UIImage*)image; // default is the bundled info image provided by Freepik ++ (void)setSuccessImage:(UIImage*)image; // default is bundled success image from Freepik ++ (void)setErrorImage:(UIImage*)image; // default is bundled error image from Freepik ++ (void)setViewForExtension:(UIView*)view; // default is nil, only used if #define SV_APP_EXTENSIONS is set ++ (void)setMinimumDismissTimeInterval:(NSTimeInterval)interval; // default is 5.0 seconds ++ (void)setFadeInAnimationDuration:(NSTimeInterval)duration; // default is 0.15 seconds ++ (void)setFadeOutAnimationDuration:(NSTimeInterval)duration; // default is 0.15 seconds +``` + +Additionally `SVProgressHUD` supports the `UIAppearance` protocol for most of the above methods. + +### Hint + +As standard `SVProgressHUD` offers two preconfigured styles: + +* `SVProgressHUDStyleLight`: White background with black spinner and text +* `SVProgressHUDStyleDark`: Black background with white spinner and text + +If you want to use custom colors with `setForegroundColor` and `setBackgroundColor:` don't forget to set `SVProgressHUDStyleCustom` via `setDefaultStyle:`. + +## Notifications + +`SVProgressHUD` posts four notifications via `NSNotificationCenter` in response to being shown/dismissed: +* `SVProgressHUDWillAppearNotification` when the show animation starts +* `SVProgressHUDDidAppearNotification` when the show animation completes +* `SVProgressHUDWillDisappearNotification` when the dismiss animation starts +* `SVProgressHUDDidDisappearNotification` when the dismiss animation completes + +Each notification passes a `userInfo` dictionary holding the HUD's status string (if any), retrievable via `SVProgressHUDStatusUserInfoKey`. + +`SVProgressHUD` also posts `SVProgressHUDDidReceiveTouchEventNotification` when users touch on the overall screen or `SVProgressHUDDidTouchDownInsideNotification` when a user touches on the HUD directly. For this notifications `userInfo` is not passed but the object parameter contains the `UIEvent` that related to the touch. + +## App Extensions + +When using `SVProgressHUD` in an App Extension, `#define SV_APP_EXTENSIONS` to avoid using unavailable APIs. Additionally call `setViewForExtension:` from your extensions view controller with `self.view`. + +## Contributing to this project + +If you have feature requests or bug reports, feel free to help out by sending pull requests or by [creating new issues](https://github.com/SVProgressHUD/SVProgressHUD/issues/new). Please take a moment to +review the guidelines written by [Nicolas Gallagher](https://github.com/necolas): + +* [Bug reports](https://github.com/necolas/issue-guidelines/blob/master/CONTRIBUTING.md#bugs) +* [Feature requests](https://github.com/necolas/issue-guidelines/blob/master/CONTRIBUTING.md#features) +* [Pull requests](https://github.com/necolas/issue-guidelines/blob/master/CONTRIBUTING.md#pull-requests) + +## License + +`SVProgressHUD` is distributed under the terms and conditions of the [MIT license](https://github.com/SVProgressHUD/SVProgressHUD/blob/master/LICENSE.txt). The success, error and info icons are made by [Freepik](http://www.freepik.com) from [Flaticon](http://www.flaticon.com) and are licensed under [Creative Commons BY 3.0](http://creativecommons.org/licenses/by/3.0/). + +## Credits + +`SVProgressHUD` is brought to you by [Sam Vermette](http://samvermette.com), [Tobias Tiemerding](http://tiemerding.com) and [contributors to the project](https://github.com/SVProgressHUD/SVProgressHUD/contributors). If you're using `SVProgressHUD` in your project, attribution would be very appreciated. diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.h b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.h new file mode 100644 index 0000000..d6f1eaf --- /dev/null +++ b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.h @@ -0,0 +1,17 @@ +// +// SVIndefiniteAnimatedView.h +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD +// +// Copyright (c) 2014-2016 Guillaume Campagna. All rights reserved. +// + +#import + +@interface SVIndefiniteAnimatedView : UIView + +@property (nonatomic, assign) CGFloat strokeThickness; +@property (nonatomic, assign) CGFloat radius; +@property (nonatomic, strong) UIColor *strokeColor; + +@end + diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.m b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.m new file mode 100644 index 0000000..235a0f9 --- /dev/null +++ b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.m @@ -0,0 +1,137 @@ +// +// SVIndefiniteAnimatedView.m +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD +// +// Copyright (c) 2014-2016 Guillaume Campagna. All rights reserved. +// + +#import "SVIndefiniteAnimatedView.h" +#import "SVProgressHUD.h" + +@interface SVIndefiniteAnimatedView () + +@property (nonatomic, strong) CAShapeLayer *indefiniteAnimatedLayer; + +@end + +@implementation SVIndefiniteAnimatedView + +- (void)willMoveToSuperview:(UIView*)newSuperview { + if (newSuperview) { + [self layoutAnimatedLayer]; + } else { + [_indefiniteAnimatedLayer removeFromSuperlayer]; + _indefiniteAnimatedLayer = nil; + } +} + +- (void)layoutAnimatedLayer { + CALayer *layer = self.indefiniteAnimatedLayer; + [self.layer addSublayer:layer]; + + CGFloat widthDiff = CGRectGetWidth(self.bounds) - CGRectGetWidth(layer.bounds); + CGFloat heightDiff = CGRectGetHeight(self.bounds) - CGRectGetHeight(layer.bounds); + layer.position = CGPointMake(CGRectGetWidth(self.bounds) - CGRectGetWidth(layer.bounds) / 2 - widthDiff / 2, CGRectGetHeight(self.bounds) - CGRectGetHeight(layer.bounds) / 2 - heightDiff / 2); +} + +- (CAShapeLayer*)indefiniteAnimatedLayer { + if(!_indefiniteAnimatedLayer) { + CGPoint arcCenter = CGPointMake(self.radius+self.strokeThickness/2+5, self.radius+self.strokeThickness/2+5); + UIBezierPath* smoothedPath = [UIBezierPath bezierPathWithArcCenter:arcCenter radius:self.radius startAngle:(CGFloat) (M_PI*3/2) endAngle:(CGFloat) (M_PI/2+M_PI*5) clockwise:YES]; + + _indefiniteAnimatedLayer = [CAShapeLayer layer]; + _indefiniteAnimatedLayer.contentsScale = [[UIScreen mainScreen] scale]; + _indefiniteAnimatedLayer.frame = CGRectMake(0.0f, 0.0f, arcCenter.x*2, arcCenter.y*2); + _indefiniteAnimatedLayer.fillColor = [UIColor clearColor].CGColor; + _indefiniteAnimatedLayer.strokeColor = self.strokeColor.CGColor; + _indefiniteAnimatedLayer.lineWidth = self.strokeThickness; + _indefiniteAnimatedLayer.lineCap = kCALineCapRound; + _indefiniteAnimatedLayer.lineJoin = kCALineJoinBevel; + _indefiniteAnimatedLayer.path = smoothedPath.CGPath; + + CALayer *maskLayer = [CALayer layer]; + + NSBundle *bundle = [NSBundle bundleForClass:[SVProgressHUD class]]; + NSURL *url = [bundle URLForResource:@"SVProgressHUD" withExtension:@"bundle"]; + NSBundle *imageBundle = [NSBundle bundleWithURL:url]; + + NSString *path = [imageBundle pathForResource:@"angle-mask" ofType:@"png"]; + + maskLayer.contents = (__bridge id)[[UIImage imageWithContentsOfFile:path] CGImage]; + maskLayer.frame = _indefiniteAnimatedLayer.bounds; + _indefiniteAnimatedLayer.mask = maskLayer; + + NSTimeInterval animationDuration = 1; + CAMediaTimingFunction *linearCurve = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; + + CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; + animation.fromValue = (id) 0; + animation.toValue = @(M_PI*2); + animation.duration = animationDuration; + animation.timingFunction = linearCurve; + animation.removedOnCompletion = NO; + animation.repeatCount = INFINITY; + animation.fillMode = kCAFillModeForwards; + animation.autoreverses = NO; + [_indefiniteAnimatedLayer.mask addAnimation:animation forKey:@"rotate"]; + + CAAnimationGroup *animationGroup = [CAAnimationGroup animation]; + animationGroup.duration = animationDuration; + animationGroup.repeatCount = INFINITY; + animationGroup.removedOnCompletion = NO; + animationGroup.timingFunction = linearCurve; + + CABasicAnimation *strokeStartAnimation = [CABasicAnimation animationWithKeyPath:@"strokeStart"]; + strokeStartAnimation.fromValue = @0.015; + strokeStartAnimation.toValue = @0.515; + + CABasicAnimation *strokeEndAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; + strokeEndAnimation.fromValue = @0.485; + strokeEndAnimation.toValue = @0.985; + + animationGroup.animations = @[strokeStartAnimation, strokeEndAnimation]; + [_indefiniteAnimatedLayer addAnimation:animationGroup forKey:@"progress"]; + + } + return _indefiniteAnimatedLayer; +} + +- (void)setFrame:(CGRect)frame { + if(!CGRectEqualToRect(frame, super.frame)) { + [super setFrame:frame]; + + if(self.superview) { + [self layoutAnimatedLayer]; + } + } + +} + +- (void)setRadius:(CGFloat)radius { + if(radius != _radius) { + _radius = radius; + + [_indefiniteAnimatedLayer removeFromSuperlayer]; + _indefiniteAnimatedLayer = nil; + + if(self.superview) { + [self layoutAnimatedLayer]; + } + } +} + +- (void)setStrokeColor:(UIColor*)strokeColor { + _strokeColor = strokeColor; + _indefiniteAnimatedLayer.strokeColor = strokeColor.CGColor; +} + +- (void)setStrokeThickness:(CGFloat)strokeThickness { + _strokeThickness = strokeThickness; + _indefiniteAnimatedLayer.lineWidth = _strokeThickness; +} + +- (CGSize)sizeThatFits:(CGSize)size { + return CGSizeMake((self.radius+self.strokeThickness/2+5)*2, (self.radius+self.strokeThickness/2+5)*2); +} + +@end diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.h b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.h new file mode 100644 index 0000000..6b4d54a --- /dev/null +++ b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.h @@ -0,0 +1,17 @@ +// +// SVProgressAnimatedView.h +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD +// +// Copyright (c) 2016 Tobias Tiemerding. All rights reserved. +// + +#import + +@interface SVProgressAnimatedView : UIView + +@property (nonatomic, assign) CGFloat radius; +@property (nonatomic, assign) CGFloat strokeThickness; +@property (nonatomic, strong) UIColor *strokeColor; +@property (nonatomic, assign) CGFloat strokeEnd; + +@end diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.m b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.m new file mode 100644 index 0000000..3adb3c6 --- /dev/null +++ b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.m @@ -0,0 +1,98 @@ +// +// SVProgressAnimatedView.m +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD +// +// Copyright (c) 2016 Tobias Tiemerding. All rights reserved. +// + +#import "SVProgressAnimatedView.h" + +@interface SVProgressAnimatedView () + +@property (nonatomic, strong) CAShapeLayer *ringAnimatedLayer; + +@end + +@implementation SVProgressAnimatedView + +- (void)willMoveToSuperview:(UIView*)newSuperview { + if (newSuperview) { + [self layoutAnimatedLayer]; + } else { + [_ringAnimatedLayer removeFromSuperlayer]; + _ringAnimatedLayer = nil; + } +} + +- (void)layoutAnimatedLayer { + CALayer *layer = self.ringAnimatedLayer; + [self.layer addSublayer:layer]; + + CGFloat widthDiff = CGRectGetWidth(self.bounds) - CGRectGetWidth(layer.bounds); + CGFloat heightDiff = CGRectGetHeight(self.bounds) - CGRectGetHeight(layer.bounds); + layer.position = CGPointMake(CGRectGetWidth(self.bounds) - CGRectGetWidth(layer.bounds) / 2 - widthDiff / 2, CGRectGetHeight(self.bounds) - CGRectGetHeight(layer.bounds) / 2 - heightDiff / 2); +} + +- (CAShapeLayer*)ringAnimatedLayer { + if(!_ringAnimatedLayer) { + CGPoint arcCenter = CGPointMake(self.radius+self.strokeThickness/2+5, self.radius+self.strokeThickness/2+5); + UIBezierPath* smoothedPath = [UIBezierPath bezierPathWithArcCenter:arcCenter radius:self.radius startAngle:(CGFloat)-M_PI_2 endAngle:(CGFloat) (M_PI + M_PI_2) clockwise:YES]; + + _ringAnimatedLayer = [CAShapeLayer layer]; + _ringAnimatedLayer.contentsScale = [[UIScreen mainScreen] scale]; + _ringAnimatedLayer.frame = CGRectMake(0.0f, 0.0f, arcCenter.x*2, arcCenter.y*2); + _ringAnimatedLayer.fillColor = [UIColor clearColor].CGColor; + _ringAnimatedLayer.strokeColor = self.strokeColor.CGColor; + _ringAnimatedLayer.lineWidth = self.strokeThickness; + _ringAnimatedLayer.lineCap = kCALineCapRound; + _ringAnimatedLayer.lineJoin = kCALineJoinBevel; + _ringAnimatedLayer.path = smoothedPath.CGPath; + } + return _ringAnimatedLayer; +} + +- (void)setFrame:(CGRect)frame { + if(!CGRectEqualToRect(frame, super.frame)) { + [super setFrame:frame]; + + if(self.superview) { + [self layoutAnimatedLayer]; + } + } + +} + +- (void)setRadius:(CGFloat)radius { + if(radius != _radius) { + _radius = radius; + + [_ringAnimatedLayer removeFromSuperlayer]; + _ringAnimatedLayer = nil; + + if(self.superview) { + [self layoutAnimatedLayer]; + } + } +} + +- (void)setStrokeColor:(UIColor*)strokeColor { + _strokeColor = strokeColor; + _ringAnimatedLayer.strokeColor = strokeColor.CGColor; +} + +- (void)setStrokeThickness:(CGFloat)strokeThickness { + _strokeThickness = strokeThickness; + _ringAnimatedLayer.lineWidth = _strokeThickness; +} + +- (void)setStrokeEnd:(CGFloat)strokeEnd { + _strokeEnd = strokeEnd; + _ringAnimatedLayer.strokeEnd = _strokeEnd; +} + + +- (CGSize)sizeThatFits:(CGSize)size { + return CGSizeMake((self.radius+self.strokeThickness/2+5)*2, (self.radius+self.strokeThickness/2+5)*2); +} + +@end diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask.png b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask.png new file mode 100644 index 0000000..0150a03 Binary files /dev/null and b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask.png differ diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@2x.png b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@2x.png new file mode 100644 index 0000000..9a302b6 Binary files /dev/null and b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@2x.png differ diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@3x.png b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@3x.png new file mode 100644 index 0000000..d07f3ce Binary files /dev/null and b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@3x.png differ diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error.png b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error.png new file mode 100644 index 0000000..a57c8e4 Binary files /dev/null and b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error.png differ diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@2x.png b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@2x.png new file mode 100644 index 0000000..aaf6798 Binary files /dev/null and b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@2x.png differ diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@3x.png b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@3x.png new file mode 100644 index 0000000..c92518f Binary files /dev/null and b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@3x.png differ diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info.png b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info.png new file mode 100644 index 0000000..a3a1f75 Binary files /dev/null and b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info.png differ diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@2x.png b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@2x.png new file mode 100644 index 0000000..1b333e7 Binary files /dev/null and b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@2x.png differ diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@3x.png b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@3x.png new file mode 100644 index 0000000..d56aa0c Binary files /dev/null and b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@3x.png differ diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success.png b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success.png new file mode 100644 index 0000000..44769d0 Binary files /dev/null and b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success.png differ diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@2x.png b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@2x.png new file mode 100644 index 0000000..a9d1653 Binary files /dev/null and b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@2x.png differ diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@3x.png b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@3x.png new file mode 100644 index 0000000..42bad9b Binary files /dev/null and b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@3x.png differ diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h new file mode 100644 index 0000000..fdd03aa --- /dev/null +++ b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h @@ -0,0 +1,131 @@ +// +// SVProgressHUD.h +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD +// +// Copyright (c) 2011-2016 Sam Vermette and contributors. All rights reserved. +// + +#import +#import + +#if __IPHONE_OS_VERSION_MAX_ALLOWED < 70000 + +#define UI_APPEARANCE_SELECTOR + +#endif + +extern NSString * const SVProgressHUDDidReceiveTouchEventNotification; +extern NSString * const SVProgressHUDDidTouchDownInsideNotification; +extern NSString * const SVProgressHUDWillDisappearNotification; +extern NSString * const SVProgressHUDDidDisappearNotification; +extern NSString * const SVProgressHUDWillAppearNotification; +extern NSString * const SVProgressHUDDidAppearNotification; + +extern NSString * const SVProgressHUDStatusUserInfoKey; + +typedef NS_ENUM(NSInteger, SVProgressHUDStyle) { + SVProgressHUDStyleLight, // default style, white HUD with black text, HUD background will be blurred on iOS 8 and above + SVProgressHUDStyleDark, // black HUD and white text, HUD background will be blurred on iOS 8 and above + SVProgressHUDStyleCustom // uses the fore- and background color properties +}; + +typedef NS_ENUM(NSUInteger, SVProgressHUDMaskType) { + SVProgressHUDMaskTypeNone = 1, // default mask type, allow user interactions while HUD is displayed + SVProgressHUDMaskTypeClear, // don't allow user interactions + SVProgressHUDMaskTypeBlack, // don't allow user interactions and dim the UI in the back of the HUD, as on iOS 7 and above + SVProgressHUDMaskTypeGradient, // don't allow user interactions and dim the UI with a a-la UIAlertView background gradient, as on iOS 6 + SVProgressHUDMaskTypeCustom // don't allow user interactions and dim the UI in the back of the HUD with a custom color +}; + +typedef NS_ENUM(NSUInteger, SVProgressHUDAnimationType) { + SVProgressHUDAnimationTypeFlat, // default animation type, custom flat animation (indefinite animated ring) + SVProgressHUDAnimationTypeNative // iOS native UIActivityIndicatorView +}; + +@interface SVProgressHUD : UIView + +#pragma mark - Customization + +@property (assign, nonatomic) SVProgressHUDStyle defaultStyle UI_APPEARANCE_SELECTOR; // default is SVProgressHUDStyleLight +@property (assign, nonatomic) SVProgressHUDMaskType defaultMaskType UI_APPEARANCE_SELECTOR; // default is SVProgressHUDMaskTypeNone +@property (assign, nonatomic) SVProgressHUDAnimationType defaultAnimationType UI_APPEARANCE_SELECTOR; // default is SVProgressHUDAnimationTypeFlat +@property (assign, nonatomic) CGSize minimumSize UI_APPEARANCE_SELECTOR; // default is CGSizeZero, can be used to avoid resizing for a larger message +@property (assign, nonatomic) CGFloat ringThickness UI_APPEARANCE_SELECTOR; // default is 2 pt +@property (assign, nonatomic) CGFloat ringRadius UI_APPEARANCE_SELECTOR; // default is 18 pt +@property (assign, nonatomic) CGFloat ringNoTextRadius UI_APPEARANCE_SELECTOR; // default is 24 pt +@property (assign, nonatomic) CGFloat cornerRadius UI_APPEARANCE_SELECTOR; // default is 14 pt +@property (strong, nonatomic) UIFont *font UI_APPEARANCE_SELECTOR; // default is [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline] +@property (strong, nonatomic) UIColor *backgroundColor UI_APPEARANCE_SELECTOR; // default is [UIColor whiteColor] +@property (strong, nonatomic) UIColor *foregroundColor UI_APPEARANCE_SELECTOR; // default is [UIColor blackColor] +@property (strong, nonatomic) UIColor *backgroundLayerColor UI_APPEARANCE_SELECTOR; // default is [UIColor colorWithWhite:0 alpha:0.4] +@property (strong, nonatomic) UIImage *infoImage UI_APPEARANCE_SELECTOR; // default is the bundled info image provided by Freepik +@property (strong, nonatomic) UIImage *successImage UI_APPEARANCE_SELECTOR; // default is the bundled success image provided by Freepik +@property (strong, nonatomic) UIImage *errorImage UI_APPEARANCE_SELECTOR; // default is the bundled error image provided by Freepik +@property (strong, nonatomic) UIView *viewForExtension UI_APPEARANCE_SELECTOR; // default is nil, only used if #define SV_APP_EXTENSIONS is set +@property (assign, nonatomic) NSTimeInterval minimumDismissTimeInterval; // default is 5.0 seconds + +@property (assign, nonatomic) UIOffset offsetFromCenter UI_APPEARANCE_SELECTOR; // default is 0, 0 + +@property (assign, nonatomic) NSTimeInterval fadeInAnimationDuration; // default is 0.15 +@property (assign, nonatomic) NSTimeInterval fadeOutAnimationDuration; // default is 0.15 + + ++ (void)setDefaultStyle:(SVProgressHUDStyle)style; // default is SVProgressHUDStyleLight ++ (void)setDefaultMaskType:(SVProgressHUDMaskType)maskType; // default is SVProgressHUDMaskTypeNone ++ (void)setDefaultAnimationType:(SVProgressHUDAnimationType)type; // default is SVProgressHUDAnimationTypeFlat ++ (void)setMinimumSize:(CGSize)minimumSize; // default is CGSizeZero, can be used to avoid resizing for a larger message ++ (void)setRingThickness:(CGFloat)ringThickness; // default is 2 pt ++ (void)setRingRadius:(CGFloat)radius; // default is 18 pt ++ (void)setRingNoTextRadius:(CGFloat)radius; // default is 24 pt ++ (void)setCornerRadius:(CGFloat)cornerRadius; // default is 14 pt ++ (void)setFont:(UIFont*)font; // default is [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline] ++ (void)setForegroundColor:(UIColor*)color; // default is [UIColor blackColor], only used for SVProgressHUDStyleCustom ++ (void)setBackgroundColor:(UIColor*)color; // default is [UIColor whiteColor], only used for SVProgressHUDStyleCustom ++ (void)setBackgroundLayerColor:(UIColor*)color; // default is [UIColor colorWithWhite:0 alpha:0.5], only used for SVProgressHUDMaskTypeBlack ++ (void)setInfoImage:(UIImage*)image; // default is the bundled info image provided by Freepik ++ (void)setSuccessImage:(UIImage*)image; // default is the bundled success image provided by Freepik ++ (void)setErrorImage:(UIImage*)image; // default is the bundled error image provided by Freepik ++ (void)setViewForExtension:(UIView*)view; // default is nil, only used if #define SV_APP_EXTENSIONS is set ++ (void)setMinimumDismissTimeInterval:(NSTimeInterval)interval; // default is 5.0 seconds ++ (void)setFadeInAnimationDuration:(NSTimeInterval)duration; // default is 0.15 seconds ++ (void)setFadeOutAnimationDuration:(NSTimeInterval)duration; // default is 0.15 seconds + +#pragma mark - Show Methods + ++ (void)show; ++ (void)showWithMaskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use show and setDefaultMaskType: instead."))); ++ (void)showWithStatus:(NSString*)status; ++ (void)showWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use showWithStatus: and setDefaultMaskType: instead."))); + ++ (void)showProgress:(float)progress; ++ (void)showProgress:(float)progress maskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use showProgress: and setDefaultMaskType: instead."))); ++ (void)showProgress:(float)progress status:(NSString*)status; ++ (void)showProgress:(float)progress status:(NSString*)status maskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use showProgress:status: and setDefaultMaskType: instead."))); + ++ (void)setStatus:(NSString*)status; // change the HUD loading status while it's showing + +// stops the activity indicator, shows a glyph + status, and dismisses the HUD a little bit later ++ (void)showInfoWithStatus:(NSString*)status; ++ (void)showInfoWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use showInfoWithStatus: and setDefaultMaskType: instead."))); ++ (void)showSuccessWithStatus:(NSString*)status; ++ (void)showSuccessWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use showSuccessWithStatus: and setDefaultMaskType: instead."))); ++ (void)showErrorWithStatus:(NSString*)status; ++ (void)showErrorWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use showErrorWithStatus: and setDefaultMaskType: instead."))); + +// shows a image + status, use 28x28 white PNGs ++ (void)showImage:(UIImage*)image status:(NSString*)status; ++ (void)showImage:(UIImage*)image status:(NSString*)status maskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use showImage:status: and setDefaultMaskType: instead."))); + ++ (void)setOffsetFromCenter:(UIOffset)offset; ++ (void)resetOffsetFromCenter; + ++ (void)popActivity; // decrease activity count, if activity count == 0 the HUD is dismissed ++ (void)dismiss; ++ (void)dismissWithDelay:(NSTimeInterval)delay; + ++ (BOOL)isVisible; + ++ (NSTimeInterval)displayDurationForString:(NSString*)string; + +@end + diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.m b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.m new file mode 100644 index 0000000..8441cb7 --- /dev/null +++ b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.m @@ -0,0 +1,1403 @@ +// +// SVProgressHUD.h +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD +// +// Copyright (c) 2011-2016 Sam Vermette and contributors. All rights reserved. +// + +#if !__has_feature(objc_arc) +#error SVProgressHUD is ARC only. Either turn on ARC for the project or use -fobjc-arc flag +#endif + +#import "SVProgressHUD.h" +#import "SVIndefiniteAnimatedView.h" +#import "SVProgressAnimatedView.h" +#import "SVRadialGradientLayer.h" + +NSString * const SVProgressHUDDidReceiveTouchEventNotification = @"SVProgressHUDDidReceiveTouchEventNotification"; +NSString * const SVProgressHUDDidTouchDownInsideNotification = @"SVProgressHUDDidTouchDownInsideNotification"; +NSString * const SVProgressHUDWillDisappearNotification = @"SVProgressHUDWillDisappearNotification"; +NSString * const SVProgressHUDDidDisappearNotification = @"SVProgressHUDDidDisappearNotification"; +NSString * const SVProgressHUDWillAppearNotification = @"SVProgressHUDWillAppearNotification"; +NSString * const SVProgressHUDDidAppearNotification = @"SVProgressHUDDidAppearNotification"; + +NSString * const SVProgressHUDStatusUserInfoKey = @"SVProgressHUDStatusUserInfoKey"; + +static const CGFloat SVProgressHUDParallaxDepthPoints = 10; +static const CGFloat SVProgressHUDUndefinedProgress = -1; +static const CGFloat SVProgressHUDDefaultAnimationDuration = 0.15; + +@interface SVProgressHUD () + +@property (nonatomic, strong, readonly) NSTimer *fadeOutTimer; +@property (nonatomic, readonly, getter = isClear) BOOL clear; + +@property (nonatomic, strong) UIControl *overlayView; +@property (nonatomic, strong) UIView *hudView; + +@property (nonatomic, strong) UILabel *statusLabel; +@property (nonatomic, strong) UIImageView *imageView; +@property (nonatomic, strong) UIView *indefiniteAnimatedView; +@property (nonatomic, strong) SVProgressAnimatedView *ringView; +@property (nonatomic, strong) SVProgressAnimatedView *backgroundRingView; +@property (nonatomic, strong) CALayer *backgroundLayer; + +@property (nonatomic, readwrite) CGFloat progress; +@property (nonatomic, readwrite) NSUInteger activityCount; + +@property (nonatomic, readonly) CGFloat visibleKeyboardHeight; + +- (void)updateHUDFrame; +- (void)updateMask; +- (void)updateBlurBounds; +#if TARGET_OS_IOS +- (void)updateMotionEffectForOrientation:(UIInterfaceOrientation)orientation; +#endif +- (void)updateMotionEffectForXMotionEffectType:(UIInterpolatingMotionEffectType)xMotionEffectType yMotionEffectType:(UIInterpolatingMotionEffectType)yMotionEffectType; +- (void)updateViewHierachy; + +- (void)setStatus:(NSString*)status; +- (void)setFadeOutTimer:(NSTimer*)timer; + +- (void)registerNotifications; +- (NSDictionary*)notificationUserInfo; + +- (void)positionHUD:(NSNotification*)notification; +- (void)moveToPoint:(CGPoint)newCenter rotateAngle:(CGFloat)angle; + +- (void)overlayViewDidReceiveTouchEvent:(id)sender forEvent:(UIEvent*)event; + +- (void)showProgress:(float)progress status:(NSString*)status; +- (void)showImage:(UIImage*)image status:(NSString*)status duration:(NSTimeInterval)duration; +- (void)showStatus:(NSString*)status; + +- (void)dismiss; +- (void)dismissWithDelay:(NSTimeInterval)delay; + +- (UIView*)indefiniteAnimatedView; +- (SVProgressAnimatedView*)ringView; +- (SVProgressAnimatedView*)backgroundRingView; + +- (void)cancelRingLayerAnimation; +- (void)cancelIndefiniteAnimatedViewAnimation; + +- (UIColor*)foregroundColorForStyle; +- (UIColor*)backgroundColorForStyle; +- (UIImage*)image:(UIImage*)image withTintColor:(UIColor*)color; + +@end + + +@implementation SVProgressHUD { + BOOL _isInitializing; +} + ++ (SVProgressHUD*)sharedView { + static dispatch_once_t once; + + static SVProgressHUD *sharedView; +#if !defined(SV_APP_EXTENSIONS) + dispatch_once(&once, ^{ sharedView = [[self alloc] initWithFrame:[[[UIApplication sharedApplication] delegate] window].bounds]; }); +#else + dispatch_once(&once, ^{ sharedView = [[self alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; }); +#endif + return sharedView; +} + + +#pragma mark - Setters + ++ (void)setStatus:(NSString*)status { + [[self sharedView] setStatus:status]; +} + ++ (void)setDefaultStyle:(SVProgressHUDStyle)style { + [self sharedView].defaultStyle = style; +} + ++ (void)setDefaultMaskType:(SVProgressHUDMaskType)maskType { + [self sharedView].defaultMaskType = maskType; +} + ++ (void)setDefaultAnimationType:(SVProgressHUDAnimationType)type { + [self sharedView].defaultAnimationType = type; +} + ++ (void)setMinimumSize:(CGSize)minimumSize { + [self sharedView].minimumSize = minimumSize; +} + ++ (void)setRingThickness:(CGFloat)ringThickness { + [self sharedView].ringThickness = ringThickness; +} + ++ (void)setRingRadius:(CGFloat)radius { + [self sharedView].ringRadius = radius; +} + ++ (void)setRingNoTextRadius:(CGFloat)radius { + [self sharedView].ringNoTextRadius = radius; +} + ++ (void)setCornerRadius:(CGFloat)cornerRadius { + [self sharedView].cornerRadius = cornerRadius; +} + ++ (void)setFont:(UIFont*)font { + [self sharedView].font = font; +} + ++ (void)setForegroundColor:(UIColor*)color { + [self sharedView].foregroundColor = color; +} + ++ (void)setBackgroundColor:(UIColor*)color { + [self sharedView].backgroundColor = color; +} + ++ (void)setBackgroundLayerColor:(UIColor*)color { + [self sharedView].backgroundLayerColor = color; +} + ++ (void)setInfoImage:(UIImage*)image { + [self sharedView].infoImage = image; +} + ++ (void)setSuccessImage:(UIImage*)image { + [self sharedView].successImage = image; +} + ++ (void)setErrorImage:(UIImage*)image { + [self sharedView].errorImage = image; +} + ++ (void)setViewForExtension:(UIView*)view { + [self sharedView].viewForExtension = view; +} + ++ (void)setMinimumDismissTimeInterval:(NSTimeInterval)interval { + [self sharedView].minimumDismissTimeInterval = interval; +} + ++ (void)setFadeInAnimationDuration:(NSTimeInterval)duration { + [self sharedView].fadeInAnimationDuration = duration; +} + ++ (void)setFadeOutAnimationDuration:(NSTimeInterval)duration { + [self sharedView].fadeOutAnimationDuration = duration; +} + + +#pragma mark - Show Methods + ++ (void)show { + [self showWithStatus:nil]; +} + ++ (void)showWithMaskType:(SVProgressHUDMaskType)maskType { + SVProgressHUDMaskType existingMaskType = [self sharedView].defaultMaskType; + [self setDefaultMaskType:maskType]; + [self show]; + [self setDefaultMaskType:existingMaskType]; +} + ++ (void)showWithStatus:(NSString*)status { + [self sharedView]; + [self showProgress:SVProgressHUDUndefinedProgress status:status]; +} + ++ (void)showWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType { + SVProgressHUDMaskType existingMaskType = [self sharedView].defaultMaskType; + [self setDefaultMaskType:maskType]; + [self showWithStatus:status]; + [self setDefaultMaskType:existingMaskType]; +} + ++ (void)showProgress:(float)progress { + [self showProgress:progress status:nil]; +} + ++ (void)showProgress:(float)progress maskType:(SVProgressHUDMaskType)maskType { + SVProgressHUDMaskType existingMaskType = [self sharedView].defaultMaskType; + [self setDefaultMaskType:maskType]; + [self showProgress:progress]; + [self setDefaultMaskType:existingMaskType]; +} + ++ (void)showProgress:(float)progress status:(NSString*)status { + [[self sharedView] showProgress:progress status:status]; +} + ++ (void)showProgress:(float)progress status:(NSString*)status maskType:(SVProgressHUDMaskType)maskType { + SVProgressHUDMaskType existingMaskType = [self sharedView].defaultMaskType; + [self setDefaultMaskType:maskType]; + [self showProgress:progress status:status]; + [self setDefaultMaskType:existingMaskType]; +} + + +#pragma mark - Show, then automatically dismiss methods + ++ (void)showInfoWithStatus:(NSString*)status { + [self showImage:[self sharedView].infoImage status:status]; +} + ++ (void)showInfoWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType { + SVProgressHUDMaskType existingMaskType = [self sharedView].defaultMaskType; + [self setDefaultMaskType:maskType]; + [self showInfoWithStatus:status]; + [self setDefaultMaskType:existingMaskType]; +} + ++ (void)showSuccessWithStatus:(NSString*)status { + [self showImage:[self sharedView].successImage status:status]; +} + ++ (void)showSuccessWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType { + SVProgressHUDMaskType existingMaskType = [self sharedView].defaultMaskType; + [self setDefaultMaskType:maskType]; + [self showSuccessWithStatus:status]; + [self setDefaultMaskType:existingMaskType]; +} + ++ (void)showErrorWithStatus:(NSString*)status { + [self showImage:[self sharedView].errorImage status:status]; +} + ++ (void)showErrorWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType { + SVProgressHUDMaskType existingMaskType = [self sharedView].defaultMaskType; + [self setDefaultMaskType:maskType]; + [self showErrorWithStatus:status]; + [self setDefaultMaskType:existingMaskType]; +} + ++ (void)showImage:(UIImage*)image status:(NSString*)status { + NSTimeInterval displayInterval = [self displayDurationForString:status]; + [[self sharedView] showImage:image status:status duration:displayInterval]; +} + ++ (void)showImage:(UIImage*)image status:(NSString*)status maskType:(SVProgressHUDMaskType)maskType { + SVProgressHUDMaskType existingMaskType = [self sharedView].defaultMaskType; + [self setDefaultMaskType:maskType]; + [self showImage:image status:status]; + [self setDefaultMaskType:existingMaskType]; +} + + +#pragma mark - Dismiss Methods + ++ (void)popActivity { + if([self sharedView].activityCount > 0) { + [self sharedView].activityCount--; + } + if([self sharedView].activityCount == 0) { + [[self sharedView] dismiss]; + } +} + ++ (void)dismiss { + [self dismissWithDelay:0.0]; +} + ++ (void)dismissWithDelay:(NSTimeInterval)delay { + [[self sharedView] dismissWithDelay:delay]; +} + + +#pragma mark - Offset + ++ (void)setOffsetFromCenter:(UIOffset)offset { + [self sharedView].offsetFromCenter = offset; +} + ++ (void)resetOffsetFromCenter { + [self setOffsetFromCenter:UIOffsetZero]; +} + + +#pragma mark - Instance Methods + +- (instancetype)initWithFrame:(CGRect)frame { + if((self = [super initWithFrame:frame])) { + _isInitializing = YES; + + self.userInteractionEnabled = NO; + _backgroundColor = [UIColor clearColor]; + _foregroundColor = [UIColor blackColor]; + _backgroundLayerColor = [UIColor colorWithWhite:0 alpha:0.4]; + + self.alpha = 0.0f; + self.activityCount = 0; + + // Set default values + _defaultMaskType = SVProgressHUDMaskTypeNone; + _defaultStyle = SVProgressHUDStyleLight; + _defaultAnimationType = SVProgressHUDAnimationTypeFlat; + + if ([UIFont respondsToSelector:@selector(preferredFontForTextStyle:)]) { + _font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]; + } else { + _font = [UIFont systemFontOfSize:14.0f]; + } + + NSBundle *bundle = [NSBundle bundleForClass:[SVProgressHUD class]]; + NSURL *url = [bundle URLForResource:@"SVProgressHUD" withExtension:@"bundle"]; + NSBundle *imageBundle = [NSBundle bundleWithURL:url]; + + UIImage* infoImage = [UIImage imageWithContentsOfFile:[imageBundle pathForResource:@"info" ofType:@"png"]]; + UIImage* successImage = [UIImage imageWithContentsOfFile:[imageBundle pathForResource:@"success" ofType:@"png"]]; + UIImage* errorImage = [UIImage imageWithContentsOfFile:[imageBundle pathForResource:@"error" ofType:@"png"]]; + + if ([[UIImage class] instancesRespondToSelector:@selector(imageWithRenderingMode:)]) { + _infoImage = [infoImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + _successImage = [successImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + _errorImage = [errorImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + } else { + _infoImage = infoImage; + _successImage = successImage; + _errorImage = errorImage; + } + + _ringThickness = 2.0f; + _ringRadius = 18.0f; + _ringNoTextRadius = 24.0f; + + _cornerRadius = 14.0f; + + _minimumDismissTimeInterval = 5.0; + + _fadeInAnimationDuration = SVProgressHUDDefaultAnimationDuration; + _fadeOutAnimationDuration = SVProgressHUDDefaultAnimationDuration; + + // Accessibility support + self.accessibilityIdentifier = @"SVProgressHUD"; + self.accessibilityLabel = @"SVProgressHUD"; + self.isAccessibilityElement = YES; + + _isInitializing = NO; + } + return self; +} + +- (void)updateHUDFrame { + // For the beginning use default values, these + // might get update if string is too large etc. + CGFloat hudWidth = 100.0f; + CGFloat hudHeight = 100.0f; + CGFloat stringHeightBuffer = 20.0f; + CGFloat stringAndContentHeightBuffer = 80.0f; + CGRect labelRect = CGRectZero; + + // Check if an image or progress ring is displayed + BOOL imageUsed = (self.imageView.image) && !(self.imageView.hidden); + BOOL progressUsed = self.imageView.hidden; + + // Calculate size of string and update HUD size + NSString *string = self.statusLabel.text; + if(string) { + CGSize constraintSize = CGSizeMake(200.0f, 300.0f); + CGRect stringRect; + if([string respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) { + stringRect = [string boundingRectWithSize:constraintSize + options:(NSStringDrawingOptions)(NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin) + attributes:@{NSFontAttributeName: self.statusLabel.font} + context:NULL]; + } else { + CGSize stringSize; + if([string respondsToSelector:@selector(sizeWithAttributes:)]) { + stringSize = [string sizeWithAttributes:@{NSFontAttributeName:[UIFont fontWithName:self.statusLabel.font.fontName size:self.statusLabel.font.pointSize]}]; + } else { +#if TARGET_OS_IOS +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated" + stringSize = [string sizeWithFont:self.statusLabel.font constrainedToSize:CGSizeMake(200.0f, 300.0f)]; +#pragma clang diagnostic pop +#endif + } + stringRect = CGRectMake(0.0f, 0.0f, stringSize.width, stringSize.height); + } + + CGFloat stringWidth = stringRect.size.width; + CGFloat stringHeight = ceilf(CGRectGetHeight(stringRect)); + + if(imageUsed || progressUsed) { + hudHeight = stringAndContentHeightBuffer + stringHeight; + } else { + hudHeight = stringHeightBuffer + stringHeight; + } + if(stringWidth > hudWidth) { + hudWidth = ceilf(stringWidth/2)*2; + } + CGFloat labelRectY = (imageUsed || progressUsed) ? 68.0f : 9.0f; + if(hudHeight > 100.0f) { + labelRect = CGRectMake(12.0f, labelRectY, hudWidth, stringHeight); + hudWidth += 24.0f; + } else { + hudWidth += 24.0f; + labelRect = CGRectMake(0.0f, labelRectY, hudWidth, stringHeight); + } + } + + // Update values on subviews + self.hudView.bounds = CGRectMake(0.0f, 0.0f, MAX(self.minimumSize.width, hudWidth), MAX(self.minimumSize.height, hudHeight)); + labelRect.size.width += MAX(0, self.minimumSize.width - hudWidth); + [self updateBlurBounds]; + + if(string) { + self.imageView.center = CGPointMake(CGRectGetWidth(self.hudView.bounds)/2, 36.0f); + } else { + self.imageView.center = CGPointMake(CGRectGetWidth(self.hudView.bounds)/2, CGRectGetHeight(self.hudView.bounds)/2); + } + + self.statusLabel.hidden = NO; + self.statusLabel.frame = labelRect; + + // Animate value update + [CATransaction begin]; + [CATransaction setDisableActions:YES]; + + if(string) { + if(self.defaultAnimationType == SVProgressHUDAnimationTypeFlat) { + SVIndefiniteAnimatedView *indefiniteAnimationView = (SVIndefiniteAnimatedView*)self.indefiniteAnimatedView; + indefiniteAnimationView.radius = self.ringRadius; + [indefiniteAnimationView sizeToFit]; + } + + CGPoint center = CGPointMake((CGRectGetWidth(self.hudView.bounds)/2), 36.0f); + self.indefiniteAnimatedView.center = center; + + if(self.progress != SVProgressHUDUndefinedProgress) { + self.backgroundRingView.center = self.ringView.center = CGPointMake((CGRectGetWidth(self.hudView.bounds)/2), 36.0f); + } + } else { + if(self.defaultAnimationType == SVProgressHUDAnimationTypeFlat) { + SVIndefiniteAnimatedView *indefiniteAnimationView = (SVIndefiniteAnimatedView*)self.indefiniteAnimatedView; + indefiniteAnimationView.radius = self.ringNoTextRadius; + [indefiniteAnimationView sizeToFit]; + } + + CGPoint center = CGPointMake((CGRectGetWidth(self.hudView.bounds)/2), CGRectGetHeight(self.hudView.bounds)/2); + self.indefiniteAnimatedView.center = center; + + if(self.progress != SVProgressHUDUndefinedProgress) { + self.backgroundRingView.center = self.ringView.center = CGPointMake((CGRectGetWidth(self.hudView.bounds)/2), CGRectGetHeight(self.hudView.bounds)/2); + } + } + + [CATransaction commit]; +} + +- (void)updateMask { + if(self.backgroundLayer) { + [self.backgroundLayer removeFromSuperlayer]; + self.backgroundLayer = nil; + } + switch (self.defaultMaskType) { + case SVProgressHUDMaskTypeCustom: + case SVProgressHUDMaskTypeBlack:{ + + self.backgroundLayer = [CALayer layer]; + self.backgroundLayer.frame = self.bounds; + self.backgroundLayer.backgroundColor = self.defaultMaskType == SVProgressHUDMaskTypeCustom ? self.backgroundLayerColor.CGColor : [UIColor colorWithWhite:0 alpha:0.4].CGColor; + [self.backgroundLayer setNeedsDisplay]; + + [self.layer insertSublayer:self.backgroundLayer atIndex:0]; + break; + } + + case SVProgressHUDMaskTypeGradient:{ + SVRadialGradientLayer *layer = [SVRadialGradientLayer layer]; + self.backgroundLayer = layer; + self.backgroundLayer.frame = self.bounds; + CGPoint gradientCenter = self.center; + gradientCenter.y = (self.bounds.size.height - self.visibleKeyboardHeight)/2; + layer.gradientCenter = gradientCenter; + [self.backgroundLayer setNeedsDisplay]; + + [self.layer insertSublayer:self.backgroundLayer atIndex:0]; + break; + } + default: + break; + } +} + +- (void)updateBlurBounds { +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 + if(NSClassFromString(@"UIBlurEffect") && self.defaultStyle != SVProgressHUDStyleCustom) { + // Remove background color, else the effect would not work + self.hudView.backgroundColor = [UIColor clearColor]; + + // Remove any old instances of UIVisualEffectViews + for (UIView *subview in self.hudView.subviews) { + if([subview isKindOfClass:[UIVisualEffectView class]]) { + [subview removeFromSuperview]; + } + } + + if(self.backgroundColor != [UIColor clearColor]) { + // Create blur effect + UIBlurEffectStyle blurEffectStyle = self.defaultStyle == SVProgressHUDStyleDark ? UIBlurEffectStyleDark : UIBlurEffectStyleLight; + UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:blurEffectStyle]; + UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; + blurEffectView.autoresizingMask = self.hudView.autoresizingMask; + blurEffectView.frame = self.hudView.bounds; + + // Add vibrancy to the blur effect to make it more vivid + UIVibrancyEffect *vibrancyEffect = [UIVibrancyEffect effectForBlurEffect:blurEffect]; + UIVisualEffectView *vibrancyEffectView = [[UIVisualEffectView alloc] initWithEffect:vibrancyEffect]; + vibrancyEffectView.autoresizingMask = blurEffectView.autoresizingMask; + vibrancyEffectView.bounds = blurEffectView.bounds; + [blurEffectView.contentView addSubview:vibrancyEffectView]; + + [self.hudView insertSubview:blurEffectView atIndex:0]; + } + } +#endif +} + +#if TARGET_OS_IOS +- (void)updateMotionEffectForOrientation:(UIInterfaceOrientation)orientation { + UIInterpolatingMotionEffectType xMotionEffectType = UIInterfaceOrientationIsPortrait(orientation) ? UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis : UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis; + UIInterpolatingMotionEffectType yMotionEffectType = UIInterfaceOrientationIsPortrait(orientation) ? UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis : UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis; + [self updateMotionEffectForXMotionEffectType:xMotionEffectType yMotionEffectType:yMotionEffectType]; +} +#endif + +- (void)updateMotionEffectForXMotionEffectType:(UIInterpolatingMotionEffectType)xMotionEffectType yMotionEffectType:(UIInterpolatingMotionEffectType)yMotionEffectType { + if([self.hudView respondsToSelector:@selector(addMotionEffect:)]) { + UIInterpolatingMotionEffect *effectX = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:xMotionEffectType]; + effectX.minimumRelativeValue = @(-SVProgressHUDParallaxDepthPoints); + effectX.maximumRelativeValue = @(SVProgressHUDParallaxDepthPoints); + + UIInterpolatingMotionEffect *effectY = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:yMotionEffectType]; + effectY.minimumRelativeValue = @(-SVProgressHUDParallaxDepthPoints); + effectY.maximumRelativeValue = @(SVProgressHUDParallaxDepthPoints); + + UIMotionEffectGroup *effectGroup = [[UIMotionEffectGroup alloc] init]; + effectGroup.motionEffects = @[effectX, effectY]; + + // Clear old motion effect, then add new motion effects + self.hudView.motionEffects = @[]; + [self.hudView addMotionEffect:effectGroup]; + } +} + +- (void)updateViewHierachy { + // Add the overlay (e.g. black, gradient) to the application window if necessary + if(!self.overlayView.superview) { +#if !defined(SV_APP_EXTENSIONS) + // Default case: iterate over UIApplication windows + NSEnumerator *frontToBackWindows = [UIApplication.sharedApplication.windows reverseObjectEnumerator]; + for (UIWindow *window in frontToBackWindows) { + BOOL windowOnMainScreen = window.screen == UIScreen.mainScreen; + BOOL windowIsVisible = !window.hidden && window.alpha > 0; + BOOL windowLevelNormal = window.windowLevel == UIWindowLevelNormal; + + if(windowOnMainScreen && windowIsVisible && windowLevelNormal) { + [window addSubview:self.overlayView]; + break; + } + } +#else + // If SVProgressHUD ist used inside an app extension add it to the given view + if(self.viewForExtension) { + [self.viewForExtension addSubview:self.overlayView]; + } +#endif + } else { + // The HUD is already on screen, but maybot not in front. Therefore + // ensure that overlay will be on top of rootViewController (which may + // be changed during runtime). + [self.overlayView.superview bringSubviewToFront:self.overlayView]; + } + + + // Add self to the overlay view + if(!self.superview){ + [self.overlayView addSubview:self]; + } + if(!self.hudView.superview) { + [self addSubview:self.hudView]; + } +} + +- (void)setStatus:(NSString*)status { + self.statusLabel.text = status; + [self updateHUDFrame]; +} + +- (void)setFadeOutTimer:(NSTimer*)timer { + if(_fadeOutTimer) { + [_fadeOutTimer invalidate], _fadeOutTimer = nil; + } + if(timer) { + _fadeOutTimer = timer; + } +} + + +#pragma mark - Notifications and their handling + +- (void)registerNotifications { +#if TARGET_OS_IOS + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(positionHUD:) + name:UIApplicationDidChangeStatusBarOrientationNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(positionHUD:) + name:UIKeyboardWillHideNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(positionHUD:) + name:UIKeyboardDidHideNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(positionHUD:) + name:UIKeyboardWillShowNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(positionHUD:) + name:UIKeyboardDidShowNotification + object:nil]; +#endif + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(positionHUD:) + name:UIApplicationDidBecomeActiveNotification + object:nil]; +} + +- (NSDictionary*)notificationUserInfo{ + return (self.statusLabel.text ? @{SVProgressHUDStatusUserInfoKey : self.statusLabel.text} : nil); +} + +- (void)positionHUD:(NSNotification*)notification { + CGFloat keyboardHeight = 0.0f; + double animationDuration = 0.0; + +#if !defined(SV_APP_EXTENSIONS) && TARGET_OS_IOS + self.frame = [[[UIApplication sharedApplication] delegate] window].bounds; + UIInterfaceOrientation orientation = UIApplication.sharedApplication.statusBarOrientation; +#elif !defined(SV_APP_EXTENSIONS) + self.frame = [UIApplication sharedApplication].keyWindow.bounds; +#else + if (self.viewForExtension) { + self.frame = self.viewForExtension.frame; + } else { + self.frame = UIScreen.mainScreen.bounds; + } + UIInterfaceOrientation orientation = CGRectGetWidth(self.frame) > CGRectGetHeight(self.frame) ? UIInterfaceOrientationLandscapeLeft : UIInterfaceOrientationPortrait; +#endif + + // no transforms applied to window in iOS 8, but only if compiled with iOS 8 sdk as base sdk, otherwise system supports old rotation logic. + BOOL ignoreOrientation = NO; +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 + if([[NSProcessInfo processInfo] respondsToSelector:@selector(operatingSystemVersion)]) { + ignoreOrientation = YES; + } +#endif + +#if TARGET_OS_IOS + // Get keyboardHeight in regards to current state + if(notification) { + NSDictionary* keyboardInfo = [notification userInfo]; + CGRect keyboardFrame = [keyboardInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue]; + animationDuration = [keyboardInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + + if(notification.name == UIKeyboardWillShowNotification || notification.name == UIKeyboardDidShowNotification) { + keyboardHeight = CGRectGetWidth(keyboardFrame); + + if(ignoreOrientation || UIInterfaceOrientationIsPortrait(orientation)) { + keyboardHeight = CGRectGetHeight(keyboardFrame); + } + } + } else { + keyboardHeight = self.visibleKeyboardHeight; + } +#endif + + // Get the currently active frame of the display (depends on orientation) + CGRect orientationFrame = self.bounds; + +#if !defined(SV_APP_EXTENSIONS) && TARGET_OS_IOS + CGRect statusBarFrame = UIApplication.sharedApplication.statusBarFrame; +#else + CGRect statusBarFrame = CGRectZero; +#endif + +#if TARGET_OS_IOS + if(!ignoreOrientation && UIInterfaceOrientationIsLandscape(orientation)) { + float temp = CGRectGetWidth(orientationFrame); + orientationFrame.size.width = CGRectGetHeight(orientationFrame); + orientationFrame.size.height = temp; + + temp = CGRectGetWidth(statusBarFrame); + statusBarFrame.size.width = CGRectGetHeight(statusBarFrame); + statusBarFrame.size.height = temp; + } + + // Update the motion effects in regards to orientation + [self updateMotionEffectForOrientation:orientation]; +#else + [self updateMotionEffectForXMotionEffectType:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis yMotionEffectType:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis]; +#endif + + // Calculate available height for display + CGFloat activeHeight = CGRectGetHeight(orientationFrame); + if(keyboardHeight > 0) { + activeHeight += CGRectGetHeight(statusBarFrame)*2; + } + activeHeight -= keyboardHeight; + + CGFloat posX = CGRectGetWidth(orientationFrame)/2.0f; + CGFloat posY = floorf(activeHeight*0.45f); + + CGFloat rotateAngle = 0.0; + CGPoint newCenter = CGPointMake(posX, posY); + + // Update posX and posY in regards to orientation +#if TARGET_OS_IOS + if(!ignoreOrientation) { + switch (orientation) { + case UIInterfaceOrientationPortraitUpsideDown: + rotateAngle = (CGFloat) M_PI; + newCenter = CGPointMake(posX, CGRectGetHeight(orientationFrame)-posY); + break; + case UIInterfaceOrientationLandscapeLeft: + rotateAngle = (CGFloat) (-M_PI/2.0f); + newCenter = CGPointMake(posY, posX); + break; + case UIInterfaceOrientationLandscapeRight: + rotateAngle = (CGFloat) (M_PI/2.0f); + newCenter = CGPointMake(CGRectGetHeight(orientationFrame)-posY, posX); + break; + default: // Same as UIInterfaceOrientationPortrait + rotateAngle = 0.0f; + newCenter = CGPointMake(posX, posY); + break; + } + } +#endif + + if(notification) { + // Animate update if notification was present + __weak SVProgressHUD *weakSelf = self; + [UIView animateWithDuration:animationDuration + delay:0 + options:UIViewAnimationOptionAllowUserInteraction + animations:^{ + __strong SVProgressHUD *strongSelf = weakSelf; + if(strongSelf) { + [strongSelf moveToPoint:newCenter rotateAngle:rotateAngle]; + [strongSelf.hudView setNeedsDisplay]; + } + } completion:NULL]; + } else { + [self moveToPoint:newCenter rotateAngle:rotateAngle]; + [self.hudView setNeedsDisplay]; + } + + [self updateMask]; +} + +- (void)moveToPoint:(CGPoint)newCenter rotateAngle:(CGFloat)angle { + self.hudView.transform = CGAffineTransformMakeRotation(angle); + self.hudView.center = CGPointMake(newCenter.x + self.offsetFromCenter.horizontal, newCenter.y + self.offsetFromCenter.vertical); +} + + +#pragma mark - Event handling + +- (void)overlayViewDidReceiveTouchEvent:(id)sender forEvent:(UIEvent*)event { + [[NSNotificationCenter defaultCenter] postNotificationName:SVProgressHUDDidReceiveTouchEventNotification + object:self + userInfo:[self notificationUserInfo]]; + + UITouch *touch = event.allTouches.anyObject; + CGPoint touchLocation = [touch locationInView:self]; + + if(CGRectContainsPoint(self.hudView.frame, touchLocation)) { + [[NSNotificationCenter defaultCenter] postNotificationName:SVProgressHUDDidTouchDownInsideNotification + object:self + userInfo:[self notificationUserInfo]]; + } +} + + +#pragma mark - Master show/dismiss methods + +- (void)showProgress:(float)progress status:(NSString*)status { + __weak SVProgressHUD *weakSelf = self; + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + __strong SVProgressHUD *strongSelf = weakSelf; + if(strongSelf){ + // Update / Check view hierachy to ensure the HUD is visible + [strongSelf updateViewHierachy]; + + // Reset imageView and fadeout timer if an image is currently displayed + strongSelf.imageView.hidden = YES; + strongSelf.imageView.image = nil; + + if(strongSelf.fadeOutTimer) { + strongSelf.activityCount = 0; + } + strongSelf.fadeOutTimer = nil; + + // Update text and set progress to the given value + strongSelf.statusLabel.text = status; + strongSelf.progress = progress; + + // Choose the "right" indicator depending on the progress + if(progress >= 0) { + // Cancel the indefiniteAnimatedView, then show the ringLayer + [strongSelf cancelIndefiniteAnimatedViewAnimation]; + + // Add ring to HUD and set progress + [strongSelf.hudView addSubview:strongSelf.ringView]; + [strongSelf.hudView addSubview:strongSelf.backgroundRingView]; + strongSelf.ringView.strokeEnd = progress; + + // Updat the activity count + if(progress == 0) { + strongSelf.activityCount++; + } + } else { + // Cancel the ringLayer animation, then show the indefiniteAnimatedView + [strongSelf cancelRingLayerAnimation]; + + // Add indefiniteAnimatedView to HUD + [strongSelf.hudView addSubview:strongSelf.indefiniteAnimatedView]; + if([strongSelf.indefiniteAnimatedView respondsToSelector:@selector(startAnimating)]) { + [(id)strongSelf.indefiniteAnimatedView startAnimating]; + } + + // Update the activity count + strongSelf.activityCount++; + } + + // Show + [strongSelf showStatus:status]; + } + }]; +} + +- (void)showImage:(UIImage*)image status:(NSString*)status duration:(NSTimeInterval)duration { + __weak SVProgressHUD *weakSelf = self; + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + __strong SVProgressHUD *strongSelf = weakSelf; + if(strongSelf){ + // Update / Check view hierachy to ensure the HUD is visible + [strongSelf updateViewHierachy]; + + // Reset progress and cancel any running animation + strongSelf.progress = SVProgressHUDUndefinedProgress; + [strongSelf cancelRingLayerAnimation]; + [strongSelf cancelIndefiniteAnimatedViewAnimation]; + + // Update imageView + UIColor *tintColor = strongSelf.foregroundColorForStyle; + UIImage *tintedImage = image; + if([strongSelf.imageView respondsToSelector:@selector(setTintColor:)]) { + if (tintedImage.renderingMode != UIImageRenderingModeAlwaysTemplate) { + tintedImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + } + strongSelf.imageView.tintColor = tintColor; + } else { + tintedImage = [strongSelf image:image withTintColor:tintColor]; + } + strongSelf.imageView.image = tintedImage; + strongSelf.imageView.hidden = NO; + + // Update text + strongSelf.statusLabel.text = status; + + // Show + [strongSelf showStatus:status]; + + // An image will dismissed automatically. Therefore we start a timer + // which then will call dismiss after the predefined duration + strongSelf.fadeOutTimer = [NSTimer timerWithTimeInterval:duration target:strongSelf selector:@selector(dismiss) userInfo:nil repeats:NO]; + [[NSRunLoop mainRunLoop] addTimer:strongSelf.fadeOutTimer forMode:NSRunLoopCommonModes]; + } + }]; +} + +- (void)showStatus:(NSString*)status { + // Update the HUDs frame to the new content and position HUD + [self updateHUDFrame]; + [self positionHUD:nil]; + + // Update accesibilty as well as user interaction + if(self.defaultMaskType != SVProgressHUDMaskTypeNone) { + self.overlayView.userInteractionEnabled = YES; + self.accessibilityLabel = status; + self.isAccessibilityElement = YES; + } else { + self.overlayView.userInteractionEnabled = NO; + self.hudView.accessibilityLabel = status; + self.hudView.isAccessibilityElement = YES; + } + + // Show overlay + self.overlayView.backgroundColor = [UIColor clearColor]; + + // Show if not already visible (depending on alpha) + if(self.alpha != 1.0f || self.hudView.alpha != 1.0f) { + // Post notification to inform user + [[NSNotificationCenter defaultCenter] postNotificationName:SVProgressHUDWillAppearNotification + object:self + userInfo:[self notificationUserInfo]]; + + // Zoom HUD a little to make a nice appear / pop up animation + self.hudView.transform = CGAffineTransformScale(self.hudView.transform, 1.3, 1.3); + + // Set initial values to handle iOS 7 (and above) UIToolbar which not answers well to hierarchy opacity change + self.alpha = 0.0f; + self.hudView.alpha = 0.0f; + + // Define blocks + __weak SVProgressHUD *weakSelf = self; + + __block void (^animationsBlock)(void) = ^{ + __strong SVProgressHUD *strongSelf = weakSelf; + if(strongSelf) { + // Shrink HUD to finish pop up animation + strongSelf.hudView.transform = CGAffineTransformScale(strongSelf.hudView.transform, 1/1.3f, 1/1.3f); + strongSelf.alpha = 1.0f; + strongSelf.hudView.alpha = 1.0f; + } + }; + + __block void (^completionBlock)(void) = ^{ + __strong SVProgressHUD *strongSelf = weakSelf; + if(strongSelf) { + /// Register observer <=> we now have to handle orientation changes etc. + [strongSelf registerNotifications]; + + // Post notification to inform user + [[NSNotificationCenter defaultCenter] postNotificationName:SVProgressHUDDidAppearNotification + object:strongSelf + userInfo:[strongSelf notificationUserInfo]]; + } + + // Update accesibilty + UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil); + UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, status); + }; + + if (self.fadeInAnimationDuration > 0) { + // Animate appearance + [UIView animateWithDuration:self.fadeInAnimationDuration + delay:0 + options:(UIViewAnimationOptions) (UIViewAnimationOptionAllowUserInteraction | UIViewAnimationCurveEaseOut | UIViewAnimationOptionBeginFromCurrentState) + animations:^{ + animationsBlock(); + } completion:^(BOOL finished) { + completionBlock(); + }]; + } else { + animationsBlock(); + completionBlock(); + } + + // Inform iOS to redraw the view hierachy + [self setNeedsDisplay]; + } +} + +- (void)dismiss { + [self dismissWithDelay:0]; +} + +- (void)dismissWithDelay:(NSTimeInterval)delay { + __weak SVProgressHUD *weakSelf = self; + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + __strong SVProgressHUD *strongSelf = weakSelf; + if(strongSelf){ + // Dismiss if visible (depending on alpha) + if(strongSelf.alpha != 0.0f || strongSelf.hudView.alpha != 0.0f){ + // Post notification to inform user + [[NSNotificationCenter defaultCenter] postNotificationName:SVProgressHUDWillDisappearNotification + object:nil + userInfo:[strongSelf notificationUserInfo]]; + + // Reset activitiy count + strongSelf.activityCount = 0; + + // Define blocks + __block void (^animationsBlock)(void) = ^{ + strongSelf.hudView.transform = CGAffineTransformScale(strongSelf.hudView.transform, 0.8f, 0.8f); + strongSelf.alpha = 0.0f; + strongSelf.hudView.alpha = 0.0f; + }; + + __block void (^completionBlock)(void) = ^{ + // Clean up view hierachy (overlays) + [strongSelf.overlayView removeFromSuperview]; + [strongSelf.hudView removeFromSuperview]; + [strongSelf removeFromSuperview]; + + // Reset progress and cancel any running animation + strongSelf.progress = SVProgressHUDUndefinedProgress; + [strongSelf cancelRingLayerAnimation]; + [strongSelf cancelIndefiniteAnimatedViewAnimation]; + + // Remove observer <=> we do not have to handle orientation changes etc. + [[NSNotificationCenter defaultCenter] removeObserver:strongSelf]; + + // Post notification to inform user + [[NSNotificationCenter defaultCenter] postNotificationName:SVProgressHUDDidDisappearNotification + object:strongSelf + userInfo:[strongSelf notificationUserInfo]]; + + // Tell the rootViewController to update the StatusBar appearance +#if !defined(SV_APP_EXTENSIONS) && TARGET_OS_IOS + UIViewController *rootController = [[UIApplication sharedApplication] keyWindow].rootViewController; + if([rootController respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { + [rootController setNeedsStatusBarAppearanceUpdate]; + } +#endif + // Update accesibilty + UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil); + }; + + if (strongSelf.fadeOutAnimationDuration > 0) { + // Animate appearance + [UIView animateWithDuration:strongSelf.fadeOutAnimationDuration + delay:delay + options:(UIViewAnimationOptions) (UIViewAnimationOptionAllowUserInteraction | UIViewAnimationCurveEaseIn | UIViewAnimationOptionBeginFromCurrentState) + animations:^{ + animationsBlock(); + } completion:^(BOOL finished) { + completionBlock(); + }]; + } else { + animationsBlock(); + completionBlock(); + } + + // Inform iOS to redraw the view hierachy + [strongSelf setNeedsDisplay]; + } + } + }]; +} + + +#pragma mark - Ring progress animation + +- (UIView*)indefiniteAnimatedView { + // Get the correct spinner for defaultAnimationType + if(self.defaultAnimationType == SVProgressHUDAnimationTypeFlat){ + // Check if spinner exists and is an object of different class + if(_indefiniteAnimatedView && ![_indefiniteAnimatedView isKindOfClass:[SVIndefiniteAnimatedView class]]){ + [_indefiniteAnimatedView removeFromSuperview]; + _indefiniteAnimatedView = nil; + } + + if(!_indefiniteAnimatedView){ + _indefiniteAnimatedView = [[SVIndefiniteAnimatedView alloc] initWithFrame:CGRectZero]; + } + + // Update styling + SVIndefiniteAnimatedView *indefiniteAnimatedView = (SVIndefiniteAnimatedView*)_indefiniteAnimatedView; + indefiniteAnimatedView.strokeColor = self.foregroundColorForStyle; + indefiniteAnimatedView.strokeThickness = self.ringThickness; + indefiniteAnimatedView.radius = self.statusLabel.text ? self.ringRadius : self.ringNoTextRadius; + } else { + // Check if spinner exists and is an object of different class + if(_indefiniteAnimatedView && ![_indefiniteAnimatedView isKindOfClass:[UIActivityIndicatorView class]]){ + [_indefiniteAnimatedView removeFromSuperview]; + _indefiniteAnimatedView = nil; + } + + if(!_indefiniteAnimatedView){ + _indefiniteAnimatedView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; + } + + // Update styling + UIActivityIndicatorView *activityIndicatorView = (UIActivityIndicatorView*)_indefiniteAnimatedView; + activityIndicatorView.color = self.foregroundColorForStyle; + } + [_indefiniteAnimatedView sizeToFit]; + + return _indefiniteAnimatedView; +} + +- (SVProgressAnimatedView*)ringView { + if(!_ringView) { + _ringView = [[SVProgressAnimatedView alloc] initWithFrame:CGRectZero]; + } + + // Update styling + _ringView.strokeColor = self.foregroundColorForStyle; + _ringView.strokeThickness = self.ringThickness; + _ringView.radius = self.statusLabel.text ? self.ringRadius : self.ringNoTextRadius; + + return _ringView; +} + +- (SVProgressAnimatedView*)backgroundRingView { + if(!_backgroundRingView) { + _backgroundRingView = [[SVProgressAnimatedView alloc] initWithFrame:CGRectZero]; + _backgroundRingView.strokeEnd = 1.0f; + } + + // Update styling + _backgroundRingView.strokeColor = [self.foregroundColorForStyle colorWithAlphaComponent:0.1f]; + _backgroundRingView.strokeThickness = self.ringThickness; + _backgroundRingView.radius = self.statusLabel.text ? self.ringRadius : self.ringNoTextRadius; + + return _backgroundRingView; +} + +- (void)cancelRingLayerAnimation { + // Animate value update, stop animation + [CATransaction begin]; + [CATransaction setDisableActions:YES]; + + [self.hudView.layer removeAllAnimations]; + self.ringView.strokeEnd = 0.0f; + + [CATransaction commit]; + + // Remove from view + [self.ringView removeFromSuperview]; + [self.backgroundRingView removeFromSuperview]; +} + +- (void)cancelIndefiniteAnimatedViewAnimation { + // Stop animation + if([self.indefiniteAnimatedView respondsToSelector:@selector(stopAnimating)]) { + [(id)self.indefiniteAnimatedView stopAnimating]; + } + // Remove from view + [self.indefiniteAnimatedView removeFromSuperview]; +} + + +#pragma mark - Utilities + ++ (BOOL)isVisible { + return ([self sharedView].alpha > 0); +} + + +#pragma mark - Getters + ++ (NSTimeInterval)displayDurationForString:(NSString*)string { + return MAX((float)string.length * 0.06 + 0.5, [self sharedView].minimumDismissTimeInterval); +} + +- (UIColor*)foregroundColorForStyle { + if(self.defaultStyle == SVProgressHUDStyleLight) { + return [UIColor blackColor]; + } else if(self.defaultStyle == SVProgressHUDStyleDark) { + return [UIColor whiteColor]; + } else { + return self.foregroundColor; + } +} + +- (UIColor*)backgroundColorForStyle { + if(self.defaultStyle == SVProgressHUDStyleLight) { + return [UIColor whiteColor]; + } else if(self.defaultStyle == SVProgressHUDStyleDark) { + return [UIColor blackColor]; + } else { + return self.backgroundColor; + } +} + +- (UIImage*)image:(UIImage*)image withTintColor:(UIColor*)color { + CGRect rect = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height); + UIGraphicsBeginImageContextWithOptions(rect.size, NO, image.scale); + CGContextRef c = UIGraphicsGetCurrentContext(); + [image drawInRect:rect]; + CGContextSetFillColorWithColor(c, [color CGColor]); + CGContextSetBlendMode(c, kCGBlendModeSourceAtop); + CGContextFillRect(c, rect); + UIImage *tintedImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return tintedImage; +} + +- (BOOL)isClear { // used for iOS 7 and above + return (self.defaultMaskType == SVProgressHUDMaskTypeClear || self.defaultMaskType == SVProgressHUDMaskTypeNone); +} + +- (UIControl*)overlayView { + if(!_overlayView) { +#if !defined(SV_APP_EXTENSIONS) + CGRect windowBounds = [[[UIApplication sharedApplication] delegate] window].bounds; + _overlayView = [[UIControl alloc] initWithFrame:windowBounds]; +#else + _overlayView = [[UIControl alloc] initWithFrame:[UIScreen mainScreen].bounds]; +#endif + _overlayView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + _overlayView.backgroundColor = [UIColor clearColor]; + [_overlayView addTarget:self action:@selector(overlayViewDidReceiveTouchEvent:forEvent:) forControlEvents:UIControlEventTouchDown]; + } + return _overlayView; +} + +- (UIView*)hudView { + if(!_hudView) { + _hudView = [[UIView alloc] initWithFrame:CGRectZero]; + _hudView.layer.masksToBounds = YES; + _hudView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin; + } + + // Update styling + _hudView.layer.cornerRadius = self.cornerRadius; + _hudView.backgroundColor = self.backgroundColorForStyle; + + return _hudView; +} + +- (UILabel*)statusLabel { + if(!_statusLabel) { + _statusLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + _statusLabel.backgroundColor = [UIColor clearColor]; + _statusLabel.adjustsFontSizeToFitWidth = YES; + _statusLabel.textAlignment = NSTextAlignmentCenter; + _statusLabel.baselineAdjustment = UIBaselineAdjustmentAlignCenters; + _statusLabel.numberOfLines = 0; + } + if(!_statusLabel.superview) { + [self.hudView addSubview:_statusLabel]; + } + + // Update styling + _statusLabel.textColor = self.foregroundColorForStyle; + _statusLabel.font = self.font; + + return _statusLabel; +} + +- (UIImageView*)imageView { + if(!_imageView) { + _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 28.0f, 28.0f)]; + } + if(!_imageView.superview) { + [self.hudView addSubview:_imageView]; + } + return _imageView; +} + +- (CGFloat)visibleKeyboardHeight { +#if !defined(SV_APP_EXTENSIONS) + UIWindow *keyboardWindow = nil; + for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) { + if(![[testWindow class] isEqual:[UIWindow class]]) { + keyboardWindow = testWindow; + break; + } + } + + for (__strong UIView *possibleKeyboard in [keyboardWindow subviews]) { + if([possibleKeyboard isKindOfClass:NSClassFromString(@"UIPeripheralHostView")] || [possibleKeyboard isKindOfClass:NSClassFromString(@"UIKeyboard")]) { + return CGRectGetHeight(possibleKeyboard.bounds); + } else if([possibleKeyboard isKindOfClass:NSClassFromString(@"UIInputSetContainerView")]) { + for (__strong UIView *possibleKeyboardSubview in [possibleKeyboard subviews]) { + if([possibleKeyboardSubview isKindOfClass:NSClassFromString(@"UIInputSetHostView")]) { + return CGRectGetHeight(possibleKeyboardSubview.bounds); + } + } + } + } +#endif + return 0; +} + + +#pragma mark - UIAppearance Setters + +- (void)setDefaultStyle:(SVProgressHUDStyle)style { + if (!_isInitializing) _defaultStyle = style; +} + +- (void)setDefaultMaskType:(SVProgressHUDMaskType)maskType { + if (!_isInitializing) _defaultMaskType = maskType; +} + +- (void)setDefaultAnimationType:(SVProgressHUDAnimationType)animationType { + if (!_isInitializing) _defaultAnimationType = animationType; +} + +- (void)setMinimumSize:(CGSize)minimumSize { + if (!_isInitializing) _minimumSize = minimumSize; +} + +- (void)setRingThickness:(CGFloat)ringThickness { + if (!_isInitializing) _ringThickness = ringThickness; +} + +- (void)setRingRadius:(CGFloat)ringRadius { + if (!_isInitializing) _ringRadius = ringRadius; +} + +- (void)setRingNoTextRadius:(CGFloat)ringNoTextRadius { + if (!_isInitializing) _ringNoTextRadius = ringNoTextRadius; +} + +- (void)setCornerRadius:(CGFloat)cornerRadius { + if (!_isInitializing) _cornerRadius = cornerRadius; +} + +- (void)setFont:(UIFont*)font { + if (!_isInitializing) _font = font; +} + +- (void)setForegroundColor:(UIColor*)color { + if (!_isInitializing) _foregroundColor = color; +} + +- (void)setBackgroundColor:(UIColor*)color { + if (!_isInitializing) _backgroundColor = color; +} + +- (void)setBackgroundLayerColor:(UIColor*)color { + if (!_isInitializing) _backgroundLayerColor = color; +} + +- (void)setInfoImage:(UIImage*)image { + if (!_isInitializing) _infoImage = image; +} + +- (void)setSuccessImage:(UIImage*)image { + if (!_isInitializing) _successImage = image; +} + +- (void)setErrorImage:(UIImage*)image { + if (!_isInitializing) _errorImage = image; +} + +- (void)setViewForExtension:(UIView*)view { + if (!_isInitializing) _viewForExtension = view; +} + +- (void)setOffsetFromCenter:(UIOffset)offset { + if (!_isInitializing) _offsetFromCenter = offset; +} + +- (void)setMinimumDismissTimeInterval:(NSTimeInterval)minimumDismissTimeInterval { + if (!_isInitializing) _minimumDismissTimeInterval = minimumDismissTimeInterval; +} + +- (void)setFadeInAnimationDuration:(NSTimeInterval)duration { + if (!_isInitializing) _fadeInAnimationDuration = duration; +} + +- (void)setFadeOutAnimationDuration:(NSTimeInterval)duration { + if (!_isInitializing) _fadeOutAnimationDuration = duration; +} + +@end + diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.h b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.h new file mode 100644 index 0000000..634449e --- /dev/null +++ b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.h @@ -0,0 +1,14 @@ +// +// SVRadialGradientLayer.h +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD +// +// Copyright (c) 2014-2016 Tobias Tiemerding. All rights reserved. +// + +#import + +@interface SVRadialGradientLayer : CALayer + +@property (nonatomic) CGPoint gradientCenter; + +@end diff --git a/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.m b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.m new file mode 100644 index 0000000..d6d5827 --- /dev/null +++ b/Autorization:Registration Example/Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.m @@ -0,0 +1,25 @@ +// +// SVRadialGradientLayer.m +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD +// +// Copyright (c) 2014-2016 Tobias Tiemerding. All rights reserved. +// + +#import "SVRadialGradientLayer.h" + +@implementation SVRadialGradientLayer + +- (void)drawInContext:(CGContextRef)context { + size_t locationsCount = 2; + CGFloat locations[2] = {0.0f, 1.0f}; + CGFloat colors[8] = {0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.75f}; + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, locations, locationsCount); + CGColorSpaceRelease(colorSpace); + + float radius = MIN(self.bounds.size.width , self.bounds.size.height); + CGContextDrawRadialGradient (context, gradient, self.gradientCenter, 0, self.gradientCenter, radius, kCGGradientDrawsAfterEndLocation); + CGGradientRelease(gradient); +} + +@end diff --git a/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m b/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m new file mode 100644 index 0000000..6a29cf8 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_AFNetworking : NSObject +@end +@implementation PodsDummy_AFNetworking +@end diff --git a/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch b/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch new file mode 100644 index 0000000..b52cf0d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch @@ -0,0 +1,15 @@ +#ifdef __OBJC__ +#import +#endif + +#ifndef TARGET_OS_IOS + #define TARGET_OS_IOS TARGET_OS_IPHONE +#endif + +#ifndef TARGET_OS_WATCH + #define TARGET_OS_WATCH 0 +#endif + +#ifndef TARGET_OS_TV + #define TARGET_OS_TV 0 +#endif diff --git a/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h b/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h new file mode 100644 index 0000000..a0f6f34 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h @@ -0,0 +1,24 @@ +#import + +#import "AFNetworking.h" +#import "AFHTTPSessionManager.h" +#import "AFURLSessionManager.h" +#import "AFNetworkReachabilityManager.h" +#import "AFSecurityPolicy.h" +#import "AFURLRequestSerialization.h" +#import "AFURLResponseSerialization.h" +#import "AFAutoPurgingImageCache.h" +#import "AFImageDownloader.h" +#import "AFNetworkActivityIndicatorManager.h" +#import "UIActivityIndicatorView+AFNetworking.h" +#import "UIButton+AFNetworking.h" +#import "UIImage+AFNetworking.h" +#import "UIImageView+AFNetworking.h" +#import "UIKit+AFNetworking.h" +#import "UIProgressView+AFNetworking.h" +#import "UIRefreshControl+AFNetworking.h" +#import "UIWebView+AFNetworking.h" + +FOUNDATION_EXPORT double AFNetworkingVersionNumber; +FOUNDATION_EXPORT const unsigned char AFNetworkingVersionString[]; + diff --git a/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking.modulemap b/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking.modulemap new file mode 100644 index 0000000..5892cd3 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking.modulemap @@ -0,0 +1,6 @@ +framework module AFNetworking { + umbrella header "AFNetworking-umbrella.h" + + export * + module * { export * } +} diff --git a/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig new file mode 100644 index 0000000..066408f --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/AFNetworking +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/Info.plist b/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/Info.plist new file mode 100644 index 0000000..90db36a --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/AFNetworking/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.1.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift-dummy.m b/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift-dummy.m new file mode 100644 index 0000000..2e6982b --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_FSHelpers_Swift : NSObject +@end +@implementation PodsDummy_FSHelpers_Swift +@end diff --git a/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift-prefix.pch b/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift-prefix.pch new file mode 100644 index 0000000..aa992a4 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift-umbrella.h b/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift-umbrella.h new file mode 100644 index 0000000..acdd8f5 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift-umbrella.h @@ -0,0 +1,6 @@ +#import + + +FOUNDATION_EXPORT double FSHelpers_SwiftVersionNumber; +FOUNDATION_EXPORT const unsigned char FSHelpers_SwiftVersionString[]; + diff --git a/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift.modulemap b/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift.modulemap new file mode 100644 index 0000000..57ce426 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift.modulemap @@ -0,0 +1,6 @@ +framework module FSHelpers_Swift { + umbrella header "FSHelpers+Swift-umbrella.h" + + export * + module * { export * } +} diff --git a/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift.xcconfig new file mode 100644 index 0000000..5ef44ad --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/FSHelpers+Swift.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = -framework "Foundation" -framework "QuartzCore" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/Info.plist b/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/Info.plist new file mode 100644 index 0000000..7f71fff --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/FSHelpers+Swift/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.1.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-dummy.m b/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-dummy.m new file mode 100644 index 0000000..75bddd2 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_IOSLinkedInAPI : NSObject +@end +@implementation PodsDummy_IOSLinkedInAPI +@end diff --git a/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-prefix.pch b/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-prefix.pch new file mode 100644 index 0000000..aa992a4 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-umbrella.h b/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-umbrella.h new file mode 100644 index 0000000..a9ae7b6 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI-umbrella.h @@ -0,0 +1,10 @@ +#import + +#import "LIALinkedInApplication.h" +#import "LIALinkedInAuthorizationViewController.h" +#import "LIALinkedInHttpClient.h" +#import "NSString+LIAEncode.h" + +FOUNDATION_EXPORT double IOSLinkedInAPIVersionNumber; +FOUNDATION_EXPORT const unsigned char IOSLinkedInAPIVersionString[]; + diff --git a/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI.modulemap b/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI.modulemap new file mode 100644 index 0000000..f636e7f --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI.modulemap @@ -0,0 +1,6 @@ +framework module IOSLinkedInAPI { + umbrella header "IOSLinkedInAPI-umbrella.h" + + export * + module * { export * } +} diff --git a/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI.xcconfig new file mode 100644 index 0000000..7fd82dd --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/IOSLinkedInAPI.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/Info.plist b/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/Info.plist new file mode 100644 index 0000000..0a12077 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/IOSLinkedInAPI/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/Info.plist b/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/Info.plist new file mode 100644 index 0000000..ecb8f03 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.3.2 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord-dummy.m b/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord-dummy.m new file mode 100644 index 0000000..54d1458 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_MagicalRecord : NSObject +@end +@implementation PodsDummy_MagicalRecord +@end diff --git a/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord-prefix.pch b/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord-prefix.pch new file mode 100644 index 0000000..90bdf4c --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord-prefix.pch @@ -0,0 +1,6 @@ +#ifdef __OBJC__ +#import +#endif + +#import +#import diff --git a/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord-umbrella.h b/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord-umbrella.h new file mode 100644 index 0000000..c78b738 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord-umbrella.h @@ -0,0 +1,37 @@ +#import + +#import "MagicalImportFunctions.h" +#import "NSAttributeDescription+MagicalDataImport.h" +#import "NSEntityDescription+MagicalDataImport.h" +#import "NSNumber+MagicalDataImport.h" +#import "NSObject+MagicalDataImport.h" +#import "NSRelationshipDescription+MagicalDataImport.h" +#import "NSString+MagicalDataImport.h" +#import "NSManagedObject+MagicalAggregation.h" +#import "NSManagedObject+MagicalDataImport.h" +#import "NSManagedObject+MagicalFinders.h" +#import "NSManagedObject+MagicalRecord.h" +#import "NSManagedObject+MagicalRequests.h" +#import "NSManagedObjectContext+MagicalChainSave.h" +#import "NSManagedObjectContext+MagicalObserving.h" +#import "NSManagedObjectContext+MagicalRecord.h" +#import "NSManagedObjectContext+MagicalSaves.h" +#import "NSManagedObjectContext+MagicalThreading.h" +#import "NSManagedObjectModel+MagicalRecord.h" +#import "NSPersistentStore+MagicalRecord.h" +#import "NSPersistentStoreCoordinator+MagicalRecord.h" +#import "MagicalRecord+Actions.h" +#import "MagicalRecord+ErrorHandling.h" +#import "MagicalRecord+iCloud.h" +#import "MagicalRecord+Options.h" +#import "MagicalRecord+Setup.h" +#import "MagicalRecord+ShorthandMethods.h" +#import "MagicalRecordDeprecationMacros.h" +#import "MagicalRecordInternal.h" +#import "MagicalRecordLogging.h" +#import "MagicalRecordXcode7CompatibilityMacros.h" +#import "MagicalRecord.h" + +FOUNDATION_EXPORT double MagicalRecordVersionNumber; +FOUNDATION_EXPORT const unsigned char MagicalRecordVersionString[]; + diff --git a/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord.modulemap b/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord.modulemap new file mode 100644 index 0000000..0d561ba --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord.modulemap @@ -0,0 +1,6 @@ +framework module MagicalRecord { + umbrella header "MagicalRecord-umbrella.h" + + export * + module * { export * } +} diff --git a/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord.xcconfig new file mode 100644 index 0000000..e41a422 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/MagicalRecord/MagicalRecord.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MagicalRecord +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = -framework "CoreData" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Info.plist b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-acknowledgements.markdown b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-acknowledgements.markdown new file mode 100644 index 0000000..bbc8920 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-acknowledgements.markdown @@ -0,0 +1,173 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## AFNetworking + +Copyright (c) 2011–2016 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +## Crashlytics + +Fabric: Copyright 2015 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2015 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt + +## FSHelpers+Swift + +The MIT License (MIT) + +Copyright (c) 2015 Flatstack + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +## Fabric + +Fabric: Copyright 2015 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt + +## Google + +Copyright 2015 Google Inc. + +## GoogleAppUtilities + +Copyright 2015 Google Inc. + +## GoogleAuthUtilities + +Copyright 2015 Google Inc. + +## GoogleInterchangeUtilities + +Copyright 2015 Google Inc. + +## GoogleNetworkingUtilities + +Copyright 2015 Google Inc. + +## GoogleSignIn + +Copyright 2015 Google Inc. All Rights Reserved. + +## GoogleSymbolUtilities + +Copyright 2015 Google Inc. + +## GoogleUtilities + +Copyright 2015 Google Inc. + +## IOSLinkedInAPI + +Copyright (c) 2013 Ancientprogramming (http://www.ancientprogramming.com/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +## MagicalRecord + + Copyright (c) 2010-2015, Magical Panda Software, LLC + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + * Link to the MagicalRecord Repository at https://github.com/magicalpanda/MagicalRecord in the credits section of your application + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + This software license is in accordance with the standard MIT License. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + +## SVProgressHUD + +Copyright (c) 2011-2016 Sam Vermette, Tobias Tiemerding and contributors. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +A different license may apply to other resources included in this package, +including Freepik Icons. Please consult their +respective headers for the terms of their individual licenses. + +Generated by CocoaPods - https://cocoapods.org diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-acknowledgements.plist b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-acknowledgements.plist new file mode 100644 index 0000000..f0543d4 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-acknowledgements.plist @@ -0,0 +1,259 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2011–2016 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + Title + AFNetworking + Type + PSGroupSpecifier + + + FooterText + Fabric: Copyright 2015 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2015 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt + Title + Crashlytics + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2015 Flatstack + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Title + FSHelpers+Swift + Type + PSGroupSpecifier + + + FooterText + Fabric: Copyright 2015 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt + Title + Fabric + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + Google + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleAppUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleAuthUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleInterchangeUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleNetworkingUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. All Rights Reserved. + Title + GoogleSignIn + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleSymbolUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2013 Ancientprogramming (http://www.ancientprogramming.com/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + Title + IOSLinkedInAPI + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2010-2015, Magical Panda Software, LLC + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + * Link to the MagicalRecord Repository at https://github.com/magicalpanda/MagicalRecord in the credits section of your application + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + This software license is in accordance with the standard MIT License. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + Title + MagicalRecord + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2011-2016 Sam Vermette, Tobias Tiemerding and contributors. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +A different license may apply to other resources included in this package, +including Freepik Icons. Please consult their +respective headers for the terms of their individual licenses. + + Title + SVProgressHUD + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-dummy.m b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-dummy.m new file mode 100644 index 0000000..ab22992 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Abstract_Swift_Base : NSObject +@end +@implementation PodsDummy_Pods_Abstract_Swift_Base +@end diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-frameworks.sh b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-frameworks.sh new file mode 100755 index 0000000..f102f95 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-frameworks.sh @@ -0,0 +1,141 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" + /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "AppStore Debug" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Debug Staging" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Test" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "AppStore" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Release Staging" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Test Staging" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-resources.sh b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-resources.sh new file mode 100755 index 0000000..3bde11d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-resources.sh @@ -0,0 +1,126 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +realpath() { + DIRECTORY="$(cd "${1%/*}" && pwd)" + FILENAME="${1##*/}" + echo "$DIRECTORY/$FILENAME" +} + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + 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\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + 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}" + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "AppStore Debug" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Debug Staging" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Test" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "AppStore" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Release Staging" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Test Staging" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "`realpath $PODS_ROOT`*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-umbrella.h b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-umbrella.h new file mode 100644 index 0000000..2bedb30 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module-umbrella.h @@ -0,0 +1,6 @@ +#import + + +FOUNDATION_EXPORT double Pods_Abstract_Swift_BaseVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_Abstract_Swift_BaseVersionString[]; + diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.appstore debug.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.appstore debug.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.appstore debug.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.appstore.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.appstore.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.appstore.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.debug staging.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.debug staging.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.debug staging.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.debug.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.debug.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.debug.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.modulemap b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.modulemap new file mode 100644 index 0000000..40bf5b4 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.modulemap @@ -0,0 +1,6 @@ +framework module Pods_Abstract_Swift_Base { + umbrella header "Pods-Abstract-Authorization-module-umbrella.h" + + export * + module * { export * } +} diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.release staging.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.release staging.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.release staging.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.release.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.release.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.release.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.test staging.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.test staging.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.test staging.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.test.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.test.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-module/Pods-Abstract-Authorization-module.test.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Info.plist b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-acknowledgements.markdown b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-acknowledgements.markdown new file mode 100644 index 0000000..bbc8920 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-acknowledgements.markdown @@ -0,0 +1,173 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## AFNetworking + +Copyright (c) 2011–2016 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +## Crashlytics + +Fabric: Copyright 2015 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2015 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt + +## FSHelpers+Swift + +The MIT License (MIT) + +Copyright (c) 2015 Flatstack + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +## Fabric + +Fabric: Copyright 2015 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt + +## Google + +Copyright 2015 Google Inc. + +## GoogleAppUtilities + +Copyright 2015 Google Inc. + +## GoogleAuthUtilities + +Copyright 2015 Google Inc. + +## GoogleInterchangeUtilities + +Copyright 2015 Google Inc. + +## GoogleNetworkingUtilities + +Copyright 2015 Google Inc. + +## GoogleSignIn + +Copyright 2015 Google Inc. All Rights Reserved. + +## GoogleSymbolUtilities + +Copyright 2015 Google Inc. + +## GoogleUtilities + +Copyright 2015 Google Inc. + +## IOSLinkedInAPI + +Copyright (c) 2013 Ancientprogramming (http://www.ancientprogramming.com/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +## MagicalRecord + + Copyright (c) 2010-2015, Magical Panda Software, LLC + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + * Link to the MagicalRecord Repository at https://github.com/magicalpanda/MagicalRecord in the credits section of your application + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + This software license is in accordance with the standard MIT License. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + +## SVProgressHUD + +Copyright (c) 2011-2016 Sam Vermette, Tobias Tiemerding and contributors. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +A different license may apply to other resources included in this package, +including Freepik Icons. Please consult their +respective headers for the terms of their individual licenses. + +Generated by CocoaPods - https://cocoapods.org diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-acknowledgements.plist b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-acknowledgements.plist new file mode 100644 index 0000000..f0543d4 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-acknowledgements.plist @@ -0,0 +1,259 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2011–2016 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + Title + AFNetworking + Type + PSGroupSpecifier + + + FooterText + Fabric: Copyright 2015 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2015 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt + Title + Crashlytics + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2015 Flatstack + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Title + FSHelpers+Swift + Type + PSGroupSpecifier + + + FooterText + Fabric: Copyright 2015 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt + Title + Fabric + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + Google + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleAppUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleAuthUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleInterchangeUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleNetworkingUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. All Rights Reserved. + Title + GoogleSignIn + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleSymbolUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2013 Ancientprogramming (http://www.ancientprogramming.com/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + Title + IOSLinkedInAPI + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2010-2015, Magical Panda Software, LLC + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + * Link to the MagicalRecord Repository at https://github.com/magicalpanda/MagicalRecord in the credits section of your application + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + This software license is in accordance with the standard MIT License. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + Title + MagicalRecord + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2011-2016 Sam Vermette, Tobias Tiemerding and contributors. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +A different license may apply to other resources included in this package, +including Freepik Icons. Please consult their +respective headers for the terms of their individual licenses. + + Title + SVProgressHUD + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-dummy.m b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-dummy.m new file mode 100644 index 0000000..cb170ed --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Abstract_Swift_BaseTests : NSObject +@end +@implementation PodsDummy_Pods_Abstract_Swift_BaseTests +@end diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-frameworks.sh b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-frameworks.sh new file mode 100755 index 0000000..f102f95 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-frameworks.sh @@ -0,0 +1,141 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" + /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "AppStore Debug" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Debug Staging" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Test" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "AppStore" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Release Staging" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Test Staging" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-resources.sh b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-resources.sh new file mode 100755 index 0000000..3bde11d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-resources.sh @@ -0,0 +1,126 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +realpath() { + DIRECTORY="$(cd "${1%/*}" && pwd)" + FILENAME="${1##*/}" + echo "$DIRECTORY/$FILENAME" +} + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + 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\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + 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}" + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "AppStore Debug" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Debug Staging" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Test" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "AppStore" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Release Staging" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Test Staging" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "`realpath $PODS_ROOT`*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-umbrella.h b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-umbrella.h new file mode 100644 index 0000000..07b33ce --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests-umbrella.h @@ -0,0 +1,6 @@ +#import + + +FOUNDATION_EXPORT double Pods_Abstract_Swift_BaseTestsVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_Abstract_Swift_BaseTestsVersionString[]; + diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.appstore debug.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.appstore debug.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.appstore debug.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.appstore.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.appstore.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.appstore.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.debug staging.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.debug staging.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.debug staging.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.debug.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.debug.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.debug.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.modulemap b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.modulemap new file mode 100644 index 0000000..c3dcca5 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.modulemap @@ -0,0 +1,6 @@ +framework module Pods_Abstract_Swift_BaseTests { + umbrella header "Pods-Abstract-Authorization-moduleTests-umbrella.h" + + export * + module * { export * } +} diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.release staging.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.release staging.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.release staging.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.release.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.release.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.release.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.test staging.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.test staging.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.test staging.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.test.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.test.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleTests/Pods-Abstract-Authorization-moduleTests.test.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Info.plist b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-acknowledgements.markdown b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-acknowledgements.markdown new file mode 100644 index 0000000..bbc8920 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-acknowledgements.markdown @@ -0,0 +1,173 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## AFNetworking + +Copyright (c) 2011–2016 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +## Crashlytics + +Fabric: Copyright 2015 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2015 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt + +## FSHelpers+Swift + +The MIT License (MIT) + +Copyright (c) 2015 Flatstack + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +## Fabric + +Fabric: Copyright 2015 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt + +## Google + +Copyright 2015 Google Inc. + +## GoogleAppUtilities + +Copyright 2015 Google Inc. + +## GoogleAuthUtilities + +Copyright 2015 Google Inc. + +## GoogleInterchangeUtilities + +Copyright 2015 Google Inc. + +## GoogleNetworkingUtilities + +Copyright 2015 Google Inc. + +## GoogleSignIn + +Copyright 2015 Google Inc. All Rights Reserved. + +## GoogleSymbolUtilities + +Copyright 2015 Google Inc. + +## GoogleUtilities + +Copyright 2015 Google Inc. + +## IOSLinkedInAPI + +Copyright (c) 2013 Ancientprogramming (http://www.ancientprogramming.com/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +## MagicalRecord + + Copyright (c) 2010-2015, Magical Panda Software, LLC + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + * Link to the MagicalRecord Repository at https://github.com/magicalpanda/MagicalRecord in the credits section of your application + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + This software license is in accordance with the standard MIT License. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + +## SVProgressHUD + +Copyright (c) 2011-2016 Sam Vermette, Tobias Tiemerding and contributors. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +A different license may apply to other resources included in this package, +including Freepik Icons. Please consult their +respective headers for the terms of their individual licenses. + +Generated by CocoaPods - https://cocoapods.org diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-acknowledgements.plist b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-acknowledgements.plist new file mode 100644 index 0000000..f0543d4 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-acknowledgements.plist @@ -0,0 +1,259 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2011–2016 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + Title + AFNetworking + Type + PSGroupSpecifier + + + FooterText + Fabric: Copyright 2015 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2015 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt + Title + Crashlytics + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2015 Flatstack + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Title + FSHelpers+Swift + Type + PSGroupSpecifier + + + FooterText + Fabric: Copyright 2015 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt + Title + Fabric + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + Google + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleAppUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleAuthUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleInterchangeUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleNetworkingUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. All Rights Reserved. + Title + GoogleSignIn + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleSymbolUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright 2015 Google Inc. + Title + GoogleUtilities + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2013 Ancientprogramming (http://www.ancientprogramming.com/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + Title + IOSLinkedInAPI + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2010-2015, Magical Panda Software, LLC + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + * Link to the MagicalRecord Repository at https://github.com/magicalpanda/MagicalRecord in the credits section of your application + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + This software license is in accordance with the standard MIT License. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + Title + MagicalRecord + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2011-2016 Sam Vermette, Tobias Tiemerding and contributors. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +A different license may apply to other resources included in this package, +including Freepik Icons. Please consult their +respective headers for the terms of their individual licenses. + + Title + SVProgressHUD + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-dummy.m b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-dummy.m new file mode 100644 index 0000000..c2056de --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Abstract_Swift_BaseUITests : NSObject +@end +@implementation PodsDummy_Pods_Abstract_Swift_BaseUITests +@end diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-frameworks.sh b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-frameworks.sh new file mode 100755 index 0000000..f102f95 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-frameworks.sh @@ -0,0 +1,141 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" + /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "AppStore Debug" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Debug Staging" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Test" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "AppStore" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Release Staging" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Test Staging" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" + install_framework "$BUILT_PRODUCTS_DIR/FSHelpers+Swift/FSHelpers_Swift.framework" + install_framework "$BUILT_PRODUCTS_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework" + install_framework "$BUILT_PRODUCTS_DIR/MagicalRecord/MagicalRecord.framework" + install_framework "$BUILT_PRODUCTS_DIR/SVProgressHUD/SVProgressHUD.framework" +fi diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-resources.sh b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-resources.sh new file mode 100755 index 0000000..3bde11d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-resources.sh @@ -0,0 +1,126 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +realpath() { + DIRECTORY="$(cd "${1%/*}" && pwd)" + FILENAME="${1##*/}" + echo "$DIRECTORY/$FILENAME" +} + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + 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\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + 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}" + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "AppStore Debug" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Debug Staging" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Test" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "AppStore" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Release Staging" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi +if [[ "$CONFIGURATION" == "Test Staging" ]]; then + install_resource "GoogleSignIn/Resources/GoogleSignIn.bundle" +fi + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "`realpath $PODS_ROOT`*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-umbrella.h b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-umbrella.h new file mode 100644 index 0000000..21011d0 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests-umbrella.h @@ -0,0 +1,6 @@ +#import + + +FOUNDATION_EXPORT double Pods_Abstract_Swift_BaseUITestsVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_Abstract_Swift_BaseUITestsVersionString[]; + diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.appstore debug.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.appstore debug.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.appstore debug.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.appstore.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.appstore.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.appstore.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.debug staging.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.debug staging.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.debug staging.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.debug.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.debug.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.debug.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.modulemap b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.modulemap new file mode 100644 index 0000000..bf6c2ac --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.modulemap @@ -0,0 +1,6 @@ +framework module Pods_Abstract_Swift_BaseUITests { + umbrella header "Pods-Abstract-Authorization-moduleUITests-umbrella.h" + + export * + module * { export * } +} diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.release staging.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.release staging.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.release staging.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.release.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.release.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.release.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.test staging.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.test staging.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.test staging.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.test.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.test.xcconfig new file mode 100644 index 0000000..7185f5d --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/Pods-Abstract-Authorization-moduleUITests/Pods-Abstract-Authorization-moduleUITests.test.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift" "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleAppUtilities/Frameworks" "${PODS_ROOT}/GoogleAuthUtilities/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Google/Headers $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google/Libraries" $(inherited) "${PODS_ROOT}/GoogleSignIn/Libraries" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FSHelpers+Swift/FSHelpers_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/IOSLinkedInAPI/IOSLinkedInAPI.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord/MagicalRecord.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD/SVProgressHUD.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -isystem "${PODS_ROOT}/Headers/Public/Google" -isystem "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSignIn" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = $(inherited) -ObjC -l"GGLCore" -l"GGLSignIn" -l"GIPNSURL+FIFE_external" -l"SignIn_external" -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "AFNetworking" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreText" -framework "Crashlytics" -framework "FSHelpers_Swift" -framework "Fabric" -framework "GoogleAppUtilities" -framework "GoogleAuthUtilities" -framework "GoogleInterchangeUtilities" -framework "GoogleNetworkingUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "IOSLinkedInAPI" -framework "MagicalRecord" -framework "MessageUI" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/Info.plist b/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/Info.plist new file mode 100644 index 0000000..763f9a6 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.0.3 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-dummy.m b/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-dummy.m new file mode 100644 index 0000000..696032a --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_SVProgressHUD : NSObject +@end +@implementation PodsDummy_SVProgressHUD +@end diff --git a/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch b/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch new file mode 100644 index 0000000..aa992a4 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-umbrella.h b/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-umbrella.h new file mode 100644 index 0000000..6f4e5c2 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-umbrella.h @@ -0,0 +1,10 @@ +#import + +#import "SVIndefiniteAnimatedView.h" +#import "SVProgressAnimatedView.h" +#import "SVProgressHUD.h" +#import "SVRadialGradientLayer.h" + +FOUNDATION_EXPORT double SVProgressHUDVersionNumber; +FOUNDATION_EXPORT const unsigned char SVProgressHUDVersionString[]; + diff --git a/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.modulemap b/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.modulemap new file mode 100644 index 0000000..2eaf140 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.modulemap @@ -0,0 +1,6 @@ +framework module SVProgressHUD { + umbrella header "SVProgressHUD-umbrella.h" + + export * + module * { export * } +} diff --git a/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.xcconfig b/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.xcconfig new file mode 100644 index 0000000..e9ba2f3 --- /dev/null +++ b/Autorization:Registration Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SVProgressHUD +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/Google" "${PODS_ROOT}/Headers/Public/GoogleAppUtilities" "${PODS_ROOT}/Headers/Public/GoogleAuthUtilities" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSignIn" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" +OTHER_LDFLAGS = -framework "QuartzCore" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Autorization:Registration Example/README.md b/Autorization:Registration Example/README.md new file mode 100644 index 0000000..7dec84b --- /dev/null +++ b/Autorization:Registration Example/README.md @@ -0,0 +1,3 @@ +# Autorization-Registration Example + +Пример авторизации и регистрации юзера в приложении.В данном примере представлена базовая авторизация и регистрация по email и авторизация через социальные сети (Facebook, Linkedin, Google). diff --git a/Autorization:Registration Example/generate_entities.sh b/Autorization:Registration Example/generate_entities.sh new file mode 100644 index 0000000..c85e018 --- /dev/null +++ b/Autorization:Registration Example/generate_entities.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +PROJECT_NAME = "Authorization-module" +PATH = "$PWD/$PROJECT_NAME/CoreData" + +mogenerator --swift --model "$PATH/$PROJECT_NAME.xcdatamodeld" --machine-dir "$PATH/Private/" --human-dir "$PATH" + +sleep 3 \ No newline at end of file diff --git a/README.md b/README.md index d8e5bb4..3633a52 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ * [AFNetworking example](/AFNetworkingExample) (Пример использования AFNetworking. Рекомендацию по использованию.) * [SDWebImage example](/SDWebImageExample) (Пример использования SDWebImage) * [RestKit example](/RestKitExample) (Пример использования RestKit) +* [Authorization/registration example](/Autorization:Registration Example) (Пример авторизации и регистрации) #Cocoa