From e99334c7e87fb9683c8c40d1de19cab0f318afb4 Mon Sep 17 00:00:00 2001 From: S PRAVEENKUMAR Date: Thu, 2 Jan 2020 16:47:20 +0530 Subject: [PATCH 1/2] Updating podfile. --- Podfile | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Podfile b/Podfile index 440045a..3da9d1f 100644 --- a/Podfile +++ b/Podfile @@ -1,3 +1,12 @@ +source 'https://github.com/CocoaPods/Specs.git' + +# ignore all warnings from all pods +inhibit_all_warnings! + platform :ios, '8.3' -pod 'SVProgressHUD' \ No newline at end of file +target 'LoginTest' do + + pod 'SVProgressHUD' + +end From b12b9cbffedf88327aa970aa3e736e6d8581bb35 Mon Sep 17 00:00:00 2001 From: S PRAVEENKUMAR Date: Thu, 2 Jan 2020 16:53:36 +0530 Subject: [PATCH 2/2] Project updated based on latest podfile. --- LoginTest.xcodeproj/project.pbxproj | 55 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + Podfile.lock | 12 +- .../SVProgressHUD/SVProgressAnimatedView.h | 1 + .../SVProgressHUD/SVRadialGradientLayer.h | 1 + .../SVProgressHUD/SVProgressAnimatedView.h | 1 + .../SVProgressHUD/SVRadialGradientLayer.h | 1 + Pods/Pods.xcodeproj/project.pbxproj | 530 +++-- Pods/SVProgressHUD/LICENSE | 21 + Pods/SVProgressHUD/LICENSE.txt | 26 - Pods/SVProgressHUD/README.md | 136 +- .../SVProgressHUD/SVIndefiniteAnimatedView.h | 5 +- .../SVProgressHUD/SVIndefiniteAnimatedView.m | 64 +- .../SVProgressHUD/SVProgressAnimatedView.h | 17 + .../SVProgressHUD/SVProgressAnimatedView.m | 96 + .../SVProgressHUD.bundle/angle-mask.png | Bin 3482 -> 1845 bytes .../SVProgressHUD.bundle/angle-mask@2x.png | Bin 5614 -> 4893 bytes .../SVProgressHUD.bundle/angle-mask@3x.png | Bin 9389 -> 8319 bytes .../SVProgressHUD.bundle/error.png | Bin 455 -> 184 bytes .../SVProgressHUD.bundle/error@2x.png | Bin 1137 -> 306 bytes .../SVProgressHUD.bundle/error@3x.png | Bin 2315 -> 398 bytes .../SVProgressHUD.bundle/info.png | Bin 1123 -> 365 bytes .../SVProgressHUD.bundle/info@2x.png | Bin 2554 -> 816 bytes .../SVProgressHUD.bundle/info@3x.png | Bin 4385 -> 1200 bytes .../SVProgressHUD.bundle/success.png | Bin 349 -> 262 bytes .../SVProgressHUD.bundle/success@2x.png | Bin 811 -> 462 bytes .../SVProgressHUD.bundle/success@3x.png | Bin 1576 -> 714 bytes .../SVProgressHUD/SVProgressHUD.h | 152 +- .../SVProgressHUD/SVProgressHUD.m | 1795 +++++++++++------ .../SVProgressHUD/SVRadialGradientLayer.h | 14 + .../SVProgressHUD/SVRadialGradientLayer.m | 25 + .../Pods-LoginTest-acknowledgements.markdown | 28 + .../Pods-LoginTest-acknowledgements.plist | 60 + .../Pods-LoginTest/Pods-LoginTest-dummy.m | 5 + .../Pods-LoginTest-resources.sh | 129 ++ .../Pods-LoginTest.debug.xcconfig | 10 + .../Pods-LoginTest.release.xcconfig | 10 + .../Pods-SVProgressHUD-Private.xcconfig | 6 - .../Pods-SVProgressHUD-dummy.m | 5 - .../Pods-SVProgressHUD-prefix.pch | 5 - .../Pods-SVProgressHUD.xcconfig | 1 - .../Pods/Pods-acknowledgements.markdown | 32 - .../Pods/Pods-acknowledgements.plist | 62 - Pods/Target Support Files/Pods/Pods-dummy.m | 5 - .../Pods/Pods-environment.h | 14 - .../Pods/Pods-resources.sh | 99 - .../Pods/Pods.debug.xcconfig | 6 - .../Pods/Pods.release.xcconfig | 6 - .../SVProgressHUD/SVProgressHUD-dummy.m | 5 + .../SVProgressHUD/SVProgressHUD-prefix.pch | 12 + .../SVProgressHUD/SVProgressHUD.xcconfig | 10 + 51 files changed, 2209 insertions(+), 1261 deletions(-) create mode 100644 LoginTest.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 120000 Pods/Headers/Private/SVProgressHUD/SVProgressAnimatedView.h create mode 120000 Pods/Headers/Private/SVProgressHUD/SVRadialGradientLayer.h create mode 120000 Pods/Headers/Public/SVProgressHUD/SVProgressAnimatedView.h create mode 120000 Pods/Headers/Public/SVProgressHUD/SVRadialGradientLayer.h create mode 100644 Pods/SVProgressHUD/LICENSE delete mode 100644 Pods/SVProgressHUD/LICENSE.txt create mode 100644 Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.h create mode 100644 Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.m create mode 100644 Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.h create mode 100644 Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.m create mode 100644 Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-acknowledgements.markdown create mode 100644 Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-acknowledgements.plist create mode 100644 Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-dummy.m create mode 100755 Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-resources.sh create mode 100644 Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest.debug.xcconfig create mode 100644 Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest.release.xcconfig delete mode 100644 Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-Private.xcconfig delete mode 100644 Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-dummy.m delete mode 100644 Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-prefix.pch delete mode 100644 Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD.xcconfig delete mode 100644 Pods/Target Support Files/Pods/Pods-acknowledgements.markdown delete mode 100644 Pods/Target Support Files/Pods/Pods-acknowledgements.plist delete mode 100644 Pods/Target Support Files/Pods/Pods-dummy.m delete mode 100644 Pods/Target Support Files/Pods/Pods-environment.h delete mode 100755 Pods/Target Support Files/Pods/Pods-resources.sh delete mode 100644 Pods/Target Support Files/Pods/Pods.debug.xcconfig delete mode 100644 Pods/Target Support Files/Pods/Pods.release.xcconfig create mode 100644 Pods/Target Support Files/SVProgressHUD/SVProgressHUD-dummy.m create mode 100644 Pods/Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch create mode 100644 Pods/Target Support Files/SVProgressHUD/SVProgressHUD.xcconfig diff --git a/LoginTest.xcodeproj/project.pbxproj b/LoginTest.xcodeproj/project.pbxproj index fbe419a..713b0c7 100644 --- a/LoginTest.xcodeproj/project.pbxproj +++ b/LoginTest.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 1B211FBB984DC3F394200D6F /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C54DF8A010A3099B5CEB26C9 /* libPods.a */; }; 1EA074401B2B4453000927D1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EA0743F1B2B4453000927D1 /* main.m */; }; 1EA074491B2B4453000927D1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1EA074471B2B4453000927D1 /* Main.storyboard */; }; 1EA0744B1B2B4453000927D1 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1EA0744A1B2B4453000927D1 /* Images.xcassets */; }; @@ -21,6 +20,7 @@ 1EA0748E1B2B4506000927D1 /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EA074871B2B4506000927D1 /* LoginViewController.m */; }; 1EA0748F1B2B4506000927D1 /* ProgressHUDViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EA074891B2B4506000927D1 /* ProgressHUDViewController.m */; }; 1EA074921B2B45CD000927D1 /* FeedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EA074911B2B45CD000927D1 /* FeedViewController.m */; }; + EBC12262564771EC04CE5A2C /* libPods-LoginTest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 77FF05936C1BF9E9D6FEE5EE /* libPods-LoginTest.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -34,7 +34,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 14F4A95DDD48B046A1D2BC7D /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; 1EA0743A1B2B4453000927D1 /* LoginTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LoginTest.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1EA0743E1B2B4453000927D1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 1EA0743F1B2B4453000927D1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; @@ -60,8 +59,9 @@ 1EA074891B2B4506000927D1 /* ProgressHUDViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProgressHUDViewController.m; sourceTree = ""; }; 1EA074901B2B45CD000927D1 /* FeedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FeedViewController.h; sourceTree = ""; }; 1EA074911B2B45CD000927D1 /* FeedViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FeedViewController.m; sourceTree = ""; }; - 2DB72B4FD648AA71C60524D4 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; - C54DF8A010A3099B5CEB26C9 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 77FF05936C1BF9E9D6FEE5EE /* libPods-LoginTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-LoginTest.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 9F673F237DF862B45408813E /* Pods-LoginTest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LoginTest.debug.xcconfig"; path = "Target Support Files/Pods-LoginTest/Pods-LoginTest.debug.xcconfig"; sourceTree = ""; }; + A901D7ED00B30289EEE6A7C4 /* Pods-LoginTest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LoginTest.release.xcconfig"; path = "Target Support Files/Pods-LoginTest/Pods-LoginTest.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -69,7 +69,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1B211FBB984DC3F394200D6F /* libPods.a in Frameworks */, + EBC12262564771EC04CE5A2C /* libPods-LoginTest.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -89,8 +89,8 @@ 1EA0743C1B2B4453000927D1 /* LoginTest */, 1EA074561B2B4454000927D1 /* LoginTestTests */, 1EA0743B1B2B4453000927D1 /* Products */, - 230C5F498CDCD7ABF6B6694F /* Pods */, - 47AB9D9A30519F877687B766 /* Frameworks */, + 7C1D840F0E1BD6CA8554751A /* Pods */, + 8C8A09BE1DA62E806D2F4A4A /* Frameworks */, ); sourceTree = ""; }; @@ -180,19 +180,20 @@ path = ViewControllers; sourceTree = ""; }; - 230C5F498CDCD7ABF6B6694F /* Pods */ = { + 7C1D840F0E1BD6CA8554751A /* Pods */ = { isa = PBXGroup; children = ( - 2DB72B4FD648AA71C60524D4 /* Pods.debug.xcconfig */, - 14F4A95DDD48B046A1D2BC7D /* Pods.release.xcconfig */, + 9F673F237DF862B45408813E /* Pods-LoginTest.debug.xcconfig */, + A901D7ED00B30289EEE6A7C4 /* Pods-LoginTest.release.xcconfig */, ); name = Pods; + path = Pods; sourceTree = ""; }; - 47AB9D9A30519F877687B766 /* Frameworks */ = { + 8C8A09BE1DA62E806D2F4A4A /* Frameworks */ = { isa = PBXGroup; children = ( - C54DF8A010A3099B5CEB26C9 /* libPods.a */, + 77FF05936C1BF9E9D6FEE5EE /* libPods-LoginTest.a */, ); name = Frameworks; sourceTree = ""; @@ -204,11 +205,11 @@ isa = PBXNativeTarget; buildConfigurationList = 1EA0745D1B2B4454000927D1 /* Build configuration list for PBXNativeTarget "LoginTest" */; buildPhases = ( - F2154A45DE98D4BC6962CC0E /* Check Pods Manifest.lock */, + F408BD86EB9281F72A7861A6 /* [CP] Check Pods Manifest.lock */, 1EA074361B2B4453000927D1 /* Sources */, 1EA074371B2B4453000927D1 /* Frameworks */, 1EA074381B2B4453000927D1 /* Resources */, - F1DFD59844A29A444A15DA28 /* Copy Pods Resources */, + 4850E6A56E1D4395FDD37FBF /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -295,34 +296,44 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - F1DFD59844A29A444A15DA28 /* Copy Pods Resources */ = { + 4850E6A56E1D4395FDD37FBF /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-LoginTest/Pods-LoginTest-resources.sh", + "${PODS_ROOT}/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle", ); - name = "Copy Pods Resources"; + name = "[CP] Copy Pods Resources"; outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SVProgressHUD.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-LoginTest/Pods-LoginTest-resources.sh\"\n"; showEnvVarsInLog = 0; }; - F2154A45DE98D4BC6962CC0E /* Check Pods Manifest.lock */ = { + F408BD86EB9281F72A7861A6 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-LoginTest-checkManifestLockResult.txt", ); 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"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -464,7 +475,7 @@ }; 1EA0745E1B2B4454000927D1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2DB72B4FD648AA71C60524D4 /* Pods.debug.xcconfig */; + baseConfigurationReference = 9F673F237DF862B45408813E /* Pods-LoginTest.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = LoginTest/Info.plist; @@ -475,7 +486,7 @@ }; 1EA0745F1B2B4454000927D1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 14F4A95DDD48B046A1D2BC7D /* Pods.release.xcconfig */; + baseConfigurationReference = A901D7ED00B30289EEE6A7C4 /* Pods-LoginTest.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = LoginTest/Info.plist; diff --git a/LoginTest.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/LoginTest.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/LoginTest.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Podfile.lock b/Podfile.lock index 1317e10..b7d3a2c 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,10 +1,16 @@ PODS: - - SVProgressHUD (1.1.3) + - SVProgressHUD (2.2.5) DEPENDENCIES: - SVProgressHUD +SPEC REPOS: + https://github.com/CocoaPods/Specs.git: + - SVProgressHUD + SPEC CHECKSUMS: - SVProgressHUD: 748080e4f36e603f6c02aec292664239df5279c1 + SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6 + +PODFILE CHECKSUM: d98a9e9d1346151879a63de8a6594e2319cd7f8b -COCOAPODS: 0.37.2 +COCOAPODS: 1.8.4 diff --git a/Pods/Headers/Private/SVProgressHUD/SVProgressAnimatedView.h b/Pods/Headers/Private/SVProgressHUD/SVProgressAnimatedView.h new file mode 120000 index 0000000..581cdc2 --- /dev/null +++ b/Pods/Headers/Private/SVProgressHUD/SVProgressAnimatedView.h @@ -0,0 +1 @@ +../../../SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.h \ No newline at end of file diff --git a/Pods/Headers/Private/SVProgressHUD/SVRadialGradientLayer.h b/Pods/Headers/Private/SVProgressHUD/SVRadialGradientLayer.h new file mode 120000 index 0000000..d78beb5 --- /dev/null +++ b/Pods/Headers/Private/SVProgressHUD/SVRadialGradientLayer.h @@ -0,0 +1 @@ +../../../SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.h \ No newline at end of file diff --git a/Pods/Headers/Public/SVProgressHUD/SVProgressAnimatedView.h b/Pods/Headers/Public/SVProgressHUD/SVProgressAnimatedView.h new file mode 120000 index 0000000..581cdc2 --- /dev/null +++ b/Pods/Headers/Public/SVProgressHUD/SVProgressAnimatedView.h @@ -0,0 +1 @@ +../../../SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.h \ No newline at end of file diff --git a/Pods/Headers/Public/SVProgressHUD/SVRadialGradientLayer.h b/Pods/Headers/Public/SVProgressHUD/SVRadialGradientLayer.h new file mode 120000 index 0000000..d78beb5 --- /dev/null +++ b/Pods/Headers/Public/SVProgressHUD/SVRadialGradientLayer.h @@ -0,0 +1 @@ +../../../SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.h \ No newline at end of file diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 63ed8ac..aebddc6 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,447 +7,529 @@ objects = { /* Begin PBXBuildFile section */ - 042636AEAC316030CE745A86 /* SVIndefiniteAnimatedView.h in Headers */ = {isa = PBXBuildFile; fileRef = 55CE4936D4DBBA4EFCDA5A69 /* SVIndefiniteAnimatedView.h */; }; - 197466A84870BDA5CDE1E4A3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5A7046205C1BD7149EB3D26 /* Foundation.framework */; }; - 33F422D2BCF9FC4A00FDA93A /* SVProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 898C553F41FB2D3BEAF20A86 /* SVProgressHUD.h */; }; - 340964851C91709A277213AB /* SVProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 03D10F9E0B29308791F95D56 /* SVProgressHUD.m */; }; - 847B5A9F831F1732A6C2128F /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 907CF3437B48F10194FE8102 /* Pods-dummy.m */; }; - B9B9E3763054109BAEAE2F66 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5A7046205C1BD7149EB3D26 /* Foundation.framework */; }; - CA3895066B6D92750F074275 /* Pods-SVProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BDB4CA45449942F44A8EBFC9 /* Pods-SVProgressHUD-dummy.m */; }; - F04F5497CDF9D262371FF9AD /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C485C7A5DFED0FCCFE79F8D /* QuartzCore.framework */; }; - F4989713319861D8CD8C0293 /* SVIndefiniteAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 615AF444A7AF44267258B0CA /* SVIndefiniteAnimatedView.m */; }; + 1B77D7340EC83E839FAE3D9BB7DF0D1F /* SVProgressAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 20D08639B0271F98A44D5F0F8E2F8607 /* SVProgressAnimatedView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 56BC27D1E6C748409D085B72FBFB8C7F /* SVRadialGradientLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = CFA759A36CB1409017901190F1FC2A7A /* SVRadialGradientLayer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 72EA5E1F693FE30D163352247713AEFF /* SVProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 60F7C3E4E5FACDD6DC6A630B7F6B9686 /* SVProgressHUD.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8649FA19DB7585214273380164946561 /* SVIndefiniteAnimatedView.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CF6F9E99C7BF564D6B3EB82F965D2A /* SVIndefiniteAnimatedView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A969E95482A31575E1C6564CB5BDB47C /* Pods-LoginTest-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A0E637F47244D56B3938D973FBBD9F8 /* Pods-LoginTest-dummy.m */; }; + AF559EEBDEEDF421756966862ED3E746 /* SVProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = BAC49A7CE7ECE755E6E63847089197BA /* SVProgressHUD.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C0E2C41633CCA2B473A186ADDE148122 /* SVIndefiniteAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 14568125DFBE9811A7712EDC9D261523 /* SVIndefiniteAnimatedView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DC85A1CC87F3496C48D0CC2B09E5322F /* SVRadialGradientLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = B31EA996820E75509A6F1A66224B98E1 /* SVRadialGradientLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E56ED51862897266BF586BA26965E137 /* SVProgressAnimatedView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AB6F0348824106F1A32575E935F1B3D /* SVProgressAnimatedView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED141E898A6F86747999A58190D2CBCB /* SVProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DF44C5569AE1FA9DA45F5CFD55B301B6 /* SVProgressHUD-dummy.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - D63956A70B0912EA3B61DED5 /* PBXContainerItemProxy */ = { + 7A8FA8351E54C1810F5BFF8C3F0E1EAE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 8A10149CD33B86ACA362DD3D /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = A1C4541A397C275F94AB75DD; - remoteInfo = "Pods-SVProgressHUD"; + remoteGlobalIDString = 1C8D67D8B72D6BA42CCEDB648537A340; + remoteInfo = SVProgressHUD; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 03D10F9E0B29308791F95D56 /* SVProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVProgressHUD.m; path = SVProgressHUD/SVProgressHUD.m; sourceTree = ""; }; - 0C485C7A5DFED0FCCFE79F8D /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 3682391B30DF0D4CF1018CEB /* libPods-SVProgressHUD.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SVProgressHUD.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 39A100919AA96979359BFD73 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; - 4B3EBB33EE48FA06B89CB507 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 55CE4936D4DBBA4EFCDA5A69 /* SVIndefiniteAnimatedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVIndefiniteAnimatedView.h; path = SVProgressHUD/SVIndefiniteAnimatedView.h; sourceTree = ""; }; - 615AF444A7AF44267258B0CA /* SVIndefiniteAnimatedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVIndefiniteAnimatedView.m; path = SVProgressHUD/SVIndefiniteAnimatedView.m; sourceTree = ""; }; - 7BE8859275A32F06F1C40B2E /* Pods-environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-environment.h"; sourceTree = ""; }; - 898C553F41FB2D3BEAF20A86 /* SVProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVProgressHUD.h; path = SVProgressHUD/SVProgressHUD.h; sourceTree = ""; }; - 907CF3437B48F10194FE8102 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; - 9F0CD45A011F9EF5E0BD6B4D /* Pods-SVProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SVProgressHUD-prefix.pch"; sourceTree = ""; }; - AE0911E3F6E282A39F686491 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; - BDB4CA45449942F44A8EBFC9 /* Pods-SVProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SVProgressHUD-dummy.m"; sourceTree = ""; }; - C9FBE988BB585237C082E39D /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; - D1D5B383953D4DC9576172A5 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; - D6C958FD133856F0CF81E654 /* Pods-SVProgressHUD-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SVProgressHUD-Private.xcconfig"; sourceTree = ""; }; - D7A2874E80CD1BC494F009C2 /* Pods-SVProgressHUD.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SVProgressHUD.xcconfig"; sourceTree = ""; }; - DD3BFF42EBDE9EE8963E0226 /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - E5A7046205C1BD7149EB3D26 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - EDA0A65B84057D63634616B0 /* SVProgressHUD.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SVProgressHUD.bundle; path = SVProgressHUD/SVProgressHUD.bundle; sourceTree = ""; }; - FD6D0CFBFACBCB1845A85B73 /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; + 0315BC61C08C1C68948CF6ACFD288F5B /* SVProgressHUD.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SVProgressHUD.xcconfig; sourceTree = ""; }; + 14568125DFBE9811A7712EDC9D261523 /* SVIndefiniteAnimatedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVIndefiniteAnimatedView.m; path = SVProgressHUD/SVIndefiniteAnimatedView.m; sourceTree = ""; }; + 20D08639B0271F98A44D5F0F8E2F8607 /* SVProgressAnimatedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVProgressAnimatedView.m; path = SVProgressHUD/SVProgressAnimatedView.m; sourceTree = ""; }; + 22AA93936C9677EC1B0252A2EBC32C9D /* Pods-LoginTest-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-LoginTest-resources.sh"; sourceTree = ""; }; + 60F7C3E4E5FACDD6DC6A630B7F6B9686 /* SVProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVProgressHUD.m; path = SVProgressHUD/SVProgressHUD.m; sourceTree = ""; }; + 6A3D692446111D57E2899865A679E2B5 /* Pods-LoginTest-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-LoginTest-acknowledgements.markdown"; sourceTree = ""; }; + 6B8D9C85B36940F71FC4E7A8B30E5A20 /* Pods-LoginTest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LoginTest.debug.xcconfig"; sourceTree = ""; }; + 7AB6F0348824106F1A32575E935F1B3D /* SVProgressAnimatedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVProgressAnimatedView.h; path = SVProgressHUD/SVProgressAnimatedView.h; sourceTree = ""; }; + 7CCAA4F55ABAA30DF48CA2019A47FA92 /* Pods-LoginTest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LoginTest.release.xcconfig"; sourceTree = ""; }; + 84CF6F9E99C7BF564D6B3EB82F965D2A /* SVIndefiniteAnimatedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVIndefiniteAnimatedView.h; path = SVProgressHUD/SVIndefiniteAnimatedView.h; sourceTree = ""; }; + 8A0E637F47244D56B3938D973FBBD9F8 /* Pods-LoginTest-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-LoginTest-dummy.m"; sourceTree = ""; }; + 9065E1B08BC6795182FB224BD45DB0DF /* SVProgressHUD.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SVProgressHUD.bundle; path = SVProgressHUD/SVProgressHUD.bundle; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + B31EA996820E75509A6F1A66224B98E1 /* SVRadialGradientLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVRadialGradientLayer.h; path = SVProgressHUD/SVRadialGradientLayer.h; sourceTree = ""; }; + B64FCA31F3161D6CC5225E2B6F4CA3DE /* Pods-LoginTest-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LoginTest-acknowledgements.plist"; sourceTree = ""; }; + BAC49A7CE7ECE755E6E63847089197BA /* SVProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVProgressHUD.h; path = SVProgressHUD/SVProgressHUD.h; sourceTree = ""; }; + C7D1F167F23D9952BE80F869A9899E34 /* libPods-LoginTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-LoginTest.a"; path = "libPods-LoginTest.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + CFA759A36CB1409017901190F1FC2A7A /* SVRadialGradientLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVRadialGradientLayer.m; path = SVProgressHUD/SVRadialGradientLayer.m; sourceTree = ""; }; + D030593D25D3CEAC5DC5044519DB247C /* SVProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SVProgressHUD-prefix.pch"; sourceTree = ""; }; + DF44C5569AE1FA9DA45F5CFD55B301B6 /* SVProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SVProgressHUD-dummy.m"; sourceTree = ""; }; + E97D43C46A45EE515A4DA3AF94398441 /* libSVProgressHUD.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSVProgressHUD.a; path = libSVProgressHUD.a; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7607E1445EE2137BC998A804 /* Frameworks */ = { + 70010619EE67FAA5998927DE2714A46F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 197466A84870BDA5CDE1E4A3 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DAA9AB2AE2AAE10F887EFBFB /* Frameworks */ = { + 81428D9CEAD033E095357BE9F06871E5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B9B9E3763054109BAEAE2F66 /* Foundation.framework in Frameworks */, - F04F5497CDF9D262371FF9AD /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 3FB6AD5E27D45B265FD28E45 /* SVProgressHUD */ = { + 0A5C7991893E2E8BE3B4B65034591FD1 /* Resources */ = { isa = PBXGroup; children = ( - 55CE4936D4DBBA4EFCDA5A69 /* SVIndefiniteAnimatedView.h */, - 615AF444A7AF44267258B0CA /* SVIndefiniteAnimatedView.m */, - 898C553F41FB2D3BEAF20A86 /* SVProgressHUD.h */, - 03D10F9E0B29308791F95D56 /* SVProgressHUD.m */, - 6E8C66682AD1D0C3905CC18A /* Resources */, - 772CCE73BD638BAE3EB94D19 /* Support Files */, + 9065E1B08BC6795182FB224BD45DB0DF /* SVProgressHUD.bundle */, ); - path = SVProgressHUD; + name = Resources; sourceTree = ""; }; - 3FE0589D1C80E70C2438DB88 = { + 22B20973C5AE08EF25B525F0D17A498D /* Pods-LoginTest */ = { isa = PBXGroup; children = ( - DD3BFF42EBDE9EE8963E0226 /* Podfile */, - 577180F54A2942C8A120DC66 /* Frameworks */, - 5CAB46EFF2B1ED3B59A29152 /* Pods */, - E5A0EA1B881B5464FB1FD54B /* Products */, - D36D0F52EBDD8337EE82F919 /* Targets Support Files */, + 6A3D692446111D57E2899865A679E2B5 /* Pods-LoginTest-acknowledgements.markdown */, + B64FCA31F3161D6CC5225E2B6F4CA3DE /* Pods-LoginTest-acknowledgements.plist */, + 8A0E637F47244D56B3938D973FBBD9F8 /* Pods-LoginTest-dummy.m */, + 22AA93936C9677EC1B0252A2EBC32C9D /* Pods-LoginTest-resources.sh */, + 6B8D9C85B36940F71FC4E7A8B30E5A20 /* Pods-LoginTest.debug.xcconfig */, + 7CCAA4F55ABAA30DF48CA2019A47FA92 /* Pods-LoginTest.release.xcconfig */, ); + name = "Pods-LoginTest"; + path = "Target Support Files/Pods-LoginTest"; sourceTree = ""; }; - 4DA6F0522DE025A855B2B97F /* iOS */ = { + 43516AB8CC85390026043B9E347C3C80 /* Targets Support Files */ = { isa = PBXGroup; children = ( - E5A7046205C1BD7149EB3D26 /* Foundation.framework */, - 0C485C7A5DFED0FCCFE79F8D /* QuartzCore.framework */, + 22B20973C5AE08EF25B525F0D17A498D /* Pods-LoginTest */, ); - name = iOS; + name = "Targets Support Files"; sourceTree = ""; }; - 577180F54A2942C8A120DC66 /* Frameworks */ = { + 4D0A859C794BC335782BA7BD7115B139 /* Support Files */ = { isa = PBXGroup; children = ( - 4DA6F0522DE025A855B2B97F /* iOS */, + 0315BC61C08C1C68948CF6ACFD288F5B /* SVProgressHUD.xcconfig */, + DF44C5569AE1FA9DA45F5CFD55B301B6 /* SVProgressHUD-dummy.m */, + D030593D25D3CEAC5DC5044519DB247C /* SVProgressHUD-prefix.pch */, ); - name = Frameworks; + name = "Support Files"; + path = "../Target Support Files/SVProgressHUD"; sourceTree = ""; }; - 5CAB46EFF2B1ED3B59A29152 /* Pods */ = { + 81471FC60B3BF6BEA835759D3D609677 /* Products */ = { isa = PBXGroup; children = ( - 3FB6AD5E27D45B265FD28E45 /* SVProgressHUD */, + C7D1F167F23D9952BE80F869A9899E34 /* libPods-LoginTest.a */, + E97D43C46A45EE515A4DA3AF94398441 /* libSVProgressHUD.a */, ); - name = Pods; + name = Products; sourceTree = ""; }; - 6E8C66682AD1D0C3905CC18A /* Resources */ = { + C7850BD3ABF2457520D6FC41F41A57F5 /* SVProgressHUD */ = { isa = PBXGroup; children = ( - EDA0A65B84057D63634616B0 /* SVProgressHUD.bundle */, + 84CF6F9E99C7BF564D6B3EB82F965D2A /* SVIndefiniteAnimatedView.h */, + 14568125DFBE9811A7712EDC9D261523 /* SVIndefiniteAnimatedView.m */, + 7AB6F0348824106F1A32575E935F1B3D /* SVProgressAnimatedView.h */, + 20D08639B0271F98A44D5F0F8E2F8607 /* SVProgressAnimatedView.m */, + BAC49A7CE7ECE755E6E63847089197BA /* SVProgressHUD.h */, + 60F7C3E4E5FACDD6DC6A630B7F6B9686 /* SVProgressHUD.m */, + B31EA996820E75509A6F1A66224B98E1 /* SVRadialGradientLayer.h */, + CFA759A36CB1409017901190F1FC2A7A /* SVRadialGradientLayer.m */, + 0A5C7991893E2E8BE3B4B65034591FD1 /* Resources */, + 4D0A859C794BC335782BA7BD7115B139 /* Support Files */, ); - name = Resources; + name = SVProgressHUD; + path = SVProgressHUD; sourceTree = ""; }; - 772CCE73BD638BAE3EB94D19 /* Support Files */ = { + CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( - D7A2874E80CD1BC494F009C2 /* Pods-SVProgressHUD.xcconfig */, - D6C958FD133856F0CF81E654 /* Pods-SVProgressHUD-Private.xcconfig */, - BDB4CA45449942F44A8EBFC9 /* Pods-SVProgressHUD-dummy.m */, - 9F0CD45A011F9EF5E0BD6B4D /* Pods-SVProgressHUD-prefix.pch */, + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + D89477F20FB1DE18A04690586D7808C4 /* Frameworks */, + D0F28EFC8C9E325880381D586C3CA919 /* Pods */, + 81471FC60B3BF6BEA835759D3D609677 /* Products */, + 43516AB8CC85390026043B9E347C3C80 /* Targets Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/Pods-SVProgressHUD"; sourceTree = ""; }; - 81BBCA3562DB6484DF67A8B4 /* Pods */ = { + D0F28EFC8C9E325880381D586C3CA919 /* Pods */ = { isa = PBXGroup; children = ( - FD6D0CFBFACBCB1845A85B73 /* Pods-acknowledgements.markdown */, - AE0911E3F6E282A39F686491 /* Pods-acknowledgements.plist */, - 907CF3437B48F10194FE8102 /* Pods-dummy.m */, - 7BE8859275A32F06F1C40B2E /* Pods-environment.h */, - C9FBE988BB585237C082E39D /* Pods-resources.sh */, - 39A100919AA96979359BFD73 /* Pods.debug.xcconfig */, - D1D5B383953D4DC9576172A5 /* Pods.release.xcconfig */, + C7850BD3ABF2457520D6FC41F41A57F5 /* SVProgressHUD */, ); name = Pods; - path = "Target Support Files/Pods"; - sourceTree = ""; - }; - D36D0F52EBDD8337EE82F919 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 81BBCA3562DB6484DF67A8B4 /* Pods */, - ); - name = "Targets Support Files"; sourceTree = ""; }; - E5A0EA1B881B5464FB1FD54B /* Products */ = { + D89477F20FB1DE18A04690586D7808C4 /* Frameworks */ = { isa = PBXGroup; children = ( - 4B3EBB33EE48FA06B89CB507 /* libPods.a */, - 3682391B30DF0D4CF1018CEB /* libPods-SVProgressHUD.a */, ); - name = Products; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 6B7721005A6D17FA0AC94435 /* Headers */ = { + 5336EE1026123A36261CDF1B600F4293 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E41722A1BD41872D45B97FCEF2427E81 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 042636AEAC316030CE745A86 /* SVIndefiniteAnimatedView.h in Headers */, - 33F422D2BCF9FC4A00FDA93A /* SVProgressHUD.h in Headers */, + 8649FA19DB7585214273380164946561 /* SVIndefiniteAnimatedView.h in Headers */, + E56ED51862897266BF586BA26965E137 /* SVProgressAnimatedView.h in Headers */, + AF559EEBDEEDF421756966862ED3E746 /* SVProgressHUD.h in Headers */, + DC85A1CC87F3496C48D0CC2B09E5322F /* SVRadialGradientLayer.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - A1C4541A397C275F94AB75DD /* Pods-SVProgressHUD */ = { + 1C8D67D8B72D6BA42CCEDB648537A340 /* SVProgressHUD */ = { isa = PBXNativeTarget; - buildConfigurationList = 7FD1F4739A40783224AB773F /* Build configuration list for PBXNativeTarget "Pods-SVProgressHUD" */; + buildConfigurationList = F49D2BFAAA78D95C1429E59AB1A23ACE /* Build configuration list for PBXNativeTarget "SVProgressHUD" */; buildPhases = ( - 29506066AE7617B0A7124E98 /* Sources */, - DAA9AB2AE2AAE10F887EFBFB /* Frameworks */, - 6B7721005A6D17FA0AC94435 /* Headers */, + E41722A1BD41872D45B97FCEF2427E81 /* Headers */, + 653EF978AC8050BE5586582A6F468FE9 /* Sources */, + 70010619EE67FAA5998927DE2714A46F /* Frameworks */, ); buildRules = ( ); dependencies = ( ); - name = "Pods-SVProgressHUD"; - productName = "Pods-SVProgressHUD"; - productReference = 3682391B30DF0D4CF1018CEB /* libPods-SVProgressHUD.a */; + name = SVProgressHUD; + productName = SVProgressHUD; + productReference = E97D43C46A45EE515A4DA3AF94398441 /* libSVProgressHUD.a */; productType = "com.apple.product-type.library.static"; }; - D833111359BED461AA10E90F /* Pods */ = { + B4DA059EACF89961B801C770F029F7C0 /* Pods-LoginTest */ = { isa = PBXNativeTarget; - buildConfigurationList = 5409C28B97C5332F9B0B02F5 /* Build configuration list for PBXNativeTarget "Pods" */; + buildConfigurationList = F990FBBEF3DCB1F2F886FAFAF73A01E5 /* Build configuration list for PBXNativeTarget "Pods-LoginTest" */; buildPhases = ( - 6596F0CC3BCAB9F854FDFBB4 /* Sources */, - 7607E1445EE2137BC998A804 /* Frameworks */, + 5336EE1026123A36261CDF1B600F4293 /* Headers */, + DE3508FE9557F5763290B6E591D61448 /* Sources */, + 81428D9CEAD033E095357BE9F06871E5 /* Frameworks */, ); buildRules = ( ); dependencies = ( - 489AA9A23463AB9E7D91531B /* PBXTargetDependency */, + 7C87F918AA9822323EFD246C637DFBFF /* PBXTargetDependency */, ); - name = Pods; - productName = Pods; - productReference = 4B3EBB33EE48FA06B89CB507 /* libPods.a */; + name = "Pods-LoginTest"; + productName = "Pods-LoginTest"; + productReference = C7D1F167F23D9952BE80F869A9899E34 /* libPods-LoginTest.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 8A10149CD33B86ACA362DD3D /* Project object */ = { + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0640; + LastSwiftUpdateCheck = 1100; + LastUpgradeCheck = 1100; }; - buildConfigurationList = 12CF2794175B6E939CE42242 /* Build configuration list for PBXProject "Pods" */; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); - mainGroup = 3FE0589D1C80E70C2438DB88; - productRefGroup = E5A0EA1B881B5464FB1FD54B /* Products */; + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = 81471FC60B3BF6BEA835759D3D609677 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - D833111359BED461AA10E90F /* Pods */, - A1C4541A397C275F94AB75DD /* Pods-SVProgressHUD */, + B4DA059EACF89961B801C770F029F7C0 /* Pods-LoginTest */, + 1C8D67D8B72D6BA42CCEDB648537A340 /* SVProgressHUD */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 29506066AE7617B0A7124E98 /* Sources */ = { + 653EF978AC8050BE5586582A6F468FE9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - CA3895066B6D92750F074275 /* Pods-SVProgressHUD-dummy.m in Sources */, - F4989713319861D8CD8C0293 /* SVIndefiniteAnimatedView.m in Sources */, - 340964851C91709A277213AB /* SVProgressHUD.m in Sources */, + C0E2C41633CCA2B473A186ADDE148122 /* SVIndefiniteAnimatedView.m in Sources */, + 1B77D7340EC83E839FAE3D9BB7DF0D1F /* SVProgressAnimatedView.m in Sources */, + ED141E898A6F86747999A58190D2CBCB /* SVProgressHUD-dummy.m in Sources */, + 72EA5E1F693FE30D163352247713AEFF /* SVProgressHUD.m in Sources */, + 56BC27D1E6C748409D085B72FBFB8C7F /* SVRadialGradientLayer.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6596F0CC3BCAB9F854FDFBB4 /* Sources */ = { + DE3508FE9557F5763290B6E591D61448 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 847B5A9F831F1732A6C2128F /* Pods-dummy.m in Sources */, + A969E95482A31575E1C6564CB5BDB47C /* Pods-LoginTest-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 489AA9A23463AB9E7D91531B /* PBXTargetDependency */ = { + 7C87F918AA9822323EFD246C637DFBFF /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Pods-SVProgressHUD"; - target = A1C4541A397C275F94AB75DD /* Pods-SVProgressHUD */; - targetProxy = D63956A70B0912EA3B61DED5 /* PBXContainerItemProxy */; + name = SVProgressHUD; + target = 1C8D67D8B72D6BA42CCEDB648537A340 /* SVProgressHUD */; + targetProxy = 7A8FA8351E54C1810F5BFF8C3F0E1EAE /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 0A5CC368D1015B09C6C7507F /* Debug */ = { + 1129C142CDE7F93E5F65C52D9847FDBF /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0315BC61C08C1C68948CF6ACFD288F5B /* SVProgressHUD.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SVProgressHUD; + PRODUCT_NAME = SVProgressHUD; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 50EC99FE4F5149CD0D3CA75F80156461 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6B8D9C85B36940F71FC4E7A8B30E5A20 /* Pods-LoginTest.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + MACH_O_TYPE = staticlib; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 60A7F9B4A8E92A5B16CC2AA887D9FE07 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", + "POD_CONFIGURATION_RELEASE=1", "$(inherited)", ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.3; - ONLY_ACTIVE_ARCH = YES; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - 4A01F6E750BE7BE57B2649E6 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D1D5B383953D4DC9576172A5 /* Pods.release.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; + MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; }; name = Release; }; - 5654BB8D68162F7C76514671 /* Debug */ = { + 7E1F3D358966F24610AD782F313B4C40 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 39A100919AA96979359BFD73 /* Pods.debug.xcconfig */; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + 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.3; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; }; name = Debug; }; - 776F5BE766453B0B44E21A6A /* Release */ = { + 9DCC146A1E7504234ED9C911D69FCC90 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D6C958FD133856F0CF81E654 /* Pods-SVProgressHUD-Private.xcconfig */; + baseConfigurationReference = 7CCAA4F55ABAA30DF48CA2019A47FA92 /* Pods-LoginTest.release.xcconfig */; buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-prefix.pch"; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; IPHONEOS_DEPLOYMENT_TARGET = 8.3; - MTL_ENABLE_DEBUG_INFO = NO; + MACH_O_TYPE = staticlib; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; SDKROOT = iphoneos; SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; }; name = Release; }; - B083B1426D44EE6AFB138D32 /* Debug */ = { + C91E657779E99963233F116F53683F78 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D6C958FD133856F0CF81E654 /* Pods-SVProgressHUD-Private.xcconfig */; + baseConfigurationReference = 0315BC61C08C1C68948CF6ACFD288F5B /* SVProgressHUD.xcconfig */; buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - MTL_ENABLE_DEBUG_INFO = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SVProgressHUD; + PRODUCT_NAME = SVProgressHUD; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - EEC5B0468B2C997CB6B8B247 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - 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 = "RELEASE=1"; - 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.3; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 12CF2794175B6E939CE42242 /* Build configuration list for PBXProject "Pods" */ = { + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 0A5CC368D1015B09C6C7507F /* Debug */, - EEC5B0468B2C997CB6B8B247 /* Release */, + 7E1F3D358966F24610AD782F313B4C40 /* Debug */, + 60A7F9B4A8E92A5B16CC2AA887D9FE07 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5409C28B97C5332F9B0B02F5 /* Build configuration list for PBXNativeTarget "Pods" */ = { + F49D2BFAAA78D95C1429E59AB1A23ACE /* Build configuration list for PBXNativeTarget "SVProgressHUD" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5654BB8D68162F7C76514671 /* Debug */, - 4A01F6E750BE7BE57B2649E6 /* Release */, + C91E657779E99963233F116F53683F78 /* Debug */, + 1129C142CDE7F93E5F65C52D9847FDBF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7FD1F4739A40783224AB773F /* Build configuration list for PBXNativeTarget "Pods-SVProgressHUD" */ = { + F990FBBEF3DCB1F2F886FAFAF73A01E5 /* Build configuration list for PBXNativeTarget "Pods-LoginTest" */ = { isa = XCConfigurationList; buildConfigurations = ( - B083B1426D44EE6AFB138D32 /* Debug */, - 776F5BE766453B0B44E21A6A /* Release */, + 50EC99FE4F5149CD0D3CA75F80156461 /* Debug */, + 9DCC146A1E7504234ED9C911D69FCC90 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 8A10149CD33B86ACA362DD3D /* Project object */; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; } diff --git a/Pods/SVProgressHUD/LICENSE b/Pods/SVProgressHUD/LICENSE new file mode 100644 index 0000000..f8c911b --- /dev/null +++ b/Pods/SVProgressHUD/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2011-2018 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. diff --git a/Pods/SVProgressHUD/LICENSE.txt b/Pods/SVProgressHUD/LICENSE.txt deleted file mode 100644 index 5bcd8b4..0000000 --- a/Pods/SVProgressHUD/LICENSE.txt +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2011-2014 Sam Vermette - -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. \ No newline at end of file diff --git a/Pods/SVProgressHUD/README.md b/Pods/SVProgressHUD/README.md index 10ca5bf..a9ce9e0 100644 --- a/Pods/SVProgressHUD/README.md +++ b/Pods/SVProgressHUD/README.md @@ -1,32 +1,52 @@ # SVProgressHUD -`SVProgressHUD` is a clean and easy-to-use HUD meant to display the progress of an ongoing task. +![Pod Version](https://img.shields.io/cocoapods/v/SVProgressHUD.svg?style=flat) +![Pod Platform](https://img.shields.io/cocoapods/p/SVProgressHUD.svg?style=flat) +![Pod License](https://img.shields.io/cocoapods/l/SVProgressHUD.svg?style=flat) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-green.svg?style=flat)](https://github.com/Carthage/Carthage) +[![CocoaPods compatible](https://img.shields.io/badge/CocoaPods-compatible-green.svg?style=flat)](https://cocoapods.org) + +`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. Simply add the following line to your [Podfile](http://guides.cocoapods.org/using/using-cocoapods.html): +[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` add `:head`: +If you want to use the latest features of `SVProgressHUD` use normal external source dependencies. ```ruby -pod 'SVProgressHUD', :head +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. +This pulls from the `master` branch directly. + +Second, install `SVProgressHUD` into your project: + +```ruby +pod install +``` ### Carthage -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/TransitApp/SVProgressHUD) +[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate `SVProgressHUD` into your Xcode project using Carthage, specify it in your `Cartfile`: -You can install SVProgressHUD with Carthage +```ogdl +github "SVProgressHUD/SVProgressHUD" +``` + +Run `carthage bootstrap` to build the framework in your repository's Carthage directory. You can then include it in your target's `carthage copy-frameworks` build phase. For more information on this, please see [Carthage's documentation](https://github.com/carthage/carthage#if-youre-building-for-ios-tvos-or-watchos). ### Manually @@ -34,6 +54,16 @@ You can install SVProgressHUD with Carthage * Take care that `SVProgressHUD.bundle` is added to `Targets->Build Phases->Copy Bundle Resources`. * Add the **QuartzCore** framework to your project. +## Swift + +Even though `SVProgressHUD` is written in Objective-C, it can be used in Swift with no hassle. If you use [CocoaPods](http://cocoapods.org) add the following line to your [Podfile](http://guides.cocoapods.org/using/using-cocoapods.html): + +```ruby +use_frameworks! +``` + +If you added `SVProgressHUD` manually, just add a [bridging header](https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html) file to your project with the `SVProgressHUD` header included. + ## Usage (see sample Xcode project in `/Demo`) @@ -60,9 +90,7 @@ You can show the status of indeterminate tasks using one of the following: ```objective-c + (void)show; -+ (void)showWithMaskType:(SVProgressHUDMaskType)maskType; + (void)showWithStatus:(NSString*)string; -+ (void)showWithStatus:(NSString*)string maskType:(SVProgressHUDMaskType)maskType; ``` If you'd like the HUD to reflect the progress of a task, use one of these: @@ -70,36 +98,32 @@ 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; -+ (void)showProgress:(CGFloat)progress status:(NSString*)status maskType:(SVProgressHUDMaskType)maskType; ``` ### Dismissing the HUD -It can be dismissed right away using: +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. +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 the length of the given string (between 0.5 and 5 seconds). +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)showInfoWithStatus:(NSString *)string maskType:(SVProgressHUDMaskType)maskType; ++ (void)showInfoWithStatus:(NSString*)string; + (void)showSuccessWithStatus:(NSString*)string; -+ (void)showSuccessWithStatus:(NSString*)string maskType:(SVProgressHUDMaskType)maskType; -+ (void)showErrorWithStatus:(NSString *)string; -+ (void)showErrorWithStatus:(NSString *)string maskType:(SVProgressHUDMaskType)maskType; ++ (void)showErrorWithStatus:(NSString*)string; + (void)showImage:(UIImage*)image status:(NSString*)string; -+ (void)showImage:(UIImage*)image status:(NSString*)status maskType:(SVProgressHUDMaskType)maskType; ``` ## Customization @@ -107,17 +131,59 @@ Or show a confirmation glyph before before getting dismissed a little bit later. `SVProgressHUD` can be customized via the following methods: ```objective-c -+ (void)setBackgroundColor:(UIColor*)color; // default is [UIColor whiteColor] -+ (void)setForegroundColor:(UIColor*)color; // default is [UIColor blackColor] -+ (void)setRingThickness:(CGFloat)width; // default is 4 pt -+ (void)setFont:(UIFont*)font; // default is [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline] -+ (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)setDefaultMaskType:(SVProgressHUDMaskType)maskType; // default is SVProgressHUDMaskTypeNone -+ (void)setViewForExtension:(UIView*)view; // default is nil, only used if #define SV_APP_EXTENSIONS is set ++ (void)setDefaultStyle:(SVProgressHUDStyle)style; // default is SVProgressHUDStyleLight ++ (void)setDefaultMaskType:(SVProgressHUDMaskType)maskType; // default is SVProgressHUDMaskTypeNone ++ (void)setDefaultAnimationType:(SVProgressHUDAnimationType)type; // default is SVProgressHUDAnimationTypeFlat ++ (void)setContainerView:(UIView*)containerView; // default is window level ++ (void)setMinimumSize:(CGSize)minimumSize; // default is CGSizeZero, can be used to avoid resizing ++ (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)setBorderColor:(nonnull UIColor*)color; // default is nil ++ (void)setBorderWidth:(CGFloat)width; // default is 0 ++ (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)setImageViewSize:(CGSize)size; // default is 28x28 pt ++ (void)setShouldTintImages:(BOOL)shouldTintImages; // default is YES ++ (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)setGraceTimeInterval:(NSTimeInterval)interval; // default is 0 seconds ++ (void)setMinimumDismissTimeInterval:(NSTimeInterval)interval; // default is 5.0 seconds ++ (void)setMaximumDismissTimeInterval:(NSTimeInterval)interval; // default is CGFLOAT_MAX ++ (void)setFadeInAnimationDuration:(NSTimeInterval)duration; // default is 0.15 seconds ++ (void)setFadeOutAnimationDuration:(NSTimeInterval)duration; // default is 0.15 seconds ++ (void)setMaxSupportedWindowLevel:(UIWindowLevel)windowLevel; // default is UIWindowLevelNormal ++ (void)setHapticsEnabled:(BOOL)hapticsEnabled; // default is NO ``` +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 use `setForegroundColor` and `setBackgroundColor:`. These implicitly set the HUD's style to `SVProgressHUDStyleCustom`. + +## Haptic Feedback + +For users with newer devices (starting with the iPhone 7), `SVProgressHUD` can automatically trigger haptic feedback depending on which HUD is being displayed. The feedback maps as follows: + +* `showSuccessWithStatus:` <-> `UINotificationFeedbackTypeSuccess` +* `showInfoWithStatus:` <-> `UINotificationFeedbackTypeWarning` +* `showErrorWithStatus:` <-> `UINotificationFeedbackTypeError` + +To enable this functionality, use `setHapticsEnabled:`. + +Users with devices prior to iPhone 7 will have no change in functionality. + ## Notifications `SVProgressHUD` posts four notifications via `NSNotificationCenter` in response to being shown/dismissed: @@ -132,17 +198,21 @@ Each notification passes a `userInfo` dictionary holding the HUD's status string ## 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`. +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/samvermette/SVProgressHUD/issues/new). Please take a moment to -review the guidelines written by [Nicolas Gallagher](https://github.com/necolas/): +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) and [contributors to the project](https://github.com/samvermette/SVProgressHUD/contributors). If you're using `SVProgressHUD` in your project, attribution would be very appreciated. The info, success and error icons are made by [Freepik](http://www.freepik.com) from [Flaticon](www.flaticon.com) and are licensed under [Creative Commons BY 3.0](http://creativecommons.org/licenses/by/3.0/). +`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/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.h b/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.h index 734f9e7..b624dd0 100644 --- a/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.h +++ b/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.h @@ -1,9 +1,8 @@ // // SVIndefiniteAnimatedView.h -// SVProgressHUD -// -// Created by Guillaume Campagna on 2014-12-05. +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD // +// Copyright (c) 2014-2018 Guillaume Campagna. All rights reserved. // #import diff --git a/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.m b/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.m index 2a74fbb..09a38d0 100644 --- a/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.m +++ b/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.m @@ -1,14 +1,12 @@ // // SVIndefiniteAnimatedView.m -// SVProgressHUD -// -// Created by Guillaume Campagna on 2014-12-05. +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD // +// Copyright (c) 2014-2018 Guillaume Campagna. All rights reserved. // #import "SVIndefiniteAnimatedView.h" - -#pragma mark SVIndefiniteAnimatedView +#import "SVProgressHUD.h" @interface SVIndefiniteAnimatedView () @@ -18,7 +16,7 @@ @interface SVIndefiniteAnimatedView () @implementation SVIndefiniteAnimatedView -- (void)willMoveToSuperview:(UIView *)newSuperview { +- (void)willMoveToSuperview:(UIView*)newSuperview { if (newSuperview) { [self layoutAnimatedLayer]; } else { @@ -29,25 +27,21 @@ - (void)willMoveToSuperview:(UIView *)newSuperview { - (void)layoutAnimatedLayer { CALayer *layer = self.indefiniteAnimatedLayer; - [self.layer addSublayer:layer]; - layer.position = CGPointMake(CGRectGetWidth(self.bounds) - CGRectGetWidth(layer.bounds) / 2, CGRectGetHeight(self.bounds) - CGRectGetHeight(layer.bounds) / 2); + + 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); - CGRect rect = CGRectMake(0.0f, 0.0f, arcCenter.x*2, arcCenter.y*2); - - UIBezierPath* smoothedPath = [UIBezierPath bezierPathWithArcCenter:arcCenter - radius:self.radius - startAngle:M_PI*3/2 - endAngle:M_PI/2+M_PI*5 - clockwise:YES]; + 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 = rect; + _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; @@ -57,12 +51,13 @@ - (CAShapeLayer*)indefiniteAnimatedLayer { CALayer *maskLayer = [CALayer layer]; - NSBundle *bundle = [NSBundle bundleForClass:self.class]; + 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 = (id)[[UIImage imageWithContentsOfFile:path] CGImage];; + maskLayer.contents = (__bridge id)[[UIImage imageWithContentsOfFile:path] CGImage]; maskLayer.frame = _indefiniteAnimatedLayer.bounds; _indefiniteAnimatedLayer.mask = maskLayer; @@ -70,8 +65,8 @@ - (CAShapeLayer*)indefiniteAnimatedLayer { CAMediaTimingFunction *linearCurve = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; - animation.fromValue = 0; - animation.toValue = [NSNumber numberWithFloat:M_PI*2]; + animation.fromValue = (id) 0; + animation.toValue = @(M_PI*2); animation.duration = animationDuration; animation.timingFunction = linearCurve; animation.removedOnCompletion = NO; @@ -102,25 +97,30 @@ - (CAShapeLayer*)indefiniteAnimatedLayer { } - (void)setFrame:(CGRect)frame { - [super setFrame:frame]; - - if (self.superview) { - [self layoutAnimatedLayer]; + if(!CGRectEqualToRect(frame, super.frame)) { + [super setFrame:frame]; + + if(self.superview) { + [self layoutAnimatedLayer]; + } } + } - (void)setRadius:(CGFloat)radius { - _radius = radius; - - [_indefiniteAnimatedLayer removeFromSuperlayer]; - _indefiniteAnimatedLayer = nil; - - if (self.superview) { - [self layoutAnimatedLayer]; + if(radius != _radius) { + _radius = radius; + + [_indefiniteAnimatedLayer removeFromSuperlayer]; + _indefiniteAnimatedLayer = nil; + + if(self.superview) { + [self layoutAnimatedLayer]; + } } } -- (void)setStrokeColor:(UIColor *)strokeColor { +- (void)setStrokeColor:(UIColor*)strokeColor { _strokeColor = strokeColor; _indefiniteAnimatedLayer.strokeColor = strokeColor.CGColor; } diff --git a/Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.h b/Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.h new file mode 100644 index 0000000..6de23b4 --- /dev/null +++ b/Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.h @@ -0,0 +1,17 @@ +// +// SVProgressAnimatedView.h +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD +// +// Copyright (c) 2017-2018 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/Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.m b/Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.m new file mode 100644 index 0000000..a347c85 --- /dev/null +++ b/Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.m @@ -0,0 +1,96 @@ +// +// SVProgressAnimatedView.m +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD +// +// Copyright (c) 2017-2018 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/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask.png b/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask.png index 84d1f7cb49b6445c664e3aba8010a299cf176e23..0150a03f535237397e5c16fbd4e96f79886889e0 100644 GIT binary patch delta 1841 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 IM6N<$g4p$m`2YX_ diff --git a/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@2x.png b/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@2x.png index 4aa036ec83e017118d33c04c99528259d2a31c89..9a302b6801d424d6c214714b5fa0ea77cbc92c89 100644 GIT binary patch literal 4893 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 P00000NkvXXu0mjfxROtc literal 5614 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 IM6N<$g6NSPp8x;= diff --git a/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@3x.png b/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@3x.png index 2a4cd170883099d9c07bad7e235885affc3d5a5f..d07f3ce67e8076297b61e9b559f955d28938c2bf 100644 GIT binary patch literal 8319 zcmV-_Ab{VAP)Wk zIB_DXdeP3aGt=GGm+5@x#L1J9H97r9n*Ym#%cCRsm#nuS_pe{d0Y3-#ePCTubCA=| zh7U1%NDt7MgYZ0pW&wxhT%T`u|Y?@qx+CzZlO^QCx!MHv{yWFU1X0-q^2#Z{}sfET_+|CS0%-mTLej z!i9we5C^ch54nc7ic)}lwXfW}3|4Zi&*-#XFHFw|SbWF;K2Bgop%shSHGy?KUQ2ZJ z87x1vBD~etU`2T?;n7pDm@~j=ox+dS*k=t`mMKMEQM*W^J_pMyTv*SEa33*W$?J@= z@ZB8ivyj|sEuDIPz}lXLALLk{ZYmPpHe~tgUa_BrALdw}rgX(|1p%REG!WO|=12Lx+#3fkQUILjzcX>p1C}Z&|76MsL zp9F15-G*ju8La22B;JALx7*n_VUHX#9az_bm{(KHU5@pMtGkLXfu6&c!x7qkNo>Xq zpU{oFtvJTvq#vH_SpK3BbMDoef)(A)hw7JY*et11zM|I}pRsReKe);7?J(t&lrTBA6Icb4Y#F>y|)Kh9gTxH^!pSl_MfD*V)8=rm1tOJ%q5Z}Ta(R>27 z6IfeA%e%;|16EAI-T+opu&fWbog(OmSPsBx+XYcf!5l1~S)p$cv<~Su!19>Gdi$)w ztnedR3G^$1F+<4(%O7*^f@oZX{?P4j%mR z@HMT0m1q(ALvji9+9%8!&h3EZ>%F|%mc_He52aZubynzA1d)M_0V`Use3VO^zfZx^ zKg@QDpk@H^0nH&eZ)b*RI-}o*p|e6;lI0B)AFQfYg>yBLOReZFAn*%Vi z`z-(MVWQUL$KkU=Z-1pfLi*?#x>p2XzO6LStne|R1a38C$RwrGg5~jw*7I55tnjgT zR=93{#ncB>FS1c}_!_#cm~=KPd>m-q+5HPVh42N-LqTo54*_e1kEINf+!g~ZzaiZQ zSUla*%^Im4q#vkDAa9c@->^#u3%h?d=?&ZQaV@>P0tsh@A3%3x%?nYq;?zP9*1Cm} z(Wyo0ApL-D-96C4jqI{-QK*}QZs#AoI7Q$VLY&MM^^m?*wGP&H%)3t++yYo@m%||Q{zy;)8BH^BWzc7+WneL$C9WK@8fU6Y zI*;h)eLaVT4z_e~Go)00c&*{G#OD1G$-J-QusnxZ1C|%cYr8Cid4Ghbt44?A*%%`o z%s8;DcvC+hV{`X~d4J#0VR3sJnDf9jz>1zD z`fa2TFp|@Im4p1xJi|l_DNdJ5%aUWWQl0d#g_p$h0#d|f-GSA(X_eE1u+<9H5-V7! zUh!2cK6k%2@9$~-z6)IOYJ~uh!=A}gwOnI{vw43Hz3WEoJ43B}z*_2qgFkSl!s1gZPkjg?jrO4E~rzyRYNXXEG?;h&IDvVXNZi|LIPCjuIK$-S`p-S zzH0hVS7du#X6+=p*Jbg!-k`+)*6^jX%UAJUtSqq`$ z77bVkY!>Ze7DI+{Uj(G@Kqzqyynb$IoeN@MWQWJJW91u;f=O0RKN0KHS_a;V77BnI zEFZYAF0E+e-ni}v7ASXN1|C66UI^#k*}>Amg*dH<6bpqaPZf*nu{`(c$d+z(P>ruY zUCtfl!7yvBQc4WG*Zv%m$NGtj$MWxTuv>P$)?`rk7&bnttAXaReq3b_dq6f^9JCM& zFt9jf5y2{E-?LP??!oHZ90HdoT6U<$U`4^@>#&GW9Rt!I%MLWag+&kgAuzGj$X`-<#Ml+pN{TdxucJ*R7EbjJHxlZMJDNG<iHRZ*XH!L(qlz+!P`rr4lfBBS&b!6v#?U=+2KC$SZ`xQZXhV-=vA(S zpsgb;_x07R=wNhs?Hnxa1Np-x2}tG3H#(Kkfu&VH$uf^NAYChMuX?PvO&&`-ZRMp| zN%2C#^6**~`_49eG0 zNdtuTwa9%i3(uGnayO;wh}d8GZ=-7If)}1=jk=ZaGB_@TvJz=8hgj1LBfla!tTR{; zmBfwsb`#GjgMCD96i_kCA?L(Jyk%wqB}=d(@M6L>Duz9@#+T$^X%(z>jkOSBOF2}e zdSEeY7Ur%rnA|9# zLY>wc=@rXgJ@Z&U65k;fFIzFxhoQa8ZLsvph0P0@GeSS4@}**dcQ-8ccy>D2utLG& zqs8uMuq@puiD-c(no<&+mfpN0**lKa7%V$ly4)Q#?`(H9fGwwgl~zq+U}|kwmiIVF z(2`*_1xte#rdZ5E$nLfhv2q5>;A z=iH^*xuImA&8Vo=u(?qj+n*=uJQgw^B=5S>l91EC41^71m~|2nj$+B3)#cYdSnYd` z+?JPO@scaN7~X>=Kiu2ObAyL*;@*O)_1%r&n5;7KXoBVGtt>$0I#?=uW&q5B*BGv` z)9NYK^tuMb+%A~<+tSL zRF-I#1SkzyZPl{q6)Rpqjk=nU6Ij@TU@t}sm<%tyX35aHX@Yg5!V1+ZPFoDtS7jif z4wlilIR&VQW=SH4I$SlNZUnfsEWA8wK=q2@s#xPK0?U8ah&isl-|EBFMysw$H&wuD z$M$B1`ehuf1X4PxY~?Vgf3nq5XH$>&Kj?~KuLz!@y6HgHE{I4Wl)z>4RMycO9D4~C z{?N>oMy=bj`tX>NLz0$inXt@nPD5N>34m= zMqsryi?bf+KjTxC!hclB-Fn7ezLGdntvXn#Q~qu)z`Ch|b<OJt6nzhua2ea?ake!`YU$1)ZO0yf#>Z5{2QUezIh2nNn9!f|;)4I!A zD%FF#kDF(oFEy)$l`ag`z?4@Vo52J8Jw*nisye!WJ(?rdis2cn6HE^$a6M>(HCn=v zL<;&vnP3k!dgLQmYrF_f!mG9Q%jopdZOzd-WAyMDSPv(t)%2!XohUKw{*z=6ZF+>V^IPhcmQpE*w_xFR>zFf_DbxgdiI%-S20u z57amAKEHUcTMsJpLFwGju235v9T`}g5?STrN?h3d^HQ~rdiCNSt6xsPbPw0Vg}<7o z>mxUXzxHj9#tL92b>J zyW{`E$L;>(%k5KGV>1XM){pTin_0!|FDDwO6Un z)Bo(D`p^C6&-a(Uy1RaN2iE!H^3k+9R<8cnI~c4I^cZD$ZK-}eA(duO9X_7!KMr7h zk$#^3caPQ2_un1BI$VD`W(wA&a+S`jVEu%fLlFb3YyiFjm%I7b(#7ib4xlIdk6-MS z>WlsV&-dRwxhsZG?=`E1R_Vf33_sD<$L1caC@C!t_bNhtYH8Hcrk}7ndaEN?U+q7h z>{aR)`;Ra7|G(T{`sz-zZtssO)sk3uUPbUq@t=J&g)^tW-blIQ6uS0sm8PSbtJQ9% zSGV`2@W~xoU*2Q&Ahy1=J}FtJ7@o4Au#)uVz@Cz`9*17J`;myGqbI z5086JKUkpzVrkCE?v72m9IKOFO*QLS5}(fWs$LAoXh}_d0pFR3F&Ze=58R*1;tPsG zsfwro&gX4yux_8B_4Ju)J)Nl4(`Q)ScEFm?IVD9=lYSM4cbs&;8dwqLPwN>p2E8@^ zt49k{)7}DW4%gHBYg%CK7LS}R7JnpJ7t`360F5e3u>NXwD=vSdWI@6>SXic3Q?#SP03$?0&wW}yrX}pTjE0=^4h4gNdQPY6M4C*u@UesDO@>caSICofcw4P3s>vra^ z=JUc`^>OR5Y3aUh?Yt2$jV=Lf8!W!v(@AxKZMv)o_Vub(4$ohoRJtrWrA0ao&YD8ULzyNcTwcJ7nYUk1(ZG*WG~ z>b-EGg;q_mmSD{xTk2ICt<;4}kC*NpV|p(!W__?Yvk69&pjE38SaY;?gJQV50BbiW zgu4r@Mqpv8sfzp=1R&gmpu<9;L@h^+<9YV5&HWCn_dEnpw6<_kkWuvFNvk=t>j=`;)U3F&w^;{l(He%<0R+`;<@9HpwCe3Qk2fDo6%ck^)hYwE zsy$XB&kc(}+c#k6mtgr@b*8h@=~cQI-j-gKDmZPVc9ln{Yn3#C*J@Ur+Y%CT0*hnT zQDf_ALx#ZUs4v=AoK;tpOAt!@i6^Ev%#!0eCjtlEX6C^M{a@X!aXA2MjNtlm$w zzS~j)Rs)MU`;(?CqqzoNbNe$ z#GD!8-486U)#=Cj6YBg=kCYTD2~hQ6!VG*5pt`ft8u$9I0+zyKP0YODwDiI9b64?Y zu#MH&z_;+yBh}B{QJ2LmhfYrG1eQgkSWC=u#nL#ec0`(lP_@94!Ig&bs1z$yu{@Wl zOFM4(V>hHM-byzc962m`A=CjTRjW~orNv6}3&`+V2D~o8;vsk9zlSr|~SZTJ1 zao_^+nuCS;EBn?6M60xlg5{q$~S3Kq9@Z)6pt3SsKZ!=%eQOH_8^BW3eJ3s%fxXeouI?y=sYMhoNlM==#b zYmU_~hRF<8q8Gw(;Gl2+n8{RU}i9w~&D*fWKtQe*N40^DVIA*XFLVYnTzz7*> zID=)=DGO8@)2_oxUJPY$p-@>0Ayy16o5av@Uo7doMci$J_g%4Pgrj0O_E|{`Rs#JM z8!h`T9^z6@PJbA*bfYbVI;>K2urxj^3Bv=uR!Oib!k-Xg5w0UxtQ|L2(~kKoX&IDR_ymKMK-)epf2_~}RVyGY&FRf> zsJQ-0=CE`IJ`K?6-I9{7qe14Z*7sRTxRzjXp+dEagB7k?63ArtL)FUC^5@q8sEQlj zgd7&P6e3-tNj#&{xU3{pqka)&1*7u*cg_3i3)i!_;Z1d}8t1P@*|Th3C_yVJR7h9+ zq*x(yLL?;hfU81KPJcj|2};)oEgcQGdDkRbX=ui!$0s0WV48RN+N?BvSIiLSU@?2H z^jf9IiW`$+h$WR;*`ra;ywEEuEtgZyDlg?LJ%U}drb_-uF!74=ED(Y+WdkM8GhElYwU?ua6P!~4H zyR&$@CAf3|%iFeFQ+KXTKr04r|(n?pVRNTI4s)=Ar~w8%3%@} zHcjb6kwVb2uNo3v))Xw({$@^x`?y_1QVONzkPj9s7%igrg4YF4+B1Cui|4R7&B$`B z?0S_{x`TNtOtaW%`RzNrxO4!^!?t^@5z4Vb)(yE}G1do}Xob71oW5&bCoBZKq*$Tt zGrAe#WwhBc`MnSnO|Ou3Lf)Po(thbPSP{ML@+J?Tg`IJE(&>=KtQX*wTG6uZ-7&y* z0t+dJ1=KGaR)~FP*!V;$fjX@!>i0y8mOLm`daUod&IXYTOWTo!>6Lub1qPNaW{^h> zTD0_P1$wMEgdWSX4@cACsNJQ*)T|`-OLC;_tAiTTj&_oA_VCO+)*A+oWmBzDM}uxr z2iGk*UMNzyRw2ymQz&N_Dzb^;mDv zj5{;KV)bNk%c4*D^XtXpyDWvrdfiQ{_*iMYh=*?ZX_fqES_dt)ZcV{rH1$PeCBdmb zuo|d%S~Y&f_O|4x1irCW_&QVot&7hnR@{Q9Ma)a97)8)>3Q4PORXx`00bA&`tulJ7 zG={h+uhD{qcD9duMNzc8`W!mJLr&i@Xq7KkNLLoJz!L+OH5Apx4P3O;x-|vM^CU%R zo1dlSPY;s>5 znqaM02w7+;Jl1REc9|Hgq#uUl$q z$!pdee>Oc-wx(q4q_@gFhEuTo+hzP`hIT98n%ni}edE?Won2pVMo4R)IfJz}R(i=t zotDiX*&o5nUHL8O0B9Y-ikuN@vC>Vu{cJoAmXBqZZv0vUt-D3&Z!4=OX9=2}zFP{R z7g*fv%C8V=m!U;6l+*8+7oJ&I#S}vnE*)5`eK;|N(4l$e3|8D?4t7>QT(9(Q#{(?; zUL46g!|Wb4E$p1Y()Bhlx<}djb+p|MTIJGi+(MO#H6twGXfQUfmJ?XK8KDg;RQd}I zE^DC5f~pwajX1PA-{<9^ja;%&P}Q>Lu|10P+{j9<*pRk&pfj?@2`R-kbxC`61H_p;`${J>ucbkrMh+w z7UHaYu<{KaP}N#rt>Tt*5CUfA{Z*5*vSVdcE#!SpHbyKyi^m07CqkE(rB)?6Z#&fYt#l^t>XB7tAp4cp;1hi+5Tz zRyky#)eJ~~i=1EinRmX|vYC7Aabmp{r>gfydwto&K#O~e}#;d^;AZldSwkHJi`QE&9eS29W`1f zu(s{8WN$lvw#d%Vb+6Fp1ZyD<>jW07ZDuP=J6^sk!cT2$DaX(@^U5k%A-`>M$m|<1 zI9;DQZNkf-t{jG-mD9^ctQh@RexU(#Ps>_t^nm z+Oxu!U9s{DNqv!Gg`HbOihK6a(wY^%?0^;i!`YXlCG*7y+_cB(PFX9t6m@2-#*)rU z^d%kEnH(Z!hw)%}T6eFrH9$)`FS%jm5t4f1#XD}h&WZ`tU`gjCHC8Nlg`LsKR!X)E zmZcc#yRW#j!i#H9U}2k9J!XYGy}BN-*3c}^bC8x3SbkVp7k5}|hmsRov%%`0Ox$~I zkgruLN)BN0v9kQWVB5m%g^;go{9@>Jf;DPi!^va)W&l?HHhwEJM*hq%#!WQ6~D3`^f? z;o%YD8S6jS_|N=*`F{ld&mzzyauWMr@poP(hR^Wu2?&XZNl3}aDL|A|)c0s;>F604 z!A$p=Sst*mv2$>8aq~Qc@IK<>7Z8LBJr))b6%&_`lzJj9BP%Dbps1v*qN=8@p{b>< zqpPQHU}$9g)a2Q782klbYG(e@!qN(Xw0>n{``XUl!O_Xt<&CSGyN9Qjw~w!%e?VYR z@Y|5ku<(e;sOXs3xcG#3iAl*RscGpMnW(JnoZR<$`2~eV#U-U>_23gF~N(M@GlKj8A->oSL4Qotyu*u(-7RePwlR{l~`7 z&8=VCzyIvu{_gJW9~>SXpPZikJHNQRy1u!^ku6H%;c;5%sH;5pTiVKZNH6>R^m9$8 z-MvNpB;~a7OxC{7>*9!4>j?)Aeu)hYsZ_tZ_pd}qc+63@xW))FOJ$#Xq_Q zrF)}aMymq?S_4fJUk3(U`W0AhD;*b_&V9PPF;XCsyqg-mouar|ysfQyfm+L1TYqx9 z{#j{#PwrCvI+GzRf9mdr+&duTcKh?{7GHa*YiQJr>Em8Q5~q;K{hnLnhT?&{g&Py` zdKWrV1EVK&RBbU z^fD9XysKF*j{RPPk`}N`RGz|svxoEh}|!3O}tAFMt0KUEwLM2CUk(JcQ~j z(G?g8qJO+lofkq0jo+dXRPyWKoVSTk>DRP>DI#a0y)z;Q^M-gaOIB&c&EA)o>g4Zi z_T$3@XdnHRPI~R5=g45A*KC^f^FqC{K1;GnKy9{^zPUK`N33Q6COS1=3cZVtxcI2EOL()Qv!nv`QP_TS>(@Zu_KRe1@=eF77lyOa+5DL5)np99k`Srk}ZwZuLdl z-zX^phq9il05u*V2`VgokZ)knYj;kJYsqWj2dIwsSEA&Gw#LznL8XNfVxHVL-JX0p9s ze*|n^QOQ*oW3FL_=gmmT9%gjED8|k*2J*I&{T^3NMga)AQ`~w)Gfi}NhRZikx@1$k zd2R%T=d4GKP0eXA>F~AmJHpFFJm)GTJSF8H0oc#9QVT+Tw)EG_?vl>mooAm@G0WPK z=$)QUrx6JkJvCDe;Tx_@>=2|wl*E}IS6R3`%TP)+JQxn@cL#Cr$Ry~P%^=GKwQ;CbW? z>;^awn|@I?%_oQEWzj4~%Q$%-ti`ikPkEq-o_W20799m2?aPBTy^yG4Mb&+;UCh_@ zgm)kg-yy?Ly+{90L`#T?jSA{Dh9rAU4{)j6^|cWgEahD(9Q%|@a~mC>ON1f1+!``Z z)69Lgag47As)(Q}Jn7v;yN-IGf_iAPnkLxh-`86Z_@BMO#8TjwF8H*{Ao}X4nGRK(dS2C1lkOM)2 z^`@)U?pw{*qv{g@d|ylrK5>1cg!4qjL@7?}_Fmda*@;dhno&7v0}QcrsA;N;8fnTQ zWo^A5xlILBXqYZ5G@qHt@X`-|Jj);M(Mqp?;JaZFm5PkU4Ci8<( zjK-F94yD{T{*65EWsC{!784mTyz38XW!#Xr7uQez1z#z?h}#a7C<1B%t=UMBkpH2N>X9!2%0F^Z+Z?67Nbl zUMlhCXx$6}F;AK_|0l$mCbnr!5i$6gsb(N`OO+1H9B8pCF+EvQF7hk$r4Od^LD4MSBi@QVXKcF528W7(#drupo!P4yJGg3MpVsIB3Ow+AI;>)EttNsof$;h2R&vlVq zLQQ*WYU*R8^8+*b;3vI`2c9rRjR3lSa5rhe<@6n%-cL(J<2N+MTDg)vE)P&)kU_f_V+cqg9V>|{bzFa#PFTNwVCM9+~U<-`?Vwl3aV+Q zZfu5;KbH8+B&0_txdh?8r&mJ>XSK2k|KRf)7PDsp%nEJN_X!9K4>dBpwi1OVrc(^W z8Qe=VDyX`Oc2*as0C5kNOKJ~FKCSIBYi`nQe1M`(#whO8d6gX^)rlJxTkPh4INf7c zeS4by-cB>LnPdw?0~xK@f6#{wSro};qWa0dMq~SrjQ~^{-AURf8|CFf0GT2h(`x** zE}-XpkrqxiAxZ*>{K&4GuPa%6Y*b%8+a=%kYFHIw!EW%#-0`(RMa3+9=(n+&UiMkE zOa$dH5pJKOY(A_b!cVke^>9;hW^gv3m_qLZk8<}nT47pU1XqpRmzABIgdZ?jlVpCH zDe(Md%?3%VFr#7m;39?H6geo-k?El642&P3v9L;mx|Gx-4QojQ>b}bWO=iAMbmriF zAt;mW@z2_1=JX?@PnMHUON{>@>zN)dR=b63s;uDBNpGU?T*Ivot|rIJH|Tv`i4}cWyizTvGEEDm%1L^5;H{} zUKL7LWNYGs-e{G21=xHJ$~M~WOncO-?b}!5<$J=!(sdcsAWXiC&y4ohuX6v0R^Ih z){i7BzNBM6)TY5^6oQr+hOiQ4hiKx4VS=cIU#W1#--FbSB_@?;)bl4UQH*b!YfIZI z-l#w8J+hSOi<;|u$7{d$z5ig})l!4EeENv*;HCCjdLnDd>>IT|+`UIHe!&wK5f9Jc zb2~=8)vGFS4jn-&iMUj{7Coaq!QLaQQ5kZ^{kdu^T_PgV?qw8g=usJMotH;Wj@ssX zb(2Ed2zw^PAI5LgF^t+Sj3Vk$U6ccu#M>08^d8|(R|&Hm1Qa{3 zho4cwxj|u&fyW#ROxBc=v_3u%Z^orJVUqZrSF0bCK4yok?$0~@jMSjMZeL-ivx0=4 zzTk)M%{MlNy}-4%wNion2pf(uvy@K0u3;@}S`JR1sNQ^sU1|yoSm5BYi}g56r3mrg z@^>KXhtn3VTNV1ppm-Uz@u}u-{~iIpuN^&Yb~DEh)$b@%c@nocAVg&(;R8=+xofBt zopy|mVb~+tm(Sa0m;!IGU4<716Y7pVR%zL1O+sku(MPylyY&7`z1Gw>fiDF_8C*&q z$e#ZQ!x7p2+4bdkkK7ghHQYF%*98ge5!M5-C|?xo8p4S{j#_x45x;k|sTWBMnHU~h zEi3w0gbwlmus+B9`ntT|4rNT z0lC7PTM!cy)3X%fHN@JJbBeThXXs1EYk>ZQCN?nB5y|Gzy;C>qPR zxMtZOy77j2UP^YZ+{psoQ6X?%>Uuld)9rOPF=#^JnMKp}K?vsa5a3i&tTdQSYe_y8 zij=!q-z~i86J%m~)1hctUsiZ5g}Av8Qb$1jwF8d zZ~DhkJh5^_SpSa$4vy<}rNWmSv&e3e=ekrUnqTk!Th_oUbQ{Xk1+yo_L#zd>FN04G z)^2Zh4xf37%)pLM_Y_mUvo(I6#jfwt9}?ldwq|fuk^t-6qu5-VCmNX@{+A~^Kl<-3 ze@~U-_=nctOzS{rW`FowGh<61yP6jOE-UBmJ;K6Dsk8HPZA>e<-t{%0 z*d7$5a$($P$065a32egY_%g^0Ia7$|j>f-y?EO;Z7$!M5O@tdMeRQwBK)$29Lk6uY zA&CAnKciqGs%qmuW%uosT?RIwTrHaOjxl5D_~QEq0b67a@%+rA1=OZcVv>9<8*+4U)wa*8@7EgWq$%F|oeZ^z`%;@5}YKP|AP&74s#2y8m=4@*upT z)Jb+54%oiOACzWHdtWbr=cXEY?!>r}w&a49{jT3!V5!v6@%G3o+FQB|18zL*k0d2+ z6VP^`aZ|G>;CZa>hC%4R?G>nphNu`|(sGZVhDuK5B38bHwP3|+s8yJ=e!cot#!$Sy z{>QTraYN2#Dilsi0#+}R=fh(|ge9Y4F-9MtJy@|iPL}sA?*fa;qzNk2?S0Ju)|(+z zn7dN1IXj)b0%``iiH;roFNVYKqfAwu$m_^6qr8nn`9z~yE`>kA7sR-fJOAc**BUp> zr}T&WkkbjX)pc`Qb;#P&qY|M_ShJ1M$YHUeoEe$+=CG3=ehToF?BCxX0U`RDV2Q0q zLlDlYmHufElzzlb#~joUk${#Q)Jo0#aG@W^iQ$ndtqXiuX(M_9{_aO54I8XTe z0gY7e>>g^Tq(bp;?{+ZR(-EeGV<-Yj@IqM8)YLIR#~$uQ5q#;RTPDD0DE1IdgnGv9M`Z>)8SPVDfjjUxX42-8M*7xm4_hO{hJq^V z1=qvD@v`^XI!$e?odvVAu#$EL&2K6mvLnW+8ClUX4$LqHbutz$q)Gt<8|CFzhP!Zz zM=PO+Q=lxNcD{%m&ayHJfV5s6iDzfHT5V@X30M#JJq=>#Xp5&kEZ)B11 zDJ!S>mjWIL_}4$g6nN=dF9c1I8hKegnncF~v-y|Ow9!l)mis7blqLh~|6@gxuQ;{W z?>VwO^Knf?J4tXdsy7#gKcAt=>%@H3aX3cc^t2?#)(ybOn$WXET$BH7)GQR9!|tP(f$Y=ss!WVxJY=OHt@{HTBs8 zBEU!Y=RUi-g^sxxWS&<>2&4Q$!d{|Wg^{JBC8Jhm>5C+YTHtYPO>tx1FV1JY^F;|- zj0lw!|CfQ@o9&b}>iH)fK{mlAd}=9__uZ%h8f?lZA%5CuIMEozjKidDjmMd?2H3}M z({$GM{EEv?WjqR-O;Ur&qa&=4K#F2WGJpqaT^x=WRU1{7=BZ?rxHmBCmZE^0BbJfi zh)fd#C#pKW#jlBm1WwEsKQJDrSH%WCDYG39*%_G&S4|N)mP}?J?JM!f)1&&s@57y0 zHipwog}&z#yoa^REA?F}$Tt=ZigF53&(nc1=n6VOv~g2!vAlm)b`yi=uwI^16aKf3 z0bZqOZd}6ICMM#u%NgD>DuOHdcE^T}*g&XAc!77* zNEz;402OX!IyO}_(%gWlO?fv1+c)R*Uyp#Es}Vt(ab$qDhL+Jb8qF!I-b758`3Ndt zr;)(4@=;*sy&~Yy#+X4Sg-!GclAyxj1w=^-yH)j)Z%izu%2rM?S5eMa9~!#_SNx-Y z9^!ZA=e7EEsJiT1g96k(l}j>ZgbI1&*pv#JSMS|H2sMfU3mb|u^bFWeqB>9pSfwuH zHS0&K^^w8sbTJ)#*h6S*DL6}mGLi-kC-QEF$i=%gS)QE^|F#!rtRz60>iv+n7ww1% zjm;o;gb7x_ux5{3llHS$|8J zs}4JJRP3qY+ID+wqrqC>fxOKuMqRd!8K}j8^>dol&c! zVH2Q|q#;}z`s`lEGt!zWdK+!7#p+2!02Z&3E^HFv@p%K;v|a8AHYV6~cBDu9b*Dx* zKPg;#Xw@p!F)q$E`HsW8)1RMOP;VEpPd8M4i~pj*$%-c3S(z2{#$50{;s)+^aAd1; z9aT+f7thLJ6Lq74M3P&QlSo!FJb#2n9f~qet79qNr8F}dv@np5-BAcd9sZng&>Ko< zq5Xu}$W6d(AXxw zNVS^M3I?(!(^kTk1tM&HD_BrXEZn1*k#}VZL|+K2hfZ(E=3ReLvp)e`gt#2mQY~dg zX&~rn3A|zzl?ghjIOzl*K_paFq!~K2#7N4XfT8m)ol)tU+=4QwZNV zb5YmCQPA_abg@G1tys|#vI`5zr{(d{j8U+`R63qsvl*V~(+5!zt`LYvS%WL)8x1?R zP)Ow~kqb(-#B-BBs+u6QerPP+%B{;T@%{MOlCc4L6@(p@E;`&^ukmR&1MlK!+1cp% zxQAi#YL;eKcW_;iY{4jWQVUF`Sz0op&xKz#r}~qx@JvS^Zkk@+#6pYKlUBv*c46ZK z@rGU09hg#_qpnE0v)HxGBQXC39O^z+J!k;unDCAZrbDg<%q#P<(whQ30~VgxrHq*Q zRAPt22V}1U9NCIAqVvA$$|g&r8JOUdXtDMU1uIkjO{uweePTjG`MN;6E8>9zmzZIM z7tgpohF7hG*D!sW8u+v9CkkxUP)?E34)GXvlJEbx5qa^p)w=Rv?-B{b^(K5?WWs` z=e`pL*5!CFkfB0m3ZEjC%(VfE=N!;xG7@IhRYQpPl#I=Ae$n0!$^L)~3RxX@YQeAn z9gbifd{*snVpV3bF>s=oKGHz!8umpt)H#sjNgls#ELxbRES^JWCX^StSHy74jtmg; zzrgt*m>CDANI_%}Uh*+q@&^rdxc3(0e>7VJy-6u9Qb22)s8~d|(2h%C-a`HxPA*i_ z%nlKO_EB@c9&9$T2 zI6KHx7fx7oh~O?Z zE-T^-Poe06^v#fPZ+ZKM*$$6W-6S#i-?74II;>xS1W))gWWi`FGn<7*Z7xc|FIgtU zqNNeNCetQBDzZk{Kucn||43jsh(B$;g$ypHHSf=_U&x)wRrHzP(nY9(8iek2ps_d3 z6m~A>G^yqOY$%zbYP{Sp_8kv&cc0*rj7Hx%CYC?dF%I~dl!@3m7=4j1PV)wReQuB8 zTwFzY#ky;#Wol!mhpPqZRK#GX$3cQsn}IE(E}Wg$Y%-Ks>_9twHAPsHv5^j8hSV z?h>0>oPI3q4ga_G*O@3Dew4VR1d$+AL z>=vyDjLYE06lC;LTJi1>d^XlvosY1onfv$nNXrJIr=J3@ZZZjN`x z*GEa%8DQQXmTL*g)GTJ1@F)*5Nb^=utdKWdMPnY$`0}F5WD>GWAo=ce>|SL>568gI zCS)I@tv%9En72Sf-m_D8f41MYS)DNe!a|3Y@P>6#Ch&gDoTBUfaLJJaJ>jh`d&fe` z>1Dm+vg*H%ABQ^a-!SP9o3@b(@`p!YOymS|FJPU&FUcnR9P?A*9w;}PrF%7Y%AK^( znS(#_yH4^1zPZjwEyY7pT#m+KwS&Id^1HzOGvpwSi2%5W3hFg3Od8#$%DmT*&5cVC zR-g-dJTQr2V4EFI_nk8j`}^lf#9)2&NSjaFxTF1Jwnbf$9Q=_#Dej&%n8skqR~TK< zqy=9cxBnwxgfKSd37tB$y7EFm<^zds!HdT+OCBekqMK8c zV`LIQaN{pigWAeC(3%T2prLVibU)*J^tUsNnGS4z&qXq558*9~?wrd-1lKhprv9?4 z&!6NW=bmW4*=%hT-=>)aI*bUJn@e9#=5awSEcl#*9sqjbci-(LH(4C!UhWrnHFYoo z!n&=jan{xSE-s*&ktC^Lvgq3AucT;H?c1Xq57DoeGJPnXKAVm=Yz3r%VqaTi<^h{G zmL3-~*AmB&eUJY1u3AX_uA=#74m9&19}4AE-1&N|*L_iO@EcWeME>;nP7_(*Eyn0- z%qecIIVc(#@=rt|>yNGrkt<7fZU5KX;a5E8FV#ulySup~b&niL{oGA$G3N@)jVnNC iU-kZho9k8Zb%^ECs?1E{(bWGwoaks6s@JI^!v6)6r;B4q1>@24=1hkSB#tILee&g=|M4S7j%c3Iu=+oHk*41Kw-+3^TQrVAsP(&qgyRBcxqC6KwT#9w__3j8Gn!c)S*_KsYo)H;Pt3r!$?`<--lv5(t)B(VHpN!dP z9@T$#* Y|9QP)AV1575dZ)H07*qoM6N<$f-NA@a{vGU diff --git a/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@2x.png b/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@2x.png index b8bc16c896bc3667141e4b131974628f68c785d2..aaf6798547863870637b959e44dfea4bc8239ef7 100644 GIT binary patch delta 280 zcmey!v59Gday`ROPZ!6K3dXnBwnnltGO#?Xy=J_Q^PQ03Md3I`q1d`f3ExvD9h}Mb zFMspd<6rM*b-h_Cyg#llIK^&lSIEkuX?^GBF87++zU7v8>LlHDr>de#rB}Ij-SM>I zoNRY|$$7(<#Xi4eP?;*lb|>ff8$F+V=A=q}vDV2sUPj9&omrVO-*Wn%WIxr$VCg+; zcIQ-h>~{NhIQgBB$KUjCXM#`09RIiROsnVY0$PqnuBQYo~pha#k#TB0I17-1tlNrlKjGf=M+2 Rzj7FWz|+;wWt~$(69C;;hOPhr delta 1117 zcmV-j1fu)00`UltBYy-qNkl3FgJsCjVV#>2m~}1+ zma*bQF_J7n79au+hf7mL@rEEaf-W;t6c=x}OdL#@4mPti27@=O&<#`wmx)X35O5%~ zqu0~+XY%`RP1p9EKF|B_bI$AeobN-G)fyzSEzw}LO1Rb`KYw*vrexw2x9D}NN`7a^ zpzRiAM&>NgVL-tFO`PNRk-XbtxlFi)Zr5+jGcHs~xn&+QY|su(lGM33+oa#PC&e2= zVyRBUhTLnZBvo#a&0aU|2^XjUfTezI$dH}hB}t8Yt1XTh*X;s%IG)@c$zNEmEEVod zcjz;&%PQq2X@7}bh77x3^Q_67CU?ele{{Ywn4H{c(6C=xsa)wLme}f;F%LUmVv62j zhXEsg<^3g-iDiBmxremKnWiOvreDE>&XX^Rd#4}kH>%SIL~eR=o7aunqorsvahAK{ zxA!^EjC;GE#J^;(RVs?&&bG~fg1ydFR88U)?6Z2tWPjou+YKt%<9&+mOh3>k=+rtR zGO^sPr+u?0e?_}SMgN{Aq%h+3jX~;<{~4muYj|8p%TB?sA&Ut9PeyL9p8yGB2k^mk`N=)@9GF z@+U#Rr}PS*woW3m60IJI_uFET>%Ag)#udu4;(tEq&m!kkRJ*~ENM5B}>Xo@Daw9fJ z4r;V}Ig(e)OSN(rM{dX_3jmSS=A}rkHz!T*5?z7;w;jhpt&Ls~JZpn0sg$?YUj)Z| zJ#r?Ju5&o9+^E*9o8wZC3i@7hE_lHg%!8uHD?KSV@w;a@(h5lSN0`G0Htjjv93kUF1sFn+Y%8RF98k#zEc+j~e!@W)}L9RyB|*x!eOj ju7aFOWwI|(Ezkb}fNXxRAP(Sm00000NkvXXu0mjf%yco3 diff --git a/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@3x.png b/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@3x.png index 4cf4c4fcd318ce70a46eee5d29bb369bcb47392f..c92518f8534a47a1d2e43c760ccf80f0a045dc52 100644 GIT binary patch literal 398 zcmeAS@N?(olHy`uVBq!ia0vp^At21b3?#L;KKKlz%mREuT!AzhV0&3c5m1{@NswPK zgTbY5li2kCuf6s#2-WVQm}!wOdzu75`Eymhj?UWpG<)+E&)k8M!@| z#X=JE1Q)#WU3G5>n8@;7f9Z=BdBm%Im%nKFtiAN*RpD%QpXPVwyP~JO-@Tr9R>y000QmNklURFKHcEC~eU5(z>`&Nu*;~LZ?xGqIV@$1o0T!!O8do{y>6OvxjLIju~Ft&E0)&i zX_NJ(udjQ_UP&$9@FSn^XF@TD;>fBNWICC8|7Zn^7mlHP^&iU%`-|)yN@}+V)fd@>diAo@yVv= zD$6v8wFXs3DbijPfO&o~7xRc%WMz$Ob->UE3?ea5wF zgj2{mKXJZ<4k5=#i_~e8Qs*(1@?;&=^nRwO(Huc<92=qN$}=GiVKsm@}Pj%wv! zxYkOIq3Q3MVXy)nN}jP6sFjwo)nZlpev0y^x!%9n8`NCuPUR9hoP;5&ec*_sdQX`6 zi2!6PbDb5MrNf#217DD*GYA2gZL5@&|MYWL=>dQ(_eFWS1li6r-@97FsLxtpg%+`c*7$+5C3p{W>$N2}AtQnxNbv&-j|tl3SnPmbxlY+pGI*A6d07ZRI8@J;)sd#3=MJmI!Sv@`_kX^; z`iyB_)+7#fyQ$*>kY`9(p-74~d&Wei!Sth%qpusiqFK_%{v)h}bcmW4xYIh}ZMquQ z>f_j)>6=~%wQBb7rWue~RU-w4n(1w^v^`e3TFG%{u9v^_lKo;Id(ACAFI&dQH_Y8O zY7Kd-ahXz)<0D(C>%FL1$|0|XJO2zm9N+C7ZDPAUWs06ojL*99zgI$D@jV0OX2SI0 z?o=C0-)Du(6^ooG-F?%GVbsIkbgQ#uwZEEkZFEFzza=J|jG4teWRjk4SwOWIkj~cIs_NA|D{4!*<#cKcL zeAy?n$X8*mP$4@kRjEk()7@7+D{NZ%vzfjq|3rIPp<11k*glUK8%)p40_GJ~Xp(Z+ zI(Hf31n6O$hrO>&tjx<$t;B?3jxq- zt-F-VKfb-0Md~EQcAM`a#Uhy{(!&Hbnxq}}t~o{?+lKKL+7iax>JgXfrei2^wdEQG zRo(3Zg^ohDV&hc@3)<}Rh|!9490e{HR_(M}@1CQ-i0o~GB|Zph*1I>D-jPIlhUJC5 zApjf9HCE&kMEbZQWHTkU$-^#EsN?D8%a*ARp1$o~BmTEoS$dl2XZA{mrr&S4B9YFZ z(4~H9r=(UJ%{NM}2%yv?PYG(;Vzx25>pXg>@|fMyTGX1aQUW;Ll^)j^)O_E9(6`Q| zz(h;cg^AwtfYExw4IbAdDXAg6^be+YGDR-5)J|<$Z1#|gWbw3jgX!!2#3)6&2HjPu z)*vNmt7*>U=U%njd+swtfv!WIahBSq+52vF4(GVpGo}fqcd`Fx8ex%_++mmmk#k(8 lzXDy4LKUuZt`h%$_%8sKT8DVubNT=P002ovPDHLkV1nvRn<)SQ diff --git a/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info.png b/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info.png index 2a3101841712c36ce91ef4bd1c19fa2961c5460f..a3a1f75c2683ddec087170f4afb65a2a01c613d0 100644 GIT binary patch literal 365 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 Kh86nG5B~!~U$x!< diff --git a/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@3x.png b/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@3x.png index 1aadb13ed3504db80e86b861531a381355e6eba2..d56aa0c229fce6d3980c129a13af94cde6457abf 100644 GIT binary patch literal 1200 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 RmM(Yz6NIHvje&do{{RQr{0;yB diff --git a/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success.png b/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success.png index 481caf89be7fad60ad8f7610ea0727b23bc6e72f..44769d028f92a031f683912f571cba6093fd1553 100644 GIT binary patch delta 245 zcmVa5X>CzrJ3j9Puq6y2e#yPB`eDv z$Rt`8od^;wdUBy4(Y%f;MTus$-58W;T1(BaM3b88MkN~8&~7j$QAu6Xgsw{ZbT^`= zWlC3>2j>QSG~`y>j8CnI&h&e)=vv2|FRhBIf;R=19xeD*S#&CR6;wT2(vx-3v4G5> vXid*HL`Q->xlKtbqC2@A$tt3K|NP1eU*|Q9VIES4 delta 333 zcmV-T0kZyv0^I_T8Gi-<0043g-;@9V0VGL8K~#9!?bfkN0%07+@k=a0EkQ(dI1;l# zAso`dC50LUhnAcio28}AQD_Ln!6BllmU0jr+#H0UmcpSELIe#XEbgE1J2W_moaem< z!aeX=?%p2{-22{fl9jd0-frj&3X*1&t z3*==6i%@aC#Ec(pyd$LN(Of`9LBm=vTIeFO%I04}MSj5=51LRAGvdUR@Q2em_qI_- z9|uMqaU05*AVxcL-HCe)aA@>>w&xu`-h>U%yyW$2XZ&00000NkvXXu0mjfTK1J? diff --git a/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@2x.png b/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@2x.png index c33f9f38609fb07043bb6d861265f74abaac8909..a9d16532fa862b66582d2008c6ae9a802fab2e1f 100644 GIT binary patch delta 447 zcmV;w0YLt%2F?SJ8Gi%-0007y^OXPq0hLKaK~#7F?bauh8c`I7@$WI|RpCbBz!4WL zXrhBo@!(H-Ot$ylckSZQAX&AT?L8*F_q=me`m~!iA5C$7lwtT27x!mo=;R4EQLBRw zeBcR6-LTvTI#8)1+&m5nUFE&y7CC}KCE;ouL!k@2wOpN(D1TJomF1e8MWGzeEVoP& zh0gKNa;vx~l;OVRwn?E-iXF?{CyhcbYnFRR7KM_uEccA_D0G%3%e^9xLZ@h0?kz#i zZMU>Fi|6ayTS`S6|+5oH)gNH~sC74C}8|M-SHR){#ms8BK= pK#%M|sRW%or4z$nR9swK+(+hG-LsBJb!Pwo002ovPDHLkV1f|R*G&Kb delta 799 zcmV+)1K|A51FHs*8Gi-<005|lJ01W40`f^jK~#7F?bXX})MXgQ@n`=3nN}~s13lP- zb*i)=tqpiudjTfifm@>(6RD91NI}uI7AS>qP!mGja1m}?xnW^Uv{q=H>CiJNc!+)$ z#MB*Xr{&f8C7*Zy&9iu;vH!suYpk)x8tZ6n%Xx_}ndUX}@P8zaA}?~46~5+W(hsDW z7r4qg*Vs=Bh1BC7<8$3i#q#T&Bk1tr}d*0#^3Pj3*C5E`n8s9QZD*@>SHuDUZxWjk6Lpzar-~$YD zmS31QScX(J<24$OI)3oP*i zhv^_7-M}VxafVyW@IGBc>VZx4Gr?`D9HEOyJ+Me06RfkudvuVId|*G5EW)30MI!aU zex{hG$_Sn0#AXFHkrP`e<0(#4W0n&vu;8aFvXnW#tLCropTDZ0stI>`SL2gm6luUB9zN4d@-7w9A>Hd!yD)L7*> zPf#N26^Nj_kt}ew4wvj@j5!t=rA(2iZy=Nz;Ref$QQm~e0zG`h992&7Bn4t?0-=Ww zm}8A&|9>*FNEgSbQDu@o0=6;`9%GcshRAO6e-PKnA(rksMIW)9fjK)Er@{)Ow389{ zAft=JEV0fwJ1K5&AY`;LMui$DX}!nDZjMr6V_Xx#b_W7wM)`><5nSWrOW!|NWoFJ!-gUoT0i|iq`)8GBe zPE*?u*-kU93^UIP=NX`oMj#aFi+q#g(`#H;M3K>XJNGjcK_fxsj+0#nxrOkE=| dWf+aXKLDpnxnQv~=s5rY002ovPDHLkV1llWXtDqR diff --git a/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@3x.png b/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@3x.png index c6063d0e676e8e6079b861522753c4dff1d51a6e..42bad9be6bd96668b05e4255c2c59a860663b740 100644 GIT binary patch delta 701 zcmV;u0z&<$49W$N8Gi%-006dP*h&BZ0+C5XK~#7F?b-v79!nHQ@$+okif!ArZQHhO z+qP{xFSc#lnfk~2a4R*xE-re{vTxT8E|<&YdTV_^TQ2fH5ispN26F4(+K6HA(3M*c z)+G#U!7XRC$E;eCIf)N3s*GgL;Zuyt&rK(DDPLh!X0AJ#>wowjqf&6i$=t>-7!{8T zPUb%T!l=lcbuy0<2%|!B(#bqcD2xig5hwFJkumBI_Q`P>52Jo!o0EBkR2cOw>zvH% zWW}g2S>j~gqyR>J$}Bn6%VN}rOpwglcIWq@lG)Pk{N7VCyYUW2wUNw0yoXWsBy+6Y z`MrW<&g5f^Dt|2V`w~9GsO&PoujMO@O2suNa|=IURD8K+?B;ijiYnKPg9N~+Fr0QW zj}a21f^bx>8IdsRADQ1T5F4X@)A^mG81)0|Wq!|qQD3oK=Jz~y=l6MXs+YtgzNbCo z$?nnleTrmO$3vz)*szkv=J%13*%VKa!>yu6=J&pm*?-BC^ZQiUxIAyFgY4GdlbP@{ z8$EV$Z6Z63<~=;@XEu2xwVLcQjSumHU)U@kqztd4gzT_@Pw|pp*&=_SOY^F7%Qa&q zUm?7kT8dYZUalD%_`&-_#8ycy$;(P2f8w_LW`6&jZIW7?mk~?Pe`5L35SpU!463+j8XwOAoF{4{NPV^N@_tI;&*n*{GJeHDD?+9 zBCeALKl+PZlA0g&6>H>mIqz<-ht$_v{N100000NkvXXu0mjf*%W02 delta 1570 zcmV+-2Hp9}1*i;=8Gi-<0010o5WxTd1@B2jK~#7F?7^`B00002uw3$YOrv940001h zD_uMG7Mt~5$8r4sJWpYiK0OYUjH7sCjNuHW96DxVqMLJ*;fNt2xEo`lP7WKaoYJyJ zaJw{_3~=5oaW2ti#?1{Glmexkwt+HWw{CNCXiLwOsjnC=et$86=Ls_UP<|J$J8pRA z`^*3HbmF8jEa6q!ImI@n^51`upD4p9?x&H%^l*d?d^HBmUy2I8&Q{LQMK`arf{FPB zjZ%Dp2Y8;Ne8zeH!Ww2!9)sqVp_~V3 zc$=q~N*T$G#h^u$QA<6?xk@_+Sji0TA&EhAtD=^zoTQT;{>+;EFEa+sP{~5J1k>mu z2U){RMv}y!xm8e0BY&lnKHg>()5wyJLGv5!3u)vKSGhn)`-OivXxT9ibna?KP zr<;EEvznO{lOBwqBN%pvO`~}{OAEbp&_o?G!)bIogO+k1Q<%u`0>9J@S>~~UWAxKS zIE_Y-8jPUJSRy=0bFV+^V!UMT;>Y%|&rrf#>S*N(U4+x9m{g$$4UOenZ07^|_?Xvtf^nbIrB+ZwJ%2~& zppU(5DB#Nka{cF)@FM5v2`1GNzH|#OHA5NItPiG9JIAP_ni7&bHE4!0e3Ko)rT&9I zv7E8D=u*pqoq3#guCSN7;A@_~gM$L22`{yeOT5hY|IeSPX)35@Bm1~Q8%NnlHDx4l z=LapKk_XutOsey|!BWQFFOf?lGF!X{JQObAN#W{Mp#Oo|(TprIq%}AK0f02*O^r1RI`cJU>Y^CiE1jtn0HZ7po*p8r3RDg zF(y$=IkR~tm_{9(U=uZzlEB>?w1_c0$ghJ-{e(ZVl&?@r9Y<+nfc

F6CrmP_7xn z=oR`VQt=%<5Y)PGY$ISGLnbQqO9%uB(f`a5U&C>ZT6)G?PVnHco?#_t$*F&k(M8iPjv0nnP8 U$ #import -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 * _Nonnull const SVProgressHUDDidReceiveTouchEventNotification; +extern NSString * _Nonnull const SVProgressHUDDidTouchDownInsideNotification; +extern NSString * _Nonnull const SVProgressHUDWillDisappearNotification; +extern NSString * _Nonnull const SVProgressHUDDidDisappearNotification; +extern NSString * _Nonnull const SVProgressHUDWillAppearNotification; +extern NSString * _Nonnull const SVProgressHUDDidAppearNotification; + +extern NSString * _Nonnull const SVProgressHUDStatusUserInfoKey; -extern NSString * const SVProgressHUDStatusUserInfoKey; +typedef NS_ENUM(NSInteger, SVProgressHUDStyle) { + SVProgressHUDStyleLight, // default style, white HUD with black text, HUD background will be blurred + SVProgressHUDStyleDark, // black HUD and white text, HUD background will be blurred + SVProgressHUDStyleCustom // uses the fore- and background color properties +}; typedef NS_ENUM(NSUInteger, SVProgressHUDMaskType) { - SVProgressHUDMaskTypeNone = 1, // 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 - SVProgressHUDMaskTypeGradient // don't allow user interactions and dim the UI with a a-la-alert-view background gradient + SVProgressHUDMaskTypeNone = 1, // default mask type, allow user interactions while HUD is displayed + SVProgressHUDMaskTypeClear, // don't allow user interactions with background objects + SVProgressHUDMaskTypeBlack, // don't allow user interactions with background objects and dim the UI in the back of the HUD (as seen in iOS 7 and above) + SVProgressHUDMaskTypeGradient, // don't allow user interactions with background objects and dim the UI with a a-la UIAlertView background gradient (as seen in iOS 6) + SVProgressHUDMaskTypeCustom // don't allow user interactions with background objects 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 }; +typedef void (^SVProgressHUDShowCompletion)(void); +typedef void (^SVProgressHUDDismissCompletion)(void); + @interface SVProgressHUD : UIView #pragma mark - Customization -+ (void)setBackgroundColor:(UIColor*)color; // default is [UIColor whiteColor] -+ (void)setForegroundColor:(UIColor*)color; // default is [UIColor blackColor] -+ (void)setRingThickness:(CGFloat)width; // default is 4 pt -+ (void)setFont:(UIFont*)font; // default is [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline] -+ (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)setDefaultMaskType:(SVProgressHUDMaskType)maskType; // default is SVProgressHUDMaskTypeNone -+ (void)setViewForExtension:(UIView*)view; // default is nil, only used if #define SV_APP_EXTENSIONS is set +@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 (strong, nonatomic, nullable) UIView *containerView; // if nil then use default window level +@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, nonnull) UIFont *font UI_APPEARANCE_SELECTOR; // default is [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline] +@property (strong, nonatomic, nonnull) UIColor *backgroundColor UI_APPEARANCE_SELECTOR; // default is [UIColor whiteColor] +@property (strong, nonatomic, nonnull) UIColor *foregroundColor UI_APPEARANCE_SELECTOR; // default is [UIColor blackColor] +@property (strong, nonatomic, nonnull) UIColor *backgroundLayerColor UI_APPEARANCE_SELECTOR;// default is [UIColor colorWithWhite:0 alpha:0.4] +@property (assign, nonatomic) CGSize imageViewSize UI_APPEARANCE_SELECTOR; // default is 28x28 pt +@property (assign, nonatomic) BOOL shouldTintImages UI_APPEARANCE_SELECTOR; // default is YES +@property (strong, nonatomic, nonnull) UIImage *infoImage UI_APPEARANCE_SELECTOR; // default is the bundled info image provided by Freepik +@property (strong, nonatomic, nonnull) UIImage *successImage UI_APPEARANCE_SELECTOR; // default is the bundled success image provided by Freepik +@property (strong, nonatomic, nonnull) UIImage *errorImage UI_APPEARANCE_SELECTOR; // default is the bundled error image provided by Freepik +@property (strong, nonatomic, nonnull) UIView *viewForExtension UI_APPEARANCE_SELECTOR; // default is nil, only used if #define SV_APP_EXTENSIONS is set +@property (assign, nonatomic) NSTimeInterval graceTimeInterval; // default is 0 seconds +@property (assign, nonatomic) NSTimeInterval minimumDismissTimeInterval; // default is 5.0 seconds +@property (assign, nonatomic) NSTimeInterval maximumDismissTimeInterval; // default is CGFLOAT_MAX + +@property (assign, nonatomic) UIOffset offsetFromCenter UI_APPEARANCE_SELECTOR; // default is 0, 0 + +@property (assign, nonatomic) NSTimeInterval fadeInAnimationDuration UI_APPEARANCE_SELECTOR; // default is 0.15 +@property (assign, nonatomic) NSTimeInterval fadeOutAnimationDuration UI_APPEARANCE_SELECTOR; // default is 0.15 + +@property (assign, nonatomic) UIWindowLevel maxSupportedWindowLevel; // default is UIWindowLevelNormal + +@property (assign, nonatomic) BOOL hapticsEnabled; // default is NO + ++ (void)setDefaultStyle:(SVProgressHUDStyle)style; // default is SVProgressHUDStyleLight ++ (void)setDefaultMaskType:(SVProgressHUDMaskType)maskType; // default is SVProgressHUDMaskTypeNone ++ (void)setDefaultAnimationType:(SVProgressHUDAnimationType)type; // default is SVProgressHUDAnimationTypeFlat ++ (void)setContainerView:(nullable UIView*)containerView; // default is window level ++ (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)setBorderColor:(nonnull UIColor*)color; // default is nil ++ (void)setBorderWidth:(CGFloat)width; // default is 0 ++ (void)setFont:(nonnull UIFont*)font; // default is [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline] ++ (void)setForegroundColor:(nonnull UIColor*)color; // default is [UIColor blackColor], only used for SVProgressHUDStyleCustom ++ (void)setBackgroundColor:(nonnull UIColor*)color; // default is [UIColor whiteColor], only used for SVProgressHUDStyleCustom ++ (void)setBackgroundLayerColor:(nonnull UIColor*)color; // default is [UIColor colorWithWhite:0 alpha:0.5], only used for SVProgressHUDMaskTypeCustom ++ (void)setImageViewSize:(CGSize)size; // default is 28x28 pt ++ (void)setShouldTintImages:(BOOL)shouldTintImages; // default is YES ++ (void)setInfoImage:(nonnull UIImage*)image; // default is the bundled info image provided by Freepik ++ (void)setSuccessImage:(nonnull UIImage*)image; // default is the bundled success image provided by Freepik ++ (void)setErrorImage:(nonnull UIImage*)image; // default is the bundled error image provided by Freepik ++ (void)setViewForExtension:(nonnull UIView*)view; // default is nil, only used if #define SV_APP_EXTENSIONS is set ++ (void)setGraceTimeInterval:(NSTimeInterval)interval; // default is 0 seconds ++ (void)setMinimumDismissTimeInterval:(NSTimeInterval)interval; // default is 5.0 seconds ++ (void)setMaximumDismissTimeInterval:(NSTimeInterval)interval; // default is infinite ++ (void)setFadeInAnimationDuration:(NSTimeInterval)duration; // default is 0.15 seconds ++ (void)setFadeOutAnimationDuration:(NSTimeInterval)duration; // default is 0.15 seconds ++ (void)setMaxSupportedWindowLevel:(UIWindowLevel)windowLevel; // default is UIWindowLevelNormal ++ (void)setHapticsEnabled:(BOOL)hapticsEnabled; // default is NO #pragma mark - Show Methods + (void)show; -+ (void)showWithMaskType:(SVProgressHUDMaskType)maskType; -+ (void)showWithStatus:(NSString*)status; -+ (void)showWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType; ++ (void)showWithMaskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use show and setDefaultMaskType: instead."))); ++ (void)showWithStatus:(nullable NSString*)status; ++ (void)showWithStatus:(nullable NSString*)status maskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use showWithStatus: and setDefaultMaskType: instead."))); + (void)showProgress:(float)progress; -+ (void)showProgress:(float)progress maskType:(SVProgressHUDMaskType)maskType; -+ (void)showProgress:(float)progress status:(NSString*)status; -+ (void)showProgress:(float)progress status:(NSString*)status maskType:(SVProgressHUDMaskType)maskType; - -+ (void)setStatus:(NSString*)string; // change the HUD loading status while it's showing ++ (void)showProgress:(float)progress maskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use showProgress: and setDefaultMaskType: instead."))); ++ (void)showProgress:(float)progress status:(nullable NSString*)status; ++ (void)showProgress:(float)progress status:(nullable NSString*)status maskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use showProgress:status: and setDefaultMaskType: instead."))); -// stops the activity indicator, shows a glyph + status, and dismisses HUD a little bit later -+ (void)showInfoWithStatus:(NSString *)string; -+ (void)showInfoWithStatus:(NSString *)string maskType:(SVProgressHUDMaskType)maskType; ++ (void)setStatus:(nullable NSString*)status; // change the HUD loading status while it's showing -+ (void)showSuccessWithStatus:(NSString*)string; -+ (void)showSuccessWithStatus:(NSString*)string maskType:(SVProgressHUDMaskType)maskType; +// stops the activity indicator, shows a glyph + status, and dismisses the HUD a little bit later ++ (void)showInfoWithStatus:(nullable NSString*)status; ++ (void)showInfoWithStatus:(nullable NSString*)status maskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use showInfoWithStatus: and setDefaultMaskType: instead."))); ++ (void)showSuccessWithStatus:(nullable NSString*)status; ++ (void)showSuccessWithStatus:(nullable NSString*)status maskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use showSuccessWithStatus: and setDefaultMaskType: instead."))); ++ (void)showErrorWithStatus:(nullable NSString*)status; ++ (void)showErrorWithStatus:(nullable NSString*)status maskType:(SVProgressHUDMaskType)maskType __attribute__((deprecated("Use showErrorWithStatus: and setDefaultMaskType: instead."))); -+ (void)showErrorWithStatus:(NSString *)string; -+ (void)showErrorWithStatus:(NSString *)string maskType:(SVProgressHUDMaskType)maskType; - -// use 28x28 white pngs -+ (void)showImage:(UIImage*)image status:(NSString*)status; -+ (void)showImage:(UIImage*)image status:(NSString*)status maskType:(SVProgressHUDMaskType)maskType; +// shows a image + status, use white PNGs with the imageViewSize (default is 28x28 pt) ++ (void)showImage:(nonnull UIImage*)image status:(nullable NSString*)status; ++ (void)showImage:(nonnull UIImage*)image status:(nullable 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)dismissWithCompletion:(nullable SVProgressHUDDismissCompletion)completion; ++ (void)dismissWithDelay:(NSTimeInterval)delay; ++ (void)dismissWithDelay:(NSTimeInterval)delay completion:(nullable SVProgressHUDDismissCompletion)completion; + (BOOL)isVisible; ++ (NSTimeInterval)displayDurationForString:(nullable NSString*)string; + @end diff --git a/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.m b/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.m index 1d735d2..2b66992 100644 --- a/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.m +++ b/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.m @@ -1,9 +1,8 @@ // -// SVProgressHUD.m +// SVProgressHUD.h +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD // -// Copyright 2011-2014 Sam Vermette. All rights reserved. -// -// https://github.com/samvermette/SVProgressHUD +// Copyright (c) 2011-2018 Sam Vermette and contributors. All rights reserved. // #if !__has_feature(objc_arc) @@ -12,7 +11,8 @@ #import "SVProgressHUD.h" #import "SVIndefiniteAnimatedView.h" -#import +#import "SVProgressAnimatedView.h" +#import "SVRadialGradientLayer.h" NSString * const SVProgressHUDDidReceiveTouchEventNotification = @"SVProgressHUDDidReceiveTouchEventNotification"; NSString * const SVProgressHUDDidTouchDownInsideNotification = @"SVProgressHUDDidTouchDownInsideNotification"; @@ -23,118 +23,178 @@ NSString * const SVProgressHUDStatusUserInfoKey = @"SVProgressHUDStatusUserInfoKey"; -static UIColor *SVProgressHUDBackgroundColor; -static UIColor *SVProgressHUDForegroundColor; -static CGFloat SVProgressHUDRingThickness; -static UIFont *SVProgressHUDFont; -static UIImage *SVProgressHUDInfoImage; -static UIImage *SVProgressHUDSuccessImage; -static UIImage *SVProgressHUDErrorImage; -static SVProgressHUDMaskType SVProgressHUDDefaultMaskType; -static UIView *SVProgressHUDExtensionView; - -static const CGFloat SVProgressHUDRingRadius = 18; -static const CGFloat SVProgressHUDRingNoTextRadius = 24; -static const CGFloat SVProgressHUDParallaxDepthPoints = 10; +static const CGFloat SVProgressHUDParallaxDepthPoints = 10.0f; static const CGFloat SVProgressHUDUndefinedProgress = -1; +static const CGFloat SVProgressHUDDefaultAnimationDuration = 0.15f; +static const CGFloat SVProgressHUDVerticalSpacing = 12.0f; +static const CGFloat SVProgressHUDHorizontalSpacing = 12.0f; +static const CGFloat SVProgressHUDLabelSpacing = 8.0f; + @interface SVProgressHUD () -@property (nonatomic, readwrite) SVProgressHUDMaskType maskType; -@property (nonatomic, strong, readonly) NSTimer *fadeOutTimer; -@property (nonatomic, readonly, getter = isClear) BOOL clear; +@property (nonatomic, strong) NSTimer *graceTimer; +@property (nonatomic, strong) NSTimer *fadeOutTimer; -@property (nonatomic, strong) UIControl *overlayView; -@property (nonatomic, strong) UIView *hudView; -@property (nonatomic, strong) UILabel *stringLabel; +@property (nonatomic, strong) UIControl *controlView; +@property (nonatomic, strong) UIView *backgroundView; +@property (nonatomic, strong) SVRadialGradientLayer *backgroundRadialGradientLayer; +@property (nonatomic, strong) UIVisualEffectView *hudView; +@property (nonatomic, strong) UILabel *statusLabel; @property (nonatomic, strong) UIImageView *imageView; -@property (nonatomic, strong) SVIndefiniteAnimatedView *indefiniteAnimatedView; + +@property (nonatomic, strong) UIView *indefiniteAnimatedView; +@property (nonatomic, strong) SVProgressAnimatedView *ringView; +@property (nonatomic, strong) SVProgressAnimatedView *backgroundRingView; @property (nonatomic, readwrite) CGFloat progress; @property (nonatomic, readwrite) NSUInteger activityCount; -@property (nonatomic, strong) CAShapeLayer *backgroundRingLayer; -@property (nonatomic, strong) CAShapeLayer *ringLayer; @property (nonatomic, readonly) CGFloat visibleKeyboardHeight; -@property (nonatomic, assign) UIOffset offsetFromCenter; - +@property (nonatomic, readonly) UIWindow *frontWindow; -- (void)showProgress:(float)progress status:(NSString*)string maskType:(SVProgressHUDMaskType)hudMaskType; -- (void)showImage:(UIImage*)image status:(NSString*)status duration:(NSTimeInterval)duration maskType:(SVProgressHUDMaskType)hudMaskType; - -- (void)dismiss; - -- (void)setStatus:(NSString*)string; -- (void)registerNotifications; -- (NSDictionary *)notificationUserInfo; -- (void)moveToPoint:(CGPoint)newCenter rotateAngle:(CGFloat)angle; -- (void)positionHUD:(NSNotification*)notification; -- (NSTimeInterval)displayDurationForString:(NSString*)string; +#if TARGET_OS_IOS && __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000 +@property (nonatomic, strong) UINotificationFeedbackGenerator *hapticGenerator NS_AVAILABLE_IOS(10_0); +#endif @end - -@implementation SVProgressHUD +@implementation SVProgressHUD { + BOOL _isInitializing; +} + (SVProgressHUD*)sharedView { static dispatch_once_t once; + static SVProgressHUD *sharedView; - dispatch_once(&once, ^ { sharedView = [[self alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; }); +#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 *)string { - [[self sharedView] setStatus:string]; ++ (void)setStatus:(NSString*)status { + [[self sharedView] setStatus:status]; } -+ (void)setBackgroundColor:(UIColor *)color { - [self sharedView].hudView.backgroundColor = color; - SVProgressHUDBackgroundColor = color; ++ (void)setDefaultStyle:(SVProgressHUDStyle)style { + [self sharedView].defaultStyle = style; } -+ (void)setForegroundColor:(UIColor *)color { - [self sharedView]; - SVProgressHUDForegroundColor = color; ++ (void)setDefaultMaskType:(SVProgressHUDMaskType)maskType { + [self sharedView].defaultMaskType = maskType; } -+ (void)setFont:(UIFont *)font { - [self sharedView]; - SVProgressHUDFont = font; ++ (void)setDefaultAnimationType:(SVProgressHUDAnimationType)type { + [self sharedView].defaultAnimationType = type; } -+ (void)setRingThickness:(CGFloat)width { - [self sharedView]; - SVProgressHUDRingThickness = width; ++ (void)setContainerView:(nullable UIView*)containerView { + [self sharedView].containerView = containerView; } -+ (void)setInfoImage:(UIImage*)image{ - [self sharedView]; - SVProgressHUDInfoImage = image; ++ (void)setMinimumSize:(CGSize)minimumSize { + [self sharedView].minimumSize = minimumSize; } -+ (void)setSuccessImage:(UIImage *)image { - [self sharedView]; - SVProgressHUDSuccessImage = image; ++ (void)setRingThickness:(CGFloat)ringThickness { + [self sharedView].ringThickness = ringThickness; } -+ (void)setErrorImage:(UIImage *)image { - [self sharedView]; - SVProgressHUDErrorImage = image; ++ (void)setRingRadius:(CGFloat)radius { + [self sharedView].ringRadius = radius; } -+ (void)setDefaultMaskType:(SVProgressHUDMaskType)maskType{ - [self sharedView]; - SVProgressHUDDefaultMaskType = maskType; ++ (void)setRingNoTextRadius:(CGFloat)radius { + [self sharedView].ringNoTextRadius = radius; } -+ (void)setViewForExtension:(UIView *)view{ - [self sharedView]; - SVProgressHUDExtensionView = view; ++ (void)setCornerRadius:(CGFloat)cornerRadius { + [self sharedView].cornerRadius = cornerRadius; } ++ (void)setBorderColor:(nonnull UIColor*)color { + [self sharedView].hudView.layer.borderColor = color.CGColor; +} + ++ (void)setBorderWidth:(CGFloat)width { + [self sharedView].hudView.layer.borderWidth = width; +} + ++ (void)setFont:(UIFont*)font { + [self sharedView].font = font; +} + ++ (void)setForegroundColor:(UIColor*)color { + [self sharedView].foregroundColor = color; + [self setDefaultStyle:SVProgressHUDStyleCustom]; +} + ++ (void)setBackgroundColor:(UIColor*)color { + [self sharedView].backgroundColor = color; + [self setDefaultStyle:SVProgressHUDStyleCustom]; +} + ++ (void)setBackgroundLayerColor:(UIColor*)color { + [self sharedView].backgroundLayerColor = color; +} + ++ (void)setImageViewSize:(CGSize)size { + [self sharedView].imageViewSize = size; +} + ++ (void)setShouldTintImages:(BOOL)shouldTintImages { + [self sharedView].shouldTintImages = shouldTintImages; +} + ++ (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)setGraceTimeInterval:(NSTimeInterval)interval { + [self sharedView].graceTimeInterval = interval; +} + ++ (void)setMinimumDismissTimeInterval:(NSTimeInterval)interval { + [self sharedView].minimumDismissTimeInterval = interval; +} + ++ (void)setMaximumDismissTimeInterval:(NSTimeInterval)interval { + [self sharedView].maximumDismissTimeInterval = interval; +} + ++ (void)setFadeInAnimationDuration:(NSTimeInterval)duration { + [self sharedView].fadeInAnimationDuration = duration; +} + ++ (void)setFadeOutAnimationDuration:(NSTimeInterval)duration { + [self sharedView].fadeOutAnimationDuration = duration; +} + ++ (void)setMaxSupportedWindowLevel:(UIWindowLevel)windowLevel { + [self sharedView].maxSupportedWindowLevel = windowLevel; +} + ++ (void)setHapticsEnabled:(BOOL)hapticsEnabled { + [self sharedView].hapticsEnabled = hapticsEnabled; +} #pragma mark - Show Methods @@ -143,92 +203,159 @@ + (void)show { } + (void)showWithMaskType:(SVProgressHUDMaskType)maskType { - [self showProgress:SVProgressHUDUndefinedProgress maskType:maskType]; + SVProgressHUDMaskType existingMaskType = [self sharedView].defaultMaskType; + [self setDefaultMaskType:maskType]; + [self show]; + [self setDefaultMaskType:existingMaskType]; } -+ (void)showWithStatus:(NSString *)status { ++ (void)showWithStatus:(NSString*)status { [self showProgress:SVProgressHUDUndefinedProgress status:status]; } + (void)showWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType { - [self showProgress:SVProgressHUDUndefinedProgress status:status maskType:maskType]; + SVProgressHUDMaskType existingMaskType = [self sharedView].defaultMaskType; + [self setDefaultMaskType:maskType]; + [self showWithStatus:status]; + [self setDefaultMaskType:existingMaskType]; } + (void)showProgress:(float)progress { - [self sharedView]; - [self showProgress:progress maskType:SVProgressHUDDefaultMaskType]; + [self showProgress:progress status:nil]; } -+ (void)showProgress:(float)progress maskType:(SVProgressHUDMaskType)maskType{ - [self showProgress:progress status:nil maskType:maskType]; ++ (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]; - [self showProgress:progress status:status maskType:SVProgressHUDDefaultMaskType]; ++ (void)showProgress:(float)progress status:(NSString*)status { + [[self sharedView] showProgress:progress status:status]; } -+ (void)showProgress:(float)progress status:(NSString *)status maskType:(SVProgressHUDMaskType)maskType { - [[self sharedView] showProgress:progress status:status maskType:maskType]; ++ (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 dismiss methods +#pragma mark - Show, then automatically dismiss methods -+ (void)showInfoWithStatus:(NSString *)string { - [self sharedView]; - [self showInfoWithStatus:string maskType:SVProgressHUDDefaultMaskType]; ++ (void)showInfoWithStatus:(NSString*)status { + [self showImage:[self sharedView].infoImage status:status]; + +#if TARGET_OS_IOS && __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000 + if (@available(iOS 10.0, *)) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[self sharedView].hapticGenerator notificationOccurred:UINotificationFeedbackTypeWarning]; + }); + } +#endif } -+ (void)showInfoWithStatus:(NSString *)string maskType:(SVProgressHUDMaskType)maskType { - [self sharedView]; - [self showImage:SVProgressHUDInfoImage status:string maskType:maskType]; ++ (void)showInfoWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType { + SVProgressHUDMaskType existingMaskType = [self sharedView].defaultMaskType; + [self setDefaultMaskType:maskType]; + [self showInfoWithStatus:status]; + [self setDefaultMaskType:existingMaskType]; } -+ (void)showSuccessWithStatus:(NSString *)string { - [self sharedView]; - [self showSuccessWithStatus:string maskType:SVProgressHUDDefaultMaskType]; ++ (void)showSuccessWithStatus:(NSString*)status { + [self showImage:[self sharedView].successImage status:status]; + +#if TARGET_OS_IOS && __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000 + if (@available(iOS 10, *)) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[self sharedView].hapticGenerator notificationOccurred:UINotificationFeedbackTypeSuccess]; + }); + } +#endif } -+ (void)showSuccessWithStatus:(NSString *)string maskType:(SVProgressHUDMaskType)maskType { - [self sharedView]; - [self showImage:SVProgressHUDSuccessImage status:string maskType:maskType]; ++ (void)showSuccessWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType { + SVProgressHUDMaskType existingMaskType = [self sharedView].defaultMaskType; + [self setDefaultMaskType:maskType]; + [self showSuccessWithStatus:status]; + [self setDefaultMaskType:existingMaskType]; + +#if TARGET_OS_IOS && __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000 + if (@available(iOS 10.0, *)) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[self sharedView].hapticGenerator notificationOccurred:UINotificationFeedbackTypeSuccess]; + }); + } +#endif } -+ (void)showErrorWithStatus:(NSString *)string { - [self sharedView]; - [self showErrorWithStatus:string maskType:SVProgressHUDDefaultMaskType]; ++ (void)showErrorWithStatus:(NSString*)status { + [self showImage:[self sharedView].errorImage status:status]; + +#if TARGET_OS_IOS && __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000 + if (@available(iOS 10.0, *)) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[self sharedView].hapticGenerator notificationOccurred:UINotificationFeedbackTypeError]; + }); + } +#endif } -+ (void)showErrorWithStatus:(NSString *)string maskType:(SVProgressHUDMaskType)maskType { - [self sharedView]; - [self showImage:SVProgressHUDErrorImage status:string maskType:maskType]; ++ (void)showErrorWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType { + SVProgressHUDMaskType existingMaskType = [self sharedView].defaultMaskType; + [self setDefaultMaskType:maskType]; + [self showErrorWithStatus:status]; + [self setDefaultMaskType:existingMaskType]; + +#if TARGET_OS_IOS && __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000 + if (@available(iOS 10.0, *)) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[self sharedView].hapticGenerator notificationOccurred:UINotificationFeedbackTypeError]; + }); + } +#endif } -+ (void)showImage:(UIImage *)image status:(NSString *)string { - [self sharedView]; - [self showImage:image status:string maskType:SVProgressHUDDefaultMaskType]; ++ (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 *)string maskType:(SVProgressHUDMaskType)maskType { - NSTimeInterval displayInterval = [[self sharedView] displayDurationForString:string]; - [[self sharedView] showImage:image status:string duration:displayInterval maskType:maskType]; ++ (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) + if([self sharedView].activityCount > 0) { [self sharedView].activityCount--; - if([self sharedView].activityCount == 0) + } + if([self sharedView].activityCount == 0) { [[self sharedView] dismiss]; + } } + (void)dismiss { - if ([self isVisible]) { - [[self sharedView] dismiss]; - } + [self dismissWithDelay:0.0 completion:nil]; +} + ++ (void)dismissWithCompletion:(SVProgressHUDDismissCompletion)completion { + [self dismissWithDelay:0.0 completion:completion]; +} + ++ (void)dismissWithDelay:(NSTimeInterval)delay { + [self dismissWithDelay:delay completion:nil]; +} + ++ (void)dismissWithDelay:(NSTimeInterval)delay completion:(SVProgressHUDDismissCompletion)completion { + [[self sharedView] dismissWithDelay:delay completion:completion]; } @@ -245,194 +372,229 @@ + (void)resetOffsetFromCenter { #pragma mark - Instance Methods -- (id)initWithFrame:(CGRect)frame { - if ((self = [super initWithFrame:frame])) { - self.userInteractionEnabled = NO; - self.backgroundColor = [UIColor clearColor]; - self.alpha = 0.0f; +- (instancetype)initWithFrame:(CGRect)frame { + if((self = [super initWithFrame:frame])) { + _isInitializing = YES; + + self.userInteractionEnabled = NO; self.activityCount = 0; - SVProgressHUDBackgroundColor = [UIColor whiteColor]; - SVProgressHUDForegroundColor = [UIColor blackColor]; - if ([UIFont respondsToSelector:@selector(preferredFontForTextStyle:)]) { - SVProgressHUDFont = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]; - } else { - SVProgressHUDFont = [UIFont systemFontOfSize:14.0f]; - SVProgressHUDBackgroundColor = [UIColor colorWithWhite:0.0f alpha:0.8f]; - SVProgressHUDForegroundColor = [UIColor whiteColor]; - } + self.backgroundView.alpha = 0.0f; + self.imageView.alpha = 0.0f; + self.statusLabel.alpha = 0.0f; + self.indefiniteAnimatedView.alpha = 0.0f; + self.ringView.alpha = self.backgroundRingView.alpha = 0.0f; + + + _backgroundColor = [UIColor whiteColor]; + _foregroundColor = [UIColor blackColor]; + _backgroundLayerColor = [UIColor colorWithWhite:0 alpha:0.4]; + + // Set default values + _defaultMaskType = SVProgressHUDMaskTypeNone; + _defaultStyle = SVProgressHUDStyleLight; + _defaultAnimationType = SVProgressHUDAnimationTypeFlat; + _minimumSize = CGSizeZero; + _font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]; - NSBundle *bundle = [NSBundle bundleForClass:self.class]; + _imageViewSize = CGSizeMake(28.0f, 28.0f); + _shouldTintImages = YES; + + 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:)]) { - SVProgressHUDInfoImage = [infoImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - SVProgressHUDSuccessImage = [successImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - SVProgressHUDErrorImage = [errorImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - } else { - SVProgressHUDInfoImage = infoImage; - SVProgressHUDSuccessImage = successImage; - SVProgressHUDErrorImage = errorImage; - } + _infoImage = [UIImage imageWithContentsOfFile:[imageBundle pathForResource:@"info" ofType:@"png"]]; + _successImage = [UIImage imageWithContentsOfFile:[imageBundle pathForResource:@"success" ofType:@"png"]]; + _errorImage = [UIImage imageWithContentsOfFile:[imageBundle pathForResource:@"error" ofType:@"png"]]; - SVProgressHUDRingThickness = 2; - SVProgressHUDDefaultMaskType = SVProgressHUDMaskTypeNone; + _ringThickness = 2.0f; + _ringRadius = 18.0f; + _ringNoTextRadius = 24.0f; + + _cornerRadius = 14.0f; + + _graceTimeInterval = 0.0f; + _minimumDismissTimeInterval = 5.0; + _maximumDismissTimeInterval = CGFLOAT_MAX; + + _fadeInAnimationDuration = SVProgressHUDDefaultAnimationDuration; + _fadeOutAnimationDuration = SVProgressHUDDefaultAnimationDuration; + + _maxSupportedWindowLevel = UIWindowLevelNormal; + + _hapticsEnabled = NO; + + // Accessibility support + self.accessibilityIdentifier = @"SVProgressHUD"; + self.isAccessibilityElement = YES; + + _isInitializing = NO; } - return self; } -- (void)drawRect:(CGRect)rect { - CGContextRef context = UIGraphicsGetCurrentContext(); +- (void)updateHUDFrame { + // Check if an image or progress ring is displayed + BOOL imageUsed = (self.imageView.image) && !(self.imageView.hidden); + BOOL progressUsed = self.imageView.hidden; - switch (self.maskType) { - case SVProgressHUDMaskTypeBlack: { - - [[UIColor colorWithWhite:0 alpha:0.5] set]; - CGContextFillRect(context, self.bounds); - - break; - } - case SVProgressHUDMaskTypeGradient: { - - 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); - - CGFloat freeHeight = CGRectGetHeight(self.bounds) - self.visibleKeyboardHeight; - - CGPoint center = CGPointMake(CGRectGetWidth(self.bounds)/2, freeHeight/2); - float radius = MIN(CGRectGetWidth(self.bounds) , CGRectGetHeight(self.bounds)) ; - CGContextDrawRadialGradient (context, gradient, center, 0, center, radius, kCGGradientDrawsAfterEndLocation); - CGGradientRelease(gradient); - - break; - } - default: - break; + // Calculate size of string + CGRect labelRect = CGRectZero; + CGFloat labelHeight = 0.0f; + CGFloat labelWidth = 0.0f; + + if(self.statusLabel.text) { + CGSize constraintSize = CGSizeMake(200.0f, 300.0f); + labelRect = [self.statusLabel.text boundingRectWithSize:constraintSize + options:(NSStringDrawingOptions)(NSStringDrawingUsesFontLeading | NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin) + attributes:@{NSFontAttributeName: self.statusLabel.font} + context:NULL]; + labelHeight = ceilf(CGRectGetHeight(labelRect)); + labelWidth = ceilf(CGRectGetWidth(labelRect)); } -} - -- (void)updatePosition { - - CGFloat hudWidth = 100.0f; - CGFloat hudHeight = 100.0f; - CGFloat stringHeightBuffer = 20.0f; - CGFloat stringAndContentHeightBuffer = 80.0f; - CGFloat stringWidth = 0.0f; - CGFloat stringHeight = 0.0f; - CGRect labelRect = CGRectZero; + // Calculate hud size based on content + // For the beginning use default values, these + // might get update if string is too large etc. + CGFloat hudWidth; + CGFloat hudHeight; - NSString *string = self.stringLabel.text; + CGFloat contentWidth = 0.0f; + CGFloat contentHeight = 0.0f; - // Check if an image or progress ring is displayed - BOOL imageUsed = (self.imageView.image) || (self.imageView.hidden); - BOOL progressUsed = (self.progress != SVProgressHUDUndefinedProgress) && (self.progress >= 0.0f); + if(imageUsed || progressUsed) { + contentWidth = CGRectGetWidth(imageUsed ? self.imageView.frame : self.indefiniteAnimatedView.frame); + contentHeight = CGRectGetHeight(imageUsed ? self.imageView.frame : self.indefiniteAnimatedView.frame); + } - if(string) { - CGSize constraintSize = CGSizeMake(200.0f, 300.0f); - CGRect stringRect; - if ([string respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) { - stringRect = [string boundingRectWithSize:constraintSize - options:(NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin) - attributes:@{NSFontAttributeName: self.stringLabel.font} - context:NULL]; - } else { - CGSize stringSize; - - if ([string respondsToSelector:@selector(sizeWithAttributes:)]) - stringSize = [string sizeWithAttributes:@{NSFontAttributeName:[UIFont fontWithName:self.stringLabel.font.fontName size:self.stringLabel.font.pointSize]}]; - else -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated" - stringSize = [string sizeWithFont:self.stringLabel.font constrainedToSize:CGSizeMake(200.0f, 300.0f)]; -#pragma clang diagnostic pop - - stringRect = CGRectMake(0.0f, 0.0f, stringSize.width, stringSize.height); - } - stringWidth = stringRect.size.width; - stringHeight = ceil(CGRectGetHeight(stringRect)); - - if (imageUsed || progressUsed) - hudHeight = stringAndContentHeightBuffer + stringHeight; - else - hudHeight = stringHeightBuffer + stringHeight; - - if(stringWidth > hudWidth) - hudWidth = ceil(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); - } + // |-spacing-content-spacing-| + hudWidth = SVProgressHUDHorizontalSpacing + MAX(labelWidth, contentWidth) + SVProgressHUDHorizontalSpacing; + + // |-spacing-content-(labelSpacing-label-)spacing-| + hudHeight = SVProgressHUDVerticalSpacing + labelHeight + contentHeight + SVProgressHUDVerticalSpacing; + if(self.statusLabel.text && (imageUsed || progressUsed)){ + // Add spacing if both content and label are used + hudHeight += SVProgressHUDLabelSpacing; } - - self.hudView.bounds = CGRectMake(0.0f, 0.0f, hudWidth, hudHeight); - 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.stringLabel.hidden = NO; - self.stringLabel.frame = labelRect; + // Update values on subviews + self.hudView.bounds = CGRectMake(0.0f, 0.0f, MAX(self.minimumSize.width, hudWidth), MAX(self.minimumSize.height, hudHeight)); + // Animate value update [CATransaction begin]; - [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; - - if(string) { - self.indefiniteAnimatedView.radius = SVProgressHUDRingRadius; - [self.indefiniteAnimatedView sizeToFit]; - - CGPoint center = CGPointMake((CGRectGetWidth(self.hudView.bounds)/2), 36.0f); - self.indefiniteAnimatedView.center = center; - - if(self.progress != SVProgressHUDUndefinedProgress) - self.backgroundRingLayer.position = self.ringLayer.position = CGPointMake((CGRectGetWidth(self.hudView.bounds)/2), 36.0f); - } else { - self.indefiniteAnimatedView.radius = SVProgressHUDRingNoTextRadius; - [self.indefiniteAnimatedView sizeToFit]; - - CGPoint center = CGPointMake((CGRectGetWidth(self.hudView.bounds)/2), CGRectGetHeight(self.hudView.bounds)/2); - self.indefiniteAnimatedView.center = center; - - if(self.progress != SVProgressHUDUndefinedProgress) - self.backgroundRingLayer.position = self.ringLayer.position = CGPointMake((CGRectGetWidth(self.hudView.bounds)/2), CGRectGetHeight(self.hudView.bounds)/2); + [CATransaction setDisableActions:YES]; + + // Spinner and image view + CGFloat centerY; + if(self.statusLabel.text) { + CGFloat yOffset = MAX(SVProgressHUDVerticalSpacing, (self.minimumSize.height - contentHeight - SVProgressHUDLabelSpacing - labelHeight) / 2.0f); + centerY = yOffset + contentHeight / 2.0f; + } else { + centerY = CGRectGetMidY(self.hudView.bounds); + } + self.indefiniteAnimatedView.center = CGPointMake(CGRectGetMidX(self.hudView.bounds), centerY); + if(self.progress != SVProgressHUDUndefinedProgress) { + self.backgroundRingView.center = self.ringView.center = CGPointMake(CGRectGetMidX(self.hudView.bounds), centerY); + } + self.imageView.center = CGPointMake(CGRectGetMidX(self.hudView.bounds), centerY); + + // Label + if(imageUsed || progressUsed) { + centerY = CGRectGetMaxY(imageUsed ? self.imageView.frame : self.indefiniteAnimatedView.frame) + SVProgressHUDLabelSpacing + labelHeight / 2.0f; + } else { + centerY = CGRectGetMidY(self.hudView.bounds); } + self.statusLabel.frame = labelRect; + self.statusLabel.center = CGPointMake(CGRectGetMidX(self.hudView.bounds), centerY); [CATransaction commit]; } -- (void)setStatus:(NSString *)string { - self.stringLabel.text = string; - [self updatePosition]; +#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 { + 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 new]; + effectGroup.motionEffects = @[effectX, effectY]; + + // Clear old motion effect, then add new motion effects + self.hudView.motionEffects = @[]; + [self.hudView addMotionEffect:effectGroup]; } -- (void)setFadeOutTimer:(NSTimer *)newTimer { - if(_fadeOutTimer) - [_fadeOutTimer invalidate], _fadeOutTimer = nil; +- (void)updateViewHierarchy { + // Add the overlay to the application window if necessary + if(!self.controlView.superview) { + if(self.containerView){ + [self.containerView addSubview:self.controlView]; + } else { +#if !defined(SV_APP_EXTENSIONS) + [self.frontWindow addSubview:self.controlView]; +#else + // If SVProgressHUD is used inside an app extension add it to the given view + if(self.viewForExtension) { + [self.viewForExtension addSubview:self.controlView]; + } +#endif + } + } else { + // The HUD is already on screen, but maybe not in front. Therefore + // ensure that overlay will be on top of rootViewController (which may + // be changed during runtime). + [self.controlView.superview bringSubviewToFront:self.controlView]; + } - if(newTimer) - _fadeOutTimer = newTimer; + // Add self to the overlay view + if(!self.superview) { + [self.controlView addSubview:self]; + } +} + +- (void)setStatus:(NSString*)status { + self.statusLabel.text = status; + self.statusLabel.hidden = status.length == 0; + [self updateHUDFrame]; +} + +- (void)setGraceTimer:(NSTimer*)timer { + if(_graceTimer) { + [_graceTimer invalidate]; + _graceTimer = nil; + } + if(timer) { + _graceTimer = timer; + } } +- (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 @@ -457,521 +619,715 @@ - (void)registerNotifications { selector:@selector(positionHUD:) name:UIKeyboardDidShowNotification object:nil]; +#endif + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(positionHUD:) + name:UIApplicationDidBecomeActiveNotification + object:nil]; } - -- (NSDictionary *)notificationUserInfo{ - return (self.stringLabel.text ? @{SVProgressHUDStatusUserInfoKey : self.stringLabel.text} : nil); +- (NSDictionary*)notificationUserInfo { + return (self.statusLabel.text ? @{SVProgressHUDStatusUserInfoKey : self.statusLabel.text} : nil); } - - (void)positionHUD:(NSNotification*)notification { - CGFloat keyboardHeight = 0.0f; double animationDuration = 0.0; - - self.frame = UIScreen.mainScreen.bounds; - -#if !defined(SV_APP_EXTENSIONS) + +#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) && !TARGET_OS_IOS + self.frame= [UIApplication sharedApplication].keyWindow.bounds; #else + if (self.viewForExtension) { + self.frame = self.viewForExtension.frame; + } else { + self.frame = UIScreen.mainScreen.bounds; + } +#if TARGET_OS_IOS 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 regard to current state if(notification) { NSDictionary* keyboardInfo = [notification userInfo]; - CGRect keyboardFrame = [[keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]; - animationDuration = [[keyboardInfo valueForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + CGRect keyboardFrame = [keyboardInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue]; + animationDuration = [keyboardInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; if(notification.name == UIKeyboardWillShowNotification || notification.name == UIKeyboardDidShowNotification) { - if(ignoreOrientation || UIInterfaceOrientationIsPortrait(orientation)) + keyboardHeight = CGRectGetWidth(keyboardFrame); + + if(UIInterfaceOrientationIsPortrait(orientation)) { keyboardHeight = CGRectGetHeight(keyboardFrame); - else - keyboardHeight = CGRectGetWidth(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) + +#if !defined(SV_APP_EXTENSIONS) && TARGET_OS_IOS CGRect statusBarFrame = UIApplication.sharedApplication.statusBarFrame; #else CGRect statusBarFrame = CGRectZero; #endif - 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; - } +#if TARGET_OS_IOS + // Update the motion effects in regard 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; - + if(keyboardHeight > 0) { + activeHeight += CGRectGetHeight(statusBarFrame) * 2; + } activeHeight -= keyboardHeight; - CGFloat posY = floor(activeHeight*0.45); - CGFloat posX = CGRectGetWidth(orientationFrame)/2; - - CGPoint newCenter; - CGFloat rotateAngle; - if (ignoreOrientation) { - rotateAngle = 0.0; - newCenter = CGPointMake(posX, posY); - } else { - switch (orientation) { - case UIInterfaceOrientationPortraitUpsideDown: - rotateAngle = M_PI; - newCenter = CGPointMake(posX, CGRectGetHeight(orientationFrame)-posY); - break; - case UIInterfaceOrientationLandscapeLeft: - rotateAngle = -M_PI/2.0f; - newCenter = CGPointMake(posY, posX); - break; - case UIInterfaceOrientationLandscapeRight: - rotateAngle = M_PI/2.0f; - newCenter = CGPointMake(CGRectGetHeight(orientationFrame)-posY, posX); - break; - default: // as UIInterfaceOrientationPortrait - rotateAngle = 0.0; - newCenter = CGPointMake(posX, posY); - break; - } - } + CGFloat posX = CGRectGetMidX(orientationFrame); + CGFloat posY = floorf(activeHeight*0.45f); + + CGFloat rotateAngle = 0.0; + CGPoint newCenter = CGPointMake(posX, posY); if(notification) { + // Animate update if notification was present [UIView animateWithDuration:animationDuration delay:0 - options:UIViewAnimationOptionAllowUserInteraction + options:(UIViewAnimationOptions) (UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionBeginFromCurrentState) animations:^{ [self moveToPoint:newCenter rotateAngle:rotateAngle]; [self.hudView setNeedsDisplay]; - } completion:NULL]; + } completion:nil]; } else { [self moveToPoint:newCenter rotateAngle:rotateAngle]; - [self.hudView setNeedsDisplay]; } - } - (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); + if (self.containerView) { + self.hudView.center = CGPointMake(self.containerView.center.x + self.offsetFromCenter.horizontal, self.containerView.center.y + self.offsetFromCenter.vertical); + } else { + self.hudView.center = CGPointMake(newCenter.x + self.offsetFromCenter.horizontal, newCenter.y + self.offsetFromCenter.vertical); + } } -- (void)overlayViewDidReceiveTouchEvent:(id)sender forEvent:(UIEvent *)event { - [[NSNotificationCenter defaultCenter] postNotificationName:SVProgressHUDDidReceiveTouchEventNotification object:event]; + +#pragma mark - Event handling + +- (void)controlViewDidReceiveTouchEvent:(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:event]; + 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*)string maskType:(SVProgressHUDMaskType)hudMaskType { - if(!self.overlayView.superview){ -#if !defined(SV_APP_EXTENSIONS) - 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; +- (void)showProgress:(float)progress status:(NSString*)status { + __weak SVProgressHUD *weakSelf = self; + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + __strong SVProgressHUD *strongSelf = weakSelf; + if(strongSelf){ + if(strongSelf.fadeOutTimer) { + strongSelf.activityCount = 0; + } + + // Stop timer + strongSelf.fadeOutTimer = nil; + strongSelf.graceTimer = nil; + + // Update / Check view hierarchy to ensure the HUD is visible + [strongSelf updateViewHierarchy]; + + // Reset imageView and fadeout timer if an image is currently displayed + strongSelf.imageView.hidden = YES; + strongSelf.imageView.image = nil; + + // Update text and set progress to the given value + strongSelf.statusLabel.hidden = status.length == 0; + 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 + if(!strongSelf.ringView.superview){ + [strongSelf.hudView.contentView addSubview:strongSelf.ringView]; + } + if(!strongSelf.backgroundRingView.superview){ + [strongSelf.hudView.contentView addSubview:strongSelf.backgroundRingView]; + } + + // Set progress animated + [CATransaction begin]; + [CATransaction setDisableActions:YES]; + strongSelf.ringView.strokeEnd = progress; + [CATransaction commit]; + + // Update 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.contentView addSubview:strongSelf.indefiniteAnimatedView]; + if([strongSelf.indefiniteAnimatedView respondsToSelector:@selector(startAnimating)]) { + [(id)strongSelf.indefiniteAnimatedView startAnimating]; + } + + // Update the activity count + strongSelf.activityCount++; + } - if (windowOnMainScreen && windowIsVisible && windowLevelNormal) { - [window addSubview:self.overlayView]; - break; + // Fade in delayed if a grace time is set + if (self.graceTimeInterval > 0.0 && self.backgroundView.alpha == 0.0f) { + strongSelf.graceTimer = [NSTimer timerWithTimeInterval:self.graceTimeInterval target:strongSelf selector:@selector(fadeIn:) userInfo:nil repeats:NO]; + [[NSRunLoop mainRunLoop] addTimer:strongSelf.graceTimer forMode:NSRunLoopCommonModes]; + } else { + [strongSelf fadeIn:nil]; } + + // Tell the Haptics Generator to prepare for feedback, which may come soon +#if TARGET_OS_IOS && __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000 + if (@available(iOS 10.0, *)) { + [strongSelf.hapticGenerator prepare]; + } +#endif } -#else - if(SVProgressHUDExtensionView){ - [SVProgressHUDExtensionView addSubview:self.overlayView]; + }]; +} + +- (void)showImage:(UIImage*)image status:(NSString*)status duration:(NSTimeInterval)duration { + __weak SVProgressHUD *weakSelf = self; + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + __strong SVProgressHUD *strongSelf = weakSelf; + if(strongSelf){ + // Stop timer + strongSelf.fadeOutTimer = nil; + strongSelf.graceTimer = nil; + + // Update / Check view hierarchy to ensure the HUD is visible + [strongSelf updateViewHierarchy]; + + // Reset progress and cancel any running animation + strongSelf.progress = SVProgressHUDUndefinedProgress; + [strongSelf cancelRingLayerAnimation]; + [strongSelf cancelIndefiniteAnimatedViewAnimation]; + + // Update imageView + if (self.shouldTintImages) { + if (image.renderingMode != UIImageRenderingModeAlwaysTemplate) { + strongSelf.imageView.image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + } + strongSelf.imageView.tintColor = strongSelf.foregroundColorForStyle;; + } else { + strongSelf.imageView.image = image; + } + strongSelf.imageView.hidden = NO; + + // Update text + strongSelf.statusLabel.hidden = status.length == 0; + strongSelf.statusLabel.text = status; + + // Fade in delayed if a grace time is set + // An image will be dismissed automatically. Thus pass the duration as userInfo. + if (self.graceTimeInterval > 0.0 && self.backgroundView.alpha == 0.0f) { + strongSelf.graceTimer = [NSTimer timerWithTimeInterval:self.graceTimeInterval target:strongSelf selector:@selector(fadeIn:) userInfo:@(duration) repeats:NO]; + [[NSRunLoop mainRunLoop] addTimer:strongSelf.graceTimer forMode:NSRunLoopCommonModes]; + } else { + [strongSelf fadeIn:@(duration)]; + } } -#endif - } else { - // Ensure that overlay will be exactly on top of rootViewController (which may be changed during runtime). - [self.overlayView.superview bringSubviewToFront:self.overlayView]; - } - - if(!self.superview) - [self.overlayView addSubview:self]; - - self.fadeOutTimer = nil; - self.imageView.hidden = YES; - self.maskType = hudMaskType; - self.progress = progress; - - self.stringLabel.text = string; - [self updatePosition]; - - if(progress >= 0) { - self.imageView.image = nil; - self.imageView.hidden = NO; - [self.indefiniteAnimatedView removeFromSuperview]; - - self.ringLayer.strokeEnd = progress; - - if(progress == 0) - self.activityCount++; - } else { - self.activityCount++; - [self cancelRingLayerAnimation]; - [self.hudView addSubview:self.indefiniteAnimatedView]; - } + }]; +} + +- (void)fadeIn:(id)data { + // Update the HUDs frame to the new content and position HUD + [self updateHUDFrame]; + [self positionHUD:nil]; - if(self.maskType != SVProgressHUDMaskTypeNone) { - self.overlayView.userInteractionEnabled = YES; - self.accessibilityLabel = string; + // Update accessibility as well as user interaction + if(self.defaultMaskType != SVProgressHUDMaskTypeNone) { + self.controlView.userInteractionEnabled = YES; + self.accessibilityLabel = self.statusLabel.text ?: NSLocalizedString(@"Loading", nil); self.isAccessibilityElement = YES; } else { - self.overlayView.userInteractionEnabled = NO; - self.hudView.accessibilityLabel = string; + self.controlView.userInteractionEnabled = NO; + self.hudView.accessibilityLabel = self.statusLabel.text ?: NSLocalizedString(@"Loading", nil); self.hudView.isAccessibilityElement = YES; } - [self.overlayView setHidden:NO]; - self.overlayView.backgroundColor = [UIColor clearColor]; - [self positionHUD:nil]; + // Get duration + id duration = [data isKindOfClass:[NSTimer class]] ? ((NSTimer *)data).userInfo : data; - if(self.alpha != 1 || self.hudView.alpha != 1) { - NSDictionary *userInfo = [self notificationUserInfo]; + // Show if not already visible + if(self.backgroundView.alpha != 1.0f) { + // Post notification to inform user [[NSNotificationCenter defaultCenter] postNotificationName:SVProgressHUDWillAppearNotification - object:nil - userInfo:userInfo]; + object:self + userInfo:[self notificationUserInfo]]; - [self registerNotifications]; - self.hudView.transform = CGAffineTransformScale(self.hudView.transform, 1.3, 1.3); + // Shrink HUD to to make a nice appear / pop up animation + self.hudView.transform = self.hudView.transform = CGAffineTransformScale(self.hudView.transform, 1/1.5f, 1/1.5f); - if(self.isClear) { - self.alpha = 1; - self.hudView.alpha = 0; - } + __block void (^animationsBlock)(void) = ^{ + // Zoom HUD a little to make a nice appear / pop up animation + self.hudView.transform = CGAffineTransformIdentity; + + // Fade in all effects (colors, blur, etc.) + [self fadeInEffects]; + }; - [UIView animateWithDuration:0.15 - delay:0 - options:UIViewAnimationOptionAllowUserInteraction | UIViewAnimationCurveEaseOut | UIViewAnimationOptionBeginFromCurrentState - animations:^{ - self.hudView.transform = CGAffineTransformScale(self.hudView.transform, 1/1.3, 1/1.3); - - if(self.isClear) // handle iOS 7 and 8 UIToolbar which not answers well to hierarchy opacity change - self.hudView.alpha = 1; - else - self.alpha = 1; - } - completion:^(BOOL finished){ - [[NSNotificationCenter defaultCenter] postNotificationName:SVProgressHUDDidAppearNotification - object:nil - userInfo:userInfo]; - UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil); - UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, string); - }]; + __block void (^completionBlock)(void) = ^{ + // Check if we really achieved to show the HUD (<=> alpha) + // and the change of these values has not been cancelled in between e.g. due to a dismissal + if(self.backgroundView.alpha == 1.0f){ + // Register observer <=> we now have to handle orientation changes etc. + [self registerNotifications]; + + // Post notification to inform user + [[NSNotificationCenter defaultCenter] postNotificationName:SVProgressHUDDidAppearNotification + object:self + userInfo:[self notificationUserInfo]]; + + // Update accessibility + UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil); + UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, self.statusLabel.text); + + // Dismiss automatically if a duration was passed as userInfo. We start a timer + // which then will call dismiss after the predefined duration + if(duration){ + self.fadeOutTimer = [NSTimer timerWithTimeInterval:[(NSNumber *)duration doubleValue] target:self selector:@selector(dismiss) userInfo:nil repeats:NO]; + [[NSRunLoop mainRunLoop] addTimer:self.fadeOutTimer forMode:NSRunLoopCommonModes]; + } + } + }; + + // Animate appearance + if (self.fadeInAnimationDuration > 0) { + // Animate appearance + [UIView animateWithDuration:self.fadeInAnimationDuration + delay:0 + options:(UIViewAnimationOptions) (UIViewAnimationOptionAllowUserInteraction | UIViewAnimationCurveEaseIn | UIViewAnimationOptionBeginFromCurrentState) + animations:^{ + animationsBlock(); + } completion:^(BOOL finished) { + completionBlock(); + }]; + } else { + animationsBlock(); + completionBlock(); + } + // Inform iOS to redraw the view hierarchy [self setNeedsDisplay]; - } -} - -- (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; -} - -- (void)showImage:(UIImage *)image status:(NSString *)string duration:(NSTimeInterval)duration maskType:(SVProgressHUDMaskType)hudMaskType { - self.progress = SVProgressHUDUndefinedProgress; - self.maskType = hudMaskType; - [self cancelRingLayerAnimation]; - - if(![self.class isVisible]) - [self.class showWithMaskType:self.maskType]; - - if ([self.imageView respondsToSelector:@selector(setTintColor:)]) { - self.imageView.tintColor = SVProgressHUDForegroundColor; } else { - image = [self image:image withTintColor:SVProgressHUDForegroundColor]; - } - self.imageView.image = image; - self.imageView.hidden = NO; - - self.stringLabel.text = string; - [self updatePosition]; - [self.indefiniteAnimatedView removeFromSuperview]; - - if(self.maskType != SVProgressHUDMaskTypeNone) { - self.overlayView.userInteractionEnabled = YES; - self.accessibilityLabel = string; - self.isAccessibilityElement = YES; - } else { - self.overlayView.userInteractionEnabled = NO; - self.hudView.accessibilityLabel = string; - self.hudView.isAccessibilityElement = YES; + // Update accessibility + UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil); + UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, self.statusLabel.text); + + // Dismiss automatically if a duration was passed as userInfo. We start a timer + // which then will call dismiss after the predefined duration + if(duration){ + self.fadeOutTimer = [NSTimer timerWithTimeInterval:[(NSNumber *)duration doubleValue] target:self selector:@selector(dismiss) userInfo:nil repeats:NO]; + [[NSRunLoop mainRunLoop] addTimer:self.fadeOutTimer forMode:NSRunLoopCommonModes]; + } } - - UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil); - UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, string); - - self.fadeOutTimer = [NSTimer timerWithTimeInterval:duration target:self selector:@selector(dismiss) userInfo:nil repeats:NO]; - [[NSRunLoop mainRunLoop] addTimer:self.fadeOutTimer forMode:NSRunLoopCommonModes]; } - (void)dismiss { - NSDictionary *userInfo = [self notificationUserInfo]; - [[NSNotificationCenter defaultCenter] postNotificationName:SVProgressHUDWillDisappearNotification - object:nil - userInfo:userInfo]; - - self.activityCount = 0; - [UIView animateWithDuration:0.15 - delay:0 - options:UIViewAnimationCurveEaseIn | UIViewAnimationOptionAllowUserInteraction - animations:^{ - self.hudView.transform = CGAffineTransformScale(self.hudView.transform, 0.8f, 0.8f); - if(self.isClear) // handle iOS 7 UIToolbar not answer well to hierarchy opacity change - self.hudView.alpha = 0.0f; - else - self.alpha = 0.0f; - } - completion:^(BOOL finished){ - if(self.alpha == 0.0f || self.hudView.alpha == 0.0f) { - self.alpha = 0.0f; - self.hudView.alpha = 0.0f; - - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [self cancelRingLayerAnimation]; - [_hudView removeFromSuperview]; - _hudView = nil; - - [_overlayView removeFromSuperview]; - _overlayView = nil; - - [_indefiniteAnimatedView removeFromSuperview]; - _indefiniteAnimatedView = nil; - - UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil); - - [[NSNotificationCenter defaultCenter] postNotificationName:SVProgressHUDDidDisappearNotification - object:nil - userInfo:userInfo]; - - // Tell the rootViewController to update the StatusBar appearance -#if !defined(SV_APP_EXTENSIONS) - UIViewController *rootController = [[UIApplication sharedApplication] keyWindow].rootViewController; - if ([rootController respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { - [rootController setNeedsStatusBarAppearanceUpdate]; - } + [self dismissWithDelay:0.0 completion:nil]; +} + +- (void)dismissWithDelay:(NSTimeInterval)delay completion:(SVProgressHUDDismissCompletion)completion { + __weak SVProgressHUD *weakSelf = self; + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + __strong SVProgressHUD *strongSelf = weakSelf; + if(strongSelf){ + // Stop timer + strongSelf.graceTimer = nil; + + // Post notification to inform user + [[NSNotificationCenter defaultCenter] postNotificationName:SVProgressHUDWillDisappearNotification + object:nil + userInfo:[strongSelf notificationUserInfo]]; + + // Reset activity count + strongSelf.activityCount = 0; + + __block void (^animationsBlock)(void) = ^{ + // Shrink HUD a little to make a nice disappear animation + strongSelf.hudView.transform = CGAffineTransformScale(strongSelf.hudView.transform, 1/1.3f, 1/1.3f); + + // Fade out all effects (colors, blur, etc.) + [strongSelf fadeOutEffects]; + }; + + __block void (^completionBlock)(void) = ^{ + // Check if we really achieved to dismiss the HUD (<=> alpha values are applied) + // and the change of these values has not been cancelled in between e.g. due to a new show + if(self.backgroundView.alpha == 0.0f){ + // Clean up view hierarchy (overlays) + [strongSelf.controlView removeFromSuperview]; + [strongSelf.backgroundView 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; + [rootController setNeedsStatusBarAppearanceUpdate]; #endif - // uncomment to make sure UIWindow is gone from app.windows - //NSLog(@"%@", [UIApplication sharedApplication].windows); - //NSLog(@"keyWindow = %@", [UIApplication sharedApplication].keyWindow); - } - }]; + + // Run an (optional) completionHandler + if (completion) { + completion(); + } + } + }; + + // UIViewAnimationOptionBeginFromCurrentState AND a delay doesn't always work as expected + // When UIViewAnimationOptionBeginFromCurrentState is set, animateWithDuration: evaluates the current + // values to check if an animation is necessary. The evaluation happens at function call time and not + // after the delay => the animation is sometimes skipped. Therefore we delay using dispatch_after. + + dispatch_time_t dipatchTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)); + dispatch_after(dipatchTime, dispatch_get_main_queue(), ^{ + if (strongSelf.fadeOutAnimationDuration > 0) { + // Animate appearance + [UIView animateWithDuration:strongSelf.fadeOutAnimationDuration + delay:0 + options:(UIViewAnimationOptions) (UIViewAnimationOptionAllowUserInteraction | UIViewAnimationCurveEaseOut | UIViewAnimationOptionBeginFromCurrentState) + animations:^{ + animationsBlock(); + } completion:^(BOOL finished) { + completionBlock(); + }]; + } else { + animationsBlock(); + completionBlock(); + } + }); + + // Inform iOS to redraw the view hierarchy + [strongSelf setNeedsDisplay]; + } + }]; } #pragma mark - Ring progress animation -- (SVIndefiniteAnimatedView *)indefiniteAnimatedView { - if (_indefiniteAnimatedView == nil) { - _indefiniteAnimatedView = [[SVIndefiniteAnimatedView alloc] initWithFrame:CGRectZero]; - _indefiniteAnimatedView.strokeThickness = SVProgressHUDRingThickness; - _indefiniteAnimatedView.strokeColor = SVProgressHUDForegroundColor; - _indefiniteAnimatedView.radius = self.stringLabel.text ? SVProgressHUDRingRadius : SVProgressHUDRingNoTextRadius; - [_indefiniteAnimatedView sizeToFit]; +- (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; } -- (CAShapeLayer *)ringLayer { - if(!_ringLayer) { - CGPoint center = CGPointMake(CGRectGetWidth(_hudView.frame)/2, CGRectGetHeight(_hudView.frame)/2); - _ringLayer = [self createRingLayerWithCenter:center - radius:SVProgressHUDRingRadius - lineWidth:SVProgressHUDRingThickness - color:SVProgressHUDForegroundColor]; - [self.hudView.layer addSublayer:_ringLayer]; +- (SVProgressAnimatedView*)ringView { + if(!_ringView) { + _ringView = [[SVProgressAnimatedView alloc] initWithFrame:CGRectZero]; } - return _ringLayer; + + // Update styling + _ringView.strokeColor = self.foregroundColorForStyle; + _ringView.strokeThickness = self.ringThickness; + _ringView.radius = self.statusLabel.text ? self.ringRadius : self.ringNoTextRadius; + + return _ringView; } -- (CAShapeLayer *)backgroundRingLayer { - if(!_backgroundRingLayer) { - CGPoint center = CGPointMake(CGRectGetWidth(_hudView.frame)/2, CGRectGetHeight(_hudView.frame)/2); - _backgroundRingLayer = [self createRingLayerWithCenter:center - radius:SVProgressHUDRingRadius - lineWidth:SVProgressHUDRingThickness - color:[SVProgressHUDForegroundColor colorWithAlphaComponent:0.1f]]; - _backgroundRingLayer.strokeEnd = 1; - [self.hudView.layer addSublayer:_backgroundRingLayer]; +- (SVProgressAnimatedView*)backgroundRingView { + if(!_backgroundRingView) { + _backgroundRingView = [[SVProgressAnimatedView alloc] initWithFrame:CGRectZero]; + _backgroundRingView.strokeEnd = 1.0f; } - return _backgroundRingLayer; + + // 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]; - [_hudView.layer removeAllAnimations]; - - _ringLayer.strokeEnd = 0.0f; - if (_ringLayer.superlayer) { - [_ringLayer removeFromSuperlayer]; - } - _ringLayer = nil; - if (_backgroundRingLayer.superlayer) { - [_backgroundRingLayer removeFromSuperlayer]; - } - _backgroundRingLayer = nil; + [self.hudView.layer removeAllAnimations]; + self.ringView.strokeEnd = 0.0f; [CATransaction commit]; + + // Remove from view + [self.ringView removeFromSuperview]; + [self.backgroundRingView removeFromSuperview]; } -- (CAShapeLayer *)createRingLayerWithCenter:(CGPoint)center radius:(CGFloat)radius lineWidth:(CGFloat)lineWidth color:(UIColor *)color { - - UIBezierPath* smoothedPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(radius, radius) radius:radius startAngle:-M_PI_2 endAngle:(M_PI + M_PI_2) clockwise:YES]; - - CAShapeLayer *slice = [CAShapeLayer layer]; - slice.contentsScale = [[UIScreen mainScreen] scale]; - slice.frame = CGRectMake(center.x-radius, center.y-radius, radius*2, radius*2); - slice.fillColor = [UIColor clearColor].CGColor; - slice.strokeColor = color.CGColor; - slice.lineWidth = lineWidth; - slice.lineCap = kCALineCapRound; - slice.lineJoin = kCALineJoinBevel; - slice.path = smoothedPath.CGPath; - - return slice; +- (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 == 1); + // Checking one alpha value is sufficient as they are all the same + return [self sharedView].backgroundView.alpha > 0.0f; } #pragma mark - Getters -- (NSTimeInterval)displayDurationForString:(NSString*)string { - return MIN((float)string.length*0.06 + 0.5, 5.0); ++ (NSTimeInterval)displayDurationForString:(NSString*)string { + CGFloat minimum = MAX((CGFloat)string.length * 0.06 + 0.5, [self sharedView].minimumDismissTimeInterval); + return MIN(minimum, [self sharedView].maximumDismissTimeInterval); } -- (BOOL)isClear { // used for iOS 7 and above - return (self.maskType == SVProgressHUDMaskTypeClear || self.maskType == SVProgressHUDMaskTypeNone); +- (UIColor*)foregroundColorForStyle { + if(self.defaultStyle == SVProgressHUDStyleLight) { + return [UIColor blackColor]; + } else if(self.defaultStyle == SVProgressHUDStyleDark) { + return [UIColor whiteColor]; + } else { + return self.foregroundColor; + } } -- (UIControl *)overlayView { - if(!_overlayView) { - _overlayView = [[UIControl alloc] initWithFrame:[UIScreen mainScreen].bounds]; - _overlayView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - _overlayView.backgroundColor = [UIColor clearColor]; - [_overlayView addTarget:self action:@selector(overlayViewDidReceiveTouchEvent:forEvent:) forControlEvents:UIControlEventTouchDown]; +- (UIColor*)backgroundColorForStyle { + if(self.defaultStyle == SVProgressHUDStyleLight) { + return [UIColor whiteColor]; + } else if(self.defaultStyle == SVProgressHUDStyleDark) { + return [UIColor blackColor]; + } else { + return self.backgroundColor; } - return _overlayView; } -- (UIView *)hudView { - if(!_hudView) { - _hudView = [[UIView alloc] initWithFrame:CGRectZero]; - _hudView.backgroundColor = SVProgressHUDBackgroundColor; - _hudView.layer.cornerRadius = 14; - _hudView.layer.masksToBounds = YES; - - _hudView.autoresizingMask = (UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin | - UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin); - - if ([_hudView respondsToSelector:@selector(addMotionEffect:)]) { - UIInterpolatingMotionEffect *effectX = [[UIInterpolatingMotionEffect alloc] initWithKeyPath: @"center.x" type: UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis]; - effectX.minimumRelativeValue = @(-SVProgressHUDParallaxDepthPoints); - effectX.maximumRelativeValue = @(SVProgressHUDParallaxDepthPoints); - - UIInterpolatingMotionEffect *effectY = [[UIInterpolatingMotionEffect alloc] initWithKeyPath: @"center.y" type: UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis]; - effectY.minimumRelativeValue = @(-SVProgressHUDParallaxDepthPoints); - effectY.maximumRelativeValue = @(SVProgressHUDParallaxDepthPoints); +- (UIControl*)controlView { + if(!_controlView) { + _controlView = [UIControl new]; + _controlView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + _controlView.backgroundColor = [UIColor clearColor]; + _controlView.userInteractionEnabled = YES; + [_controlView addTarget:self action:@selector(controlViewDidReceiveTouchEvent:forEvent:) forControlEvents:UIControlEventTouchDown]; + } + + // Update frames +#if !defined(SV_APP_EXTENSIONS) + CGRect windowBounds = [[[UIApplication sharedApplication] delegate] window].bounds; + _controlView.frame = windowBounds; +#else + _controlView.frame = [UIScreen mainScreen].bounds; +#endif + + return _controlView; +} - UIMotionEffectGroup *effectGroup = [[UIMotionEffectGroup alloc] init]; - effectGroup.motionEffects = @[effectX, effectY]; - [_hudView addMotionEffect:effectGroup]; +-(UIView *)backgroundView { + if(!_backgroundView){ + _backgroundView = [UIView new]; + _backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + } + if(!_backgroundView.superview){ + [self insertSubview:_backgroundView belowSubview:self.hudView]; + } + + // Update styling + if(self.defaultMaskType == SVProgressHUDMaskTypeGradient){ + if(!_backgroundRadialGradientLayer){ + _backgroundRadialGradientLayer = [SVRadialGradientLayer layer]; + } + if(!_backgroundRadialGradientLayer.superlayer){ + [_backgroundView.layer insertSublayer:_backgroundRadialGradientLayer atIndex:0]; + } + _backgroundView.backgroundColor = [UIColor clearColor]; + } else { + if(_backgroundRadialGradientLayer && _backgroundRadialGradientLayer.superlayer){ + [_backgroundRadialGradientLayer removeFromSuperlayer]; } + if(self.defaultMaskType == SVProgressHUDMaskTypeBlack){ + _backgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.4]; + } else if(self.defaultMaskType == SVProgressHUDMaskTypeCustom){ + _backgroundView.backgroundColor = self.backgroundLayerColor; + } else { + _backgroundView.backgroundColor = [UIColor clearColor]; + } + } + + // Update frame + if(_backgroundView){ + _backgroundView.frame = self.bounds; + } + if(_backgroundRadialGradientLayer){ + _backgroundRadialGradientLayer.frame = self.bounds; + + // Calculate the new center of the gradient, it may change if keyboard is visible + CGPoint gradientCenter = self.center; + gradientCenter.y = (self.bounds.size.height - self.visibleKeyboardHeight)/2; + _backgroundRadialGradientLayer.gradientCenter = gradientCenter; + [_backgroundRadialGradientLayer setNeedsDisplay]; } - if(!_hudView.superview) + return _backgroundView; +} +- (UIVisualEffectView*)hudView { + if(!_hudView) { + _hudView = [UIVisualEffectView new]; + _hudView.layer.masksToBounds = YES; + _hudView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin; + } + if(!_hudView.superview) { [self addSubview:_hudView]; + } + + // Update styling + _hudView.layer.cornerRadius = self.cornerRadius; return _hudView; } -- (UILabel *)stringLabel { - if (!_stringLabel) { - _stringLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - _stringLabel.backgroundColor = [UIColor clearColor]; - _stringLabel.adjustsFontSizeToFitWidth = YES; - _stringLabel.textAlignment = NSTextAlignmentCenter; - _stringLabel.baselineAdjustment = UIBaselineAdjustmentAlignCenters; - _stringLabel.numberOfLines = 0; +- (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.contentView addSubview:_statusLabel]; } - if(!_stringLabel.superview) - [self.hudView addSubview:_stringLabel]; + // Update styling + _statusLabel.textColor = self.foregroundColorForStyle; + _statusLabel.font = self.font; - _stringLabel.textColor = SVProgressHUDForegroundColor; - _stringLabel.font = SVProgressHUDFont; - - return _stringLabel; + return _statusLabel; } -- (UIImageView *)imageView { - if (!_imageView) - _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 28.0f, 28.0f)]; +- (UIImageView*)imageView { + if(_imageView && !CGSizeEqualToSize(_imageView.bounds.size, _imageViewSize)) { + [_imageView removeFromSuperview]; + _imageView = nil; + } - if(!_imageView.superview) - [self.hudView addSubview:_imageView]; + if(!_imageView) { + _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, _imageViewSize.width, _imageViewSize.height)]; + } + if(!_imageView.superview) { + [self.hudView.contentView addSubview:_imageView]; + } return _imageView; } +#pragma mark - Helper + - (CGFloat)visibleKeyboardHeight { #if !defined(SV_APP_EXTENSIONS) UIWindow *keyboardWindow = nil; - for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) { - if(![[testWindow class] isEqual:[UIWindow class]]) { + 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); + for (__strong UIView *possibleKeyboard in keyboardWindow.subviews) { + NSString *viewName = NSStringFromClass(possibleKeyboard.class); + if([viewName hasPrefix:@"UI"]){ + if([viewName hasSuffix:@"PeripheralHostView"] || [viewName hasSuffix:@"Keyboard"]){ + return CGRectGetHeight(possibleKeyboard.bounds); + } else if ([viewName hasSuffix:@"InputSetContainerView"]){ + for (__strong UIView *possibleKeyboardSubview in possibleKeyboard.subviews) { + viewName = NSStringFromClass(possibleKeyboardSubview.class); + if([viewName hasPrefix:@"UI"] && [viewName hasSuffix:@"InputSetHostView"]) { + CGRect convertedRect = [possibleKeyboard convertRect:possibleKeyboardSubview.frame toView:self]; + CGRect intersectedRect = CGRectIntersection(convertedRect, self.bounds); + if (!CGRectIsNull(intersectedRect)) { + return CGRectGetHeight(intersectedRect); + } + } } } } @@ -979,6 +1335,175 @@ - (CGFloat)visibleKeyboardHeight { #endif return 0; } + +- (UIWindow *)frontWindow { +#if !defined(SV_APP_EXTENSIONS) + 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 windowLevelSupported = (window.windowLevel >= UIWindowLevelNormal && window.windowLevel <= self.maxSupportedWindowLevel); + BOOL windowKeyWindow = window.isKeyWindow; + + if(windowOnMainScreen && windowIsVisible && windowLevelSupported && windowKeyWindow) { + return window; + } + } +#endif + return nil; +} + +- (void)fadeInEffects { + if(self.defaultStyle != SVProgressHUDStyleCustom) { + // Add blur effect + UIBlurEffectStyle blurEffectStyle = self.defaultStyle == SVProgressHUDStyleDark ? UIBlurEffectStyleDark : UIBlurEffectStyleLight; + UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:blurEffectStyle]; + self.hudView.effect = blurEffect; + + // We omit UIVibrancy effect and use a suitable background color as an alternative. + // This will make everything more readable. See the following for details: + // https://www.omnigroup.com/developer/how-to-make-text-in-a-uivisualeffectview-readable-on-any-background + + self.hudView.backgroundColor = [self.backgroundColorForStyle colorWithAlphaComponent:0.6f]; + } else { + self.hudView.backgroundColor = self.backgroundColorForStyle; + } + + // Fade in views + self.backgroundView.alpha = 1.0f; + + self.imageView.alpha = 1.0f; + self.statusLabel.alpha = 1.0f; + self.indefiniteAnimatedView.alpha = 1.0f; + self.ringView.alpha = self.backgroundRingView.alpha = 1.0f; +} -@end +- (void)fadeOutEffects +{ + if(self.defaultStyle != SVProgressHUDStyleCustom) { + // Remove blur effect + self.hudView.effect = nil; + } + + // Remove background color + self.hudView.backgroundColor = [UIColor clearColor]; + + // Fade out views + self.backgroundView.alpha = 0.0f; + + self.imageView.alpha = 0.0f; + self.statusLabel.alpha = 0.0f; + self.indefiniteAnimatedView.alpha = 0.0f; + self.ringView.alpha = self.backgroundRingView.alpha = 0.0f; +} + +#if TARGET_OS_IOS && __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000 +- (UINotificationFeedbackGenerator *)hapticGenerator NS_AVAILABLE_IOS(10_0) { + // Only return if haptics are enabled + if(!self.hapticsEnabled) { + return nil; + } + + if(!_hapticGenerator) { + _hapticGenerator = [[UINotificationFeedbackGenerator alloc] init]; + } + return _hapticGenerator; +} +#endif + + +#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)setContainerView:(UIView *)containerView { + if (!_isInitializing) _containerView = containerView; +} + +- (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)setShouldTintImages:(BOOL)shouldTintImages { + if (!_isInitializing) _shouldTintImages = shouldTintImages; +} + +- (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; +} + +- (void)setMaxSupportedWindowLevel:(UIWindowLevel)maxSupportedWindowLevel { + if (!_isInitializing) _maxSupportedWindowLevel = maxSupportedWindowLevel; +} + +@end diff --git a/Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.h b/Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.h new file mode 100644 index 0000000..68d452a --- /dev/null +++ b/Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.h @@ -0,0 +1,14 @@ +// +// SVRadialGradientLayer.h +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD +// +// Copyright (c) 2014-2018 Tobias Tiemerding. All rights reserved. +// + +#import + +@interface SVRadialGradientLayer : CALayer + +@property (nonatomic) CGPoint gradientCenter; + +@end diff --git a/Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.m b/Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.m new file mode 100644 index 0000000..c62e0f8 --- /dev/null +++ b/Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.m @@ -0,0 +1,25 @@ +// +// SVRadialGradientLayer.m +// SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD +// +// Copyright (c) 2014-2018 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/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-acknowledgements.markdown b/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-acknowledgements.markdown new file mode 100644 index 0000000..48d4602 --- /dev/null +++ b/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-acknowledgements.markdown @@ -0,0 +1,28 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## SVProgressHUD + +MIT License + +Copyright (c) 2011-2018 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. + +Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-acknowledgements.plist b/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-acknowledgements.plist new file mode 100644 index 0000000..27dcedc --- /dev/null +++ b/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-acknowledgements.plist @@ -0,0 +1,60 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + MIT License + +Copyright (c) 2011-2018 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. + + License + MIT + Title + SVProgressHUD + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-dummy.m b/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-dummy.m new file mode 100644 index 0000000..e426b98 --- /dev/null +++ b/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_LoginTest : NSObject +@end +@implementation PodsDummy_Pods_LoginTest +@end diff --git a/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-resources.sh b/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-resources.sh new file mode 100755 index 0000000..8c4141e --- /dev/null +++ b/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest-resources.sh @@ -0,0 +1,129 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +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" + ;; + 3) + TARGET_DEVICE_ARGS="--target-device tv" + ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +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}" || true + 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} ${TARGET_DEVICE_ARGS}" || true + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$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\"" || true + 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\"" || true + 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\"" || true + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" || true + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_resource "${PODS_ROOT}/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_resource "${PODS_ROOT}/SVProgressHUD/SVProgressHUD/SVProgressHUD.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 != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + 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}" + else + 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}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" + fi +fi diff --git a/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest.debug.xcconfig b/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest.debug.xcconfig new file mode 100644 index 0000000..35b12d3 --- /dev/null +++ b/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest.debug.xcconfig @@ -0,0 +1,10 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SVProgressHUD" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/SVProgressHUD" +OTHER_LDFLAGS = $(inherited) -ObjC -l"SVProgressHUD" -framework "QuartzCore" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest.release.xcconfig b/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest.release.xcconfig new file mode 100644 index 0000000..35b12d3 --- /dev/null +++ b/Pods/Target Support Files/Pods-LoginTest/Pods-LoginTest.release.xcconfig @@ -0,0 +1,10 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SVProgressHUD" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/SVProgressHUD" +OTHER_LDFLAGS = $(inherited) -ObjC -l"SVProgressHUD" -framework "QuartzCore" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-Private.xcconfig b/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-Private.xcconfig deleted file mode 100644 index 0863a57..0000000 --- a/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-Private.xcconfig +++ /dev/null @@ -1,6 +0,0 @@ -#include "Pods-SVProgressHUD.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SVProgressHUD" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SVProgressHUD" -OTHER_LDFLAGS = ${PODS_SVPROGRESSHUD_OTHER_LDFLAGS} -ObjC -PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-dummy.m b/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-dummy.m deleted file mode 100644 index e5c1fad..0000000 --- a/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_SVProgressHUD : NSObject -@end -@implementation PodsDummy_Pods_SVProgressHUD -@end diff --git a/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-prefix.pch b/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-prefix.pch deleted file mode 100644 index 95cf11d..0000000 --- a/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-prefix.pch +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __OBJC__ -#import -#endif - -#import "Pods-environment.h" diff --git a/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD.xcconfig b/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD.xcconfig deleted file mode 100644 index 2ce71e0..0000000 --- a/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD.xcconfig +++ /dev/null @@ -1 +0,0 @@ -PODS_SVPROGRESSHUD_OTHER_LDFLAGS = -framework "QuartzCore" \ No newline at end of file diff --git a/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown deleted file mode 100644 index ebe5bef..0000000 --- a/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown +++ /dev/null @@ -1,32 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## SVProgressHUD - -Copyright (c) 2011-2014 Sam Vermette - -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 - http://cocoapods.org diff --git a/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/Pods/Target Support Files/Pods/Pods-acknowledgements.plist deleted file mode 100644 index f421512..0000000 --- a/Pods/Target Support Files/Pods/Pods-acknowledgements.plist +++ /dev/null @@ -1,62 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2011-2014 Sam Vermette - -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 - http://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/Pods/Target Support Files/Pods/Pods-dummy.m b/Pods/Target Support Files/Pods/Pods-dummy.m deleted file mode 100644 index ade64bd..0000000 --- a/Pods/Target Support Files/Pods/Pods-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods : NSObject -@end -@implementation PodsDummy_Pods -@end diff --git a/Pods/Target Support Files/Pods/Pods-environment.h b/Pods/Target Support Files/Pods/Pods-environment.h deleted file mode 100644 index c623001..0000000 --- a/Pods/Target Support Files/Pods/Pods-environment.h +++ /dev/null @@ -1,14 +0,0 @@ - -// To check if a library is compiled with CocoaPods you -// can use the `COCOAPODS` macro definition which is -// defined in the xcconfigs so it is available in -// headers also when they are imported in the client -// project. - - -// SVProgressHUD -#define COCOAPODS_POD_AVAILABLE_SVProgressHUD -#define COCOAPODS_VERSION_MAJOR_SVProgressHUD 1 -#define COCOAPODS_VERSION_MINOR_SVProgressHUD 1 -#define COCOAPODS_VERSION_PATCH_SVProgressHUD 3 - diff --git a/Pods/Target Support Files/Pods/Pods-resources.sh b/Pods/Target Support Files/Pods/Pods-resources.sh deleted file mode 100755 index b1328a0..0000000 --- a/Pods/Target Support Files/Pods/Pods-resources.sh +++ /dev/null @@ -1,99 +0,0 @@ -#!/bin/sh -set -e - -mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - -RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt -> "$RESOURCES_TO_COPY" - -XCASSET_FILES=() - -realpath() { - DIRECTORY=$(cd "${1%/*}" && pwd) - FILENAME="${1##*/}" - echo "$DIRECTORY/$FILENAME" -} - -install_resource() -{ - case $1 in - *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" - ;; - *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" - ;; - *.framework) - echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - ;; - *.xcdatamodel) - echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" - ;; - *.xcdatamodeld) - echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" - ;; - *.xcmappingmodel) - echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" - xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" - ;; - *.xcassets) - ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") - XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") - ;; - /*) - echo "$1" - echo "$1" >> "$RESOURCES_TO_COPY" - ;; - *) - echo "${PODS_ROOT}/$1" - echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" - ;; - esac -} -if [[ "$CONFIGURATION" == "Debug" ]]; then - install_resource "SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_resource "SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle" -fi - -rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -if [[ "${ACTION}" == "install" ]]; then - 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 - 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 - - # 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 "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi diff --git a/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/Pods/Target Support Files/Pods/Pods.debug.xcconfig deleted file mode 100644 index a4abb5a..0000000 --- a/Pods/Target Support Files/Pods/Pods.debug.xcconfig +++ /dev/null @@ -1,6 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SVProgressHUD" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/SVProgressHUD" -OTHER_LDFLAGS = $(inherited) -ObjC -l"Pods-SVProgressHUD" -framework "QuartzCore" -OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Target Support Files/Pods/Pods.release.xcconfig b/Pods/Target Support Files/Pods/Pods.release.xcconfig deleted file mode 100644 index a4abb5a..0000000 --- a/Pods/Target Support Files/Pods/Pods.release.xcconfig +++ /dev/null @@ -1,6 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SVProgressHUD" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/SVProgressHUD" -OTHER_LDFLAGS = $(inherited) -ObjC -l"Pods-SVProgressHUD" -framework "QuartzCore" -OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-dummy.m b/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-dummy.m new file mode 100644 index 0000000..696032a --- /dev/null +++ b/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/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch b/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.xcconfig b/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.xcconfig new file mode 100644 index 0000000..f45ae5f --- /dev/null +++ b/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SVProgressHUD" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SVProgressHUD" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SVProgressHUD +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES