diff --git a/VENTouchLock.podspec b/VENTouchLock.podspec index 959e82d..d6fe32e 100644 --- a/VENTouchLock.podspec +++ b/VENTouchLock.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'VENTouchLock' - s.version = '1.0.4' + s.version = '1.0.6' s.summary = 'A passcode framework that features Touch ID' s.description = <<-DESC An easy to use passcode framework used in the Venmo app. diff --git a/VENTouchLock.xcodeproj/project.pbxproj b/VENTouchLock.xcodeproj/project.pbxproj index ccc52c5..49f777d 100644 --- a/VENTouchLock.xcodeproj/project.pbxproj +++ b/VENTouchLock.xcodeproj/project.pbxproj @@ -1,1569 +1,627 @@ - - - - - archiveVersion - 1 - classes - - objectVersion - 46 - objects - - 006CE543BCFC47E7AB666869 - - buildActionMask - 2147483647 - files - - inputPaths - - isa - PBXShellScriptBuildPhase - name - Check Pods Manifest.lock - outputPaths - - runOnlyForDeploymentPostprocessing - 0 - shellPath - /bin/sh - shellScript - diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null -if [[ $? != 0 ]] ; then - cat << EOM -error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. -EOM - exit 1 -fi - - showEnvVarsInLog - 0 - - 0E8BBA2F9ED2474C8534716D - - fileRef - 8C50D98031904B55BA82D2E5 - isa - PBXBuildFile - - 3A03EAC919C4F4E40095708C - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - VENTouchLockTests-Prefix.pch - sourceTree - <group> - - 3A03EACA19C4F72C0095708C - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - VENTouchLockEnterPasscodeViewControllerSpec.m - sourceTree - <group> - - 3A03EACB19C4F72C0095708C - - fileRef - 3A03EACA19C4F72C0095708C - isa - PBXBuildFile - - 3A03EACC19C4FF1D0095708C - - fileRef - 3A709A9819BE68A300AC9238 - isa - PBXBuildFile - - 3A03EACE19C4FF440095708C - - fileRef - 3A709A9919BE68A300AC9238 - isa - PBXBuildFile - - 3A03EACF19C4FF990095708C - - fileRef - 3A709A8919BE686900AC9238 - isa - PBXBuildFile - - 3A03EAD019C4FF990095708C - - fileRef - 3A709A9B19BE68A300AC9238 - isa - PBXBuildFile - - 3A03EAD119C4FF990095708C - - fileRef - 3A709A9D19BE68A300AC9238 - isa - PBXBuildFile - - 3A03EAD219C4FF990095708C - - fileRef - 3A709A9F19BE68A300AC9238 - isa - PBXBuildFile - - 3A03EAD319C4FF990095708C - - fileRef - 3A709AAD19BE68BF00AC9238 - isa - PBXBuildFile - - 3A03EAD419C4FF990095708C - - fileRef - 3A709AAF19BE68BF00AC9238 - isa - PBXBuildFile - - 3A03EAD619C4FF990095708C - - fileRef - 3A709A8F19BE688000AC9238 - isa - PBXBuildFile - - 3A03EAD819C56C9E0095708C - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - UIViewController+VENTouchLockSpec.m - sourceTree - <group> - - 3A03EAD919C56C9E0095708C - - fileRef - 3A03EAD819C56C9E0095708C - isa - PBXBuildFile - - 3A03EADA19C5E41A0095708C - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - VENTouchLockSpec.m - sourceTree - <group> - - 3A03EADB19C5E41A0095708C - - fileRef - 3A03EADA19C5E41A0095708C - isa - PBXBuildFile - - 3A4FE4165D8CB1C8FB147395 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods-VENTouchLockTests.debug.xcconfig - path - Pods/Target Support Files/Pods-VENTouchLockTests/Pods-VENTouchLockTests.debug.xcconfig - sourceTree - <group> - - 3A5C456419D9C15F00E86B7C - - children - - 3A5C456519D9C16B00E86B7C - 3A5C456619D9C16B00E86B7C - - isa - PBXGroup - name - Models - sourceTree - <group> - - 3A5C456519D9C16B00E86B7C - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - VENTouchLockAppearance.h - path - Models/VENTouchLockAppearance.h - sourceTree - <group> - - 3A5C456619D9C16B00E86B7C - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - VENTouchLockAppearance.m - path - Models/VENTouchLockAppearance.m - sourceTree - <group> - - 3A5C456719D9C16B00E86B7C - - fileRef - 3A5C456519D9C16B00E86B7C - isa - PBXBuildFile - - 3A5C456819D9C16B00E86B7C - - fileRef - 3A5C456619D9C16B00E86B7C - isa - PBXBuildFile - - 3A5C456919D9C1A500E86B7C - - fileRef - 3A5C456619D9C16B00E86B7C - isa - PBXBuildFile - - 3A709A6619BE67D800AC9238 - - children - - 3A709A7219BE67D800AC9238 - 3A709A7C19BE67D800AC9238 - 3A709A7119BE67D800AC9238 - 3D5E0250C8A240A2922F55F7 - AE7750A29BBEFCCFD46D3B6D - - isa - PBXGroup - sourceTree - <group> - - 3A709A6719BE67D800AC9238 - - attributes - - LastUpgradeCheck - 0600 - ORGANIZATIONNAME - Venmo - TargetAttributes - - 3A709A6F19BE67D800AC9238 - - CreatedOnToolsVersion - 6.0 - - 3A709A7A19BE67D800AC9238 - - CreatedOnToolsVersion - 6.0 - - - - buildConfigurationList - 3A709A6A19BE67D800AC9238 - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 - isa - PBXProject - knownRegions - - en - - mainGroup - 3A709A6619BE67D800AC9238 - productRefGroup - 3A709A7119BE67D800AC9238 - projectDirPath - - projectReferences - - projectRoot - - targets - - 3A709A6F19BE67D800AC9238 - 3A709A7A19BE67D800AC9238 - - - 3A709A6A19BE67D800AC9238 - - buildConfigurations - - 3A709A8119BE67D800AC9238 - 3A709A8219BE67D800AC9238 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 3A709A6B19BE67D800AC9238 - - buildActionMask - 2147483647 - files - - 3A709AA419BE68A300AC9238 - 3A709A9319BE688000AC9238 - 3A709A8A19BE686900AC9238 - 3A709AAA19BE68A300AC9238 - 3A709AB219BE68BF00AC9238 - 3A709AA819BE68A300AC9238 - 3A709AA619BE68A300AC9238 - 3A5C456819D9C16B00E86B7C - 3A709AB419BE68BF00AC9238 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3A709A6C19BE67D800AC9238 - - buildActionMask - 2147483647 - files - - 0E8BBA2F9ED2474C8534716D - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3A709A6D19BE67D800AC9238 - - buildActionMask - 2147483647 - files - - 3A709A9219BE688000AC9238 - 3A709A7619BE67D800AC9238 - 3A03EACC19C4FF1D0095708C - 3A5C456719D9C16B00E86B7C - 3A709AA919BE68A300AC9238 - 3A709AB319BE68BF00AC9238 - 3A709AA719BE68A300AC9238 - 3A709AB119BE68BF00AC9238 - 3A709AA519BE68A300AC9238 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3A709A6E19BE67D800AC9238 - - buildActionMask - 2147483647 - files - - 3A709AB519BE68BF00AC9238 - - isa - PBXResourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3A709A6F19BE67D800AC9238 - - buildConfigurationList - 3A709A8319BE67D800AC9238 - buildPhases - - 578CFE7974F84E93ACDBAB3E - 3A709A6B19BE67D800AC9238 - 3A709A6C19BE67D800AC9238 - 3A709A6D19BE67D800AC9238 - 3A709A6E19BE67D800AC9238 - DBA0684AD4E9464DAC14CC9A - - buildRules - - dependencies - - isa - PBXNativeTarget - name - VENTouchLock - productName - VENTouchLock - productReference - 3A709A7019BE67D800AC9238 - productType - com.apple.product-type.framework - - 3A709A7019BE67D800AC9238 - - explicitFileType - wrapper.framework - includeInIndex - 0 - isa - PBXFileReference - path - VENTouchLock.framework - sourceTree - BUILT_PRODUCTS_DIR - - 3A709A7119BE67D800AC9238 - - children - - 3A709A7019BE67D800AC9238 - 3A709A7B19BE67D800AC9238 - - isa - PBXGroup - name - Products - sourceTree - <group> - - 3A709A7219BE67D800AC9238 - - children - - 3A709A7519BE67D800AC9238 - 3A709A8919BE686900AC9238 - 3A5C456419D9C15F00E86B7C - 3A709A9419BE688E00AC9238 - 3A709AAB19BE68B400AC9238 - 3A709A8B19BE687100AC9238 - 3A709A7319BE67D800AC9238 - - isa - PBXGroup - path - VENTouchLock - sourceTree - <group> - - 3A709A7319BE67D800AC9238 - - children - - 3A709A7419BE67D800AC9238 - - isa - PBXGroup - name - Supporting Files - sourceTree - <group> - - 3A709A7419BE67D800AC9238 - - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Info.plist - sourceTree - <group> - - 3A709A7519BE67D800AC9238 - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - VENTouchLock.h - sourceTree - <group> - - 3A709A7619BE67D800AC9238 - - fileRef - 3A709A7519BE67D800AC9238 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 3A709A7719BE67D800AC9238 - - buildActionMask - 2147483647 - files - - 3A5C456919D9C1A500E86B7C - 3A03EACF19C4FF990095708C - 3A03EAD019C4FF990095708C - 3A03EAD119C4FF990095708C - 3A03EAD219C4FF990095708C - 3A03EAD319C4FF990095708C - 3A03EAD919C56C9E0095708C - 3A03EAD419C4FF990095708C - 3A03EAD619C4FF990095708C - 3A03EADB19C5E41A0095708C - 3A03EACE19C4FF440095708C - 3A03EACB19C4F72C0095708C - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3A709A7819BE67D800AC9238 - - buildActionMask - 2147483647 - files - - B0AAA75C21C74F8DA9D13175 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3A709A7919BE67D800AC9238 - - buildActionMask - 2147483647 - files - - isa - PBXResourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3A709A7A19BE67D800AC9238 - - buildConfigurationList - 3A709A8619BE67D800AC9238 - buildPhases - - 006CE543BCFC47E7AB666869 - 3A709A7719BE67D800AC9238 - 3A709A7819BE67D800AC9238 - 3A709A7919BE67D800AC9238 - 8B971D45E9814AC3A4071695 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - VENTouchLockTests - productName - VENTouchLockTests - productReference - 3A709A7B19BE67D800AC9238 - productType - com.apple.product-type.bundle.unit-test - - 3A709A7B19BE67D800AC9238 - - explicitFileType - wrapper.cfbundle - includeInIndex - 0 - isa - PBXFileReference - path - VENTouchLockTests.xctest - sourceTree - BUILT_PRODUCTS_DIR - - 3A709A7C19BE67D800AC9238 - - children - - 3A03EADA19C5E41A0095708C - 3A03EACA19C4F72C0095708C - 3A03EAD819C56C9E0095708C - 3A709A7D19BE67D800AC9238 - - isa - PBXGroup - path - VENTouchLockTests - sourceTree - <group> - - 3A709A7D19BE67D800AC9238 - - children - - 3A709A7E19BE67D800AC9238 - 3A03EAC919C4F4E40095708C - - isa - PBXGroup - name - Supporting Files - sourceTree - <group> - - 3A709A7E19BE67D800AC9238 - - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Info.plist - sourceTree - <group> - - 3A709A8119BE67D800AC9238 - - 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_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR - CLANG_WARN_UNREACHABLE_CODE - YES - CLANG_WARN__DUPLICATE_METHOD_MATCH - YES - CODE_SIGN_IDENTITY[sdk=iphoneos*] - iPhone Developer - COPY_PHASE_STRIP - NO - CURRENT_PROJECT_VERSION - 1 - ENABLE_STRICT_OBJC_MSGSEND - YES - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES_AGGRESSIVE - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 8.0 - MTL_ENABLE_DEBUG_INFO - YES - ONLY_ACTIVE_ARCH - YES - SDKROOT - iphoneos - TARGETED_DEVICE_FAMILY - 1,2 - VERSIONING_SYSTEM - apple-generic - VERSION_INFO_PREFIX - - - isa - XCBuildConfiguration - name - Debug - - 3A709A8219BE67D800AC9238 - - 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_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR - CLANG_WARN_UNREACHABLE_CODE - YES - CLANG_WARN__DUPLICATE_METHOD_MATCH - YES - CODE_SIGN_IDENTITY[sdk=iphoneos*] - iPhone Developer - COPY_PHASE_STRIP - YES - CURRENT_PROJECT_VERSION - 1 - ENABLE_NS_ASSERTIONS - NO - ENABLE_STRICT_OBJC_MSGSEND - YES - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES_AGGRESSIVE - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 8.0 - MTL_ENABLE_DEBUG_INFO - NO - SDKROOT - iphoneos - TARGETED_DEVICE_FAMILY - 1,2 - VALIDATE_PRODUCT - YES - VERSIONING_SYSTEM - apple-generic - VERSION_INFO_PREFIX - - - isa - XCBuildConfiguration - name - Release - - 3A709A8319BE67D800AC9238 - - buildConfigurations - - 3A709A8419BE67D800AC9238 - 3A709A8519BE67D800AC9238 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 3A709A8419BE67D800AC9238 - - baseConfigurationReference - EF1F7E543F036C4EB61FDC73 - buildSettings - - DEFINES_MODULE - YES - DYLIB_COMPATIBILITY_VERSION - 1 - DYLIB_CURRENT_VERSION - 1 - DYLIB_INSTALL_NAME_BASE - @rpath - INFOPLIST_FILE - VENTouchLock/Info.plist - INSTALL_PATH - $(LOCAL_LIBRARY_DIR)/Frameworks - LD_RUNPATH_SEARCH_PATHS - $(inherited) @executable_path/Frameworks @loader_path/Frameworks - PRODUCT_NAME - $(TARGET_NAME) - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 3A709A8519BE67D800AC9238 - - baseConfigurationReference - 7214AFB127B057149904A934 - buildSettings - - DEFINES_MODULE - YES - DYLIB_COMPATIBILITY_VERSION - 1 - DYLIB_CURRENT_VERSION - 1 - DYLIB_INSTALL_NAME_BASE - @rpath - INFOPLIST_FILE - VENTouchLock/Info.plist - INSTALL_PATH - $(LOCAL_LIBRARY_DIR)/Frameworks - LD_RUNPATH_SEARCH_PATHS - $(inherited) @executable_path/Frameworks @loader_path/Frameworks - PRODUCT_NAME - $(TARGET_NAME) - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Release - - 3A709A8619BE67D800AC9238 - - buildConfigurations - - 3A709A8719BE67D800AC9238 - 3A709A8819BE67D800AC9238 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 3A709A8719BE67D800AC9238 - - baseConfigurationReference - 3A4FE4165D8CB1C8FB147395 - buildSettings - - FRAMEWORK_SEARCH_PATHS - - $(SDKROOT)/Developer/Library/Frameworks - $(inherited) - - GCC_PREFIX_HEADER - VENTouchLockTests/VENTouchLockTests-Prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - INFOPLIST_FILE - VENTouchLockTests/Info.plist - LD_RUNPATH_SEARCH_PATHS - $(inherited) @executable_path/Frameworks @loader_path/Frameworks - PRODUCT_NAME - $(TARGET_NAME) - - isa - XCBuildConfiguration - name - Debug - - 3A709A8819BE67D800AC9238 - - baseConfigurationReference - ACF4DE98AD7E614B0C1615BF - buildSettings - - FRAMEWORK_SEARCH_PATHS - - $(SDKROOT)/Developer/Library/Frameworks - $(inherited) - - GCC_PREFIX_HEADER - VENTouchLockTests/VENTouchLockTests-Prefix.pch - INFOPLIST_FILE - VENTouchLockTests/Info.plist - LD_RUNPATH_SEARCH_PATHS - $(inherited) @executable_path/Frameworks @loader_path/Frameworks - PRODUCT_NAME - $(TARGET_NAME) - - isa - XCBuildConfiguration - name - Release - - 3A709A8919BE686900AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - VENTouchLock.m - sourceTree - <group> - - 3A709A8A19BE686900AC9238 - - fileRef - 3A709A8919BE686900AC9238 - isa - PBXBuildFile - - 3A709A8B19BE687100AC9238 - - children - - 3A709A8E19BE688000AC9238 - 3A709A8F19BE688000AC9238 - - isa - PBXGroup - name - Categories - sourceTree - <group> - - 3A709A8E19BE688000AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIViewController+VENTouchLock.h - path - Categories/UIViewController+VENTouchLock.h - sourceTree - <group> - - 3A709A8F19BE688000AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIViewController+VENTouchLock.m - path - Categories/UIViewController+VENTouchLock.m - sourceTree - <group> - - 3A709A9219BE688000AC9238 - - fileRef - 3A709A8E19BE688000AC9238 - isa - PBXBuildFile - - 3A709A9319BE688000AC9238 - - fileRef - 3A709A8F19BE688000AC9238 - isa - PBXBuildFile - - 3A709A9419BE688E00AC9238 - - children - - 3A709A9819BE68A300AC9238 - 3A709A9919BE68A300AC9238 - 3A709A9A19BE68A300AC9238 - 3A709A9B19BE68A300AC9238 - 3A709A9C19BE68A300AC9238 - 3A709A9D19BE68A300AC9238 - 3A709A9E19BE68A300AC9238 - 3A709A9F19BE68A300AC9238 - - isa - PBXGroup - name - Controllers - sourceTree - <group> - - 3A709A9819BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - VENTouchLockEnterPasscodeViewController.h - path - Controllers/VENTouchLockEnterPasscodeViewController.h - sourceTree - <group> - - 3A709A9919BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - VENTouchLockEnterPasscodeViewController.m - path - Controllers/VENTouchLockEnterPasscodeViewController.m - sourceTree - <group> - - 3A709A9A19BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - VENTouchLockPasscodeViewController.h - path - Controllers/VENTouchLockPasscodeViewController.h - sourceTree - <group> - - 3A709A9B19BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - VENTouchLockPasscodeViewController.m - path - Controllers/VENTouchLockPasscodeViewController.m - sourceTree - <group> - - 3A709A9C19BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - VENTouchLockCreatePasscodeViewController.h - path - Controllers/VENTouchLockCreatePasscodeViewController.h - sourceTree - <group> - - 3A709A9D19BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - VENTouchLockCreatePasscodeViewController.m - path - Controllers/VENTouchLockCreatePasscodeViewController.m - sourceTree - <group> - - 3A709A9E19BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - VENTouchLockSplashViewController.h - path - Controllers/VENTouchLockSplashViewController.h - sourceTree - <group> - - 3A709A9F19BE68A300AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - VENTouchLockSplashViewController.m - path - Controllers/VENTouchLockSplashViewController.m - sourceTree - <group> - - 3A709AA419BE68A300AC9238 - - fileRef - 3A709A9919BE68A300AC9238 - isa - PBXBuildFile - - 3A709AA519BE68A300AC9238 - - fileRef - 3A709A9A19BE68A300AC9238 - isa - PBXBuildFile - - 3A709AA619BE68A300AC9238 - - fileRef - 3A709A9B19BE68A300AC9238 - isa - PBXBuildFile - - 3A709AA719BE68A300AC9238 - - fileRef - 3A709A9C19BE68A300AC9238 - isa - PBXBuildFile - - 3A709AA819BE68A300AC9238 - - fileRef - 3A709A9D19BE68A300AC9238 - isa - PBXBuildFile - - 3A709AA919BE68A300AC9238 - - fileRef - 3A709A9E19BE68A300AC9238 - isa - PBXBuildFile - - 3A709AAA19BE68A300AC9238 - - fileRef - 3A709A9F19BE68A300AC9238 - isa - PBXBuildFile - - 3A709AAB19BE68B400AC9238 - - children - - 3A709AAC19BE68BF00AC9238 - 3A709AAD19BE68BF00AC9238 - 3A709AAE19BE68BF00AC9238 - 3A709AAF19BE68BF00AC9238 - 3A709AB019BE68BF00AC9238 - - isa - PBXGroup - name - Views - sourceTree - <group> - - 3A709AAC19BE68BF00AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - VENTouchLockPasscodeCharacterView.h - path - Views/VENTouchLockPasscodeCharacterView.h - sourceTree - <group> - - 3A709AAD19BE68BF00AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - VENTouchLockPasscodeCharacterView.m - path - Views/VENTouchLockPasscodeCharacterView.m - sourceTree - <group> - - 3A709AAE19BE68BF00AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - VENTouchLockPasscodeView.h - path - Views/VENTouchLockPasscodeView.h - sourceTree - <group> - - 3A709AAF19BE68BF00AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - VENTouchLockPasscodeView.m - path - Views/VENTouchLockPasscodeView.m - sourceTree - <group> - - 3A709AB019BE68BF00AC9238 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - file.xib - name - VENTouchLockPasscodeView.xib - path - Views/VENTouchLockPasscodeView.xib - sourceTree - <group> - - 3A709AB119BE68BF00AC9238 - - fileRef - 3A709AAC19BE68BF00AC9238 - isa - PBXBuildFile - - 3A709AB219BE68BF00AC9238 - - fileRef - 3A709AAD19BE68BF00AC9238 - isa - PBXBuildFile - - 3A709AB319BE68BF00AC9238 - - fileRef - 3A709AAE19BE68BF00AC9238 - isa - PBXBuildFile - - 3A709AB419BE68BF00AC9238 - - fileRef - 3A709AAF19BE68BF00AC9238 - isa - PBXBuildFile - - 3A709AB519BE68BF00AC9238 - - fileRef - 3A709AB019BE68BF00AC9238 - isa - PBXBuildFile - - 3D5E0250C8A240A2922F55F7 - - children - - 8A8322082DAA4E4E8840A4D1 - 4BBF12C3327B45B5803FC9C5 - 8C50D98031904B55BA82D2E5 - - isa - PBXGroup - name - Frameworks - sourceTree - <group> - - 4BBF12C3327B45B5803FC9C5 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-VENTouchLockTests.a - sourceTree - BUILT_PRODUCTS_DIR - - 578CFE7974F84E93ACDBAB3E - - buildActionMask - 2147483647 - files - - inputPaths - - isa - PBXShellScriptBuildPhase - name - Check Pods Manifest.lock - outputPaths - - runOnlyForDeploymentPostprocessing - 0 - shellPath - /bin/sh - shellScript - diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null -if [[ $? != 0 ]] ; then - cat << EOM -error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. -EOM - exit 1 -fi - - showEnvVarsInLog - 0 - - 7214AFB127B057149904A934 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods.release.xcconfig - path - Pods/Target Support Files/Pods/Pods.release.xcconfig - sourceTree - <group> - - 8A8322082DAA4E4E8840A4D1 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-VENTouchLock.a - sourceTree - BUILT_PRODUCTS_DIR - - 8B971D45E9814AC3A4071695 - - buildActionMask - 2147483647 - files - - inputPaths - - isa - PBXShellScriptBuildPhase - name - Copy Pods Resources - outputPaths - - runOnlyForDeploymentPostprocessing - 0 - shellPath - /bin/sh - shellScript - "${SRCROOT}/Pods/Target Support Files/Pods-VENTouchLockTests/Pods-VENTouchLockTests-resources.sh" - - showEnvVarsInLog - 0 - - 8C50D98031904B55BA82D2E5 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods.a - sourceTree - BUILT_PRODUCTS_DIR - - ACF4DE98AD7E614B0C1615BF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods-VENTouchLockTests.release.xcconfig - path - Pods/Target Support Files/Pods-VENTouchLockTests/Pods-VENTouchLockTests.release.xcconfig - sourceTree - <group> - - AE7750A29BBEFCCFD46D3B6D - - children - - EF1F7E543F036C4EB61FDC73 - 7214AFB127B057149904A934 - 3A4FE4165D8CB1C8FB147395 - ACF4DE98AD7E614B0C1615BF - - isa - PBXGroup - name - Pods - sourceTree - <group> - - B0AAA75C21C74F8DA9D13175 - - fileRef - 4BBF12C3327B45B5803FC9C5 - isa - PBXBuildFile - - DBA0684AD4E9464DAC14CC9A - - buildActionMask - 2147483647 - files - - inputPaths - - isa - PBXShellScriptBuildPhase - name - Copy Pods Resources - outputPaths - - runOnlyForDeploymentPostprocessing - 0 - shellPath - /bin/sh - shellScript - "${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh" - - showEnvVarsInLog - 0 - - EF1F7E543F036C4EB61FDC73 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods.debug.xcconfig - path - Pods/Target Support Files/Pods/Pods.debug.xcconfig - sourceTree - <group> - - - rootObject - 3A709A6719BE67D800AC9238 - - +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0E8BBA2F9ED2474C8534716D /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C50D98031904B55BA82D2E5 /* libPods.a */; }; + 3A03EACB19C4F72C0095708C /* VENTouchLockEnterPasscodeViewControllerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A03EACA19C4F72C0095708C /* VENTouchLockEnterPasscodeViewControllerSpec.m */; }; + 3A03EACC19C4FF1D0095708C /* VENTouchLockEnterPasscodeViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A709A9819BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.h */; }; + 3A03EACE19C4FF440095708C /* VENTouchLockEnterPasscodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A9919BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.m */; }; + 3A03EACF19C4FF990095708C /* VENTouchLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A8919BE686900AC9238 /* VENTouchLock.m */; }; + 3A03EAD019C4FF990095708C /* VENTouchLockPasscodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A9B19BE68A300AC9238 /* VENTouchLockPasscodeViewController.m */; }; + 3A03EAD119C4FF990095708C /* VENTouchLockCreatePasscodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A9D19BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.m */; }; + 3A03EAD319C4FF990095708C /* VENTouchLockPasscodeCharacterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709AAD19BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.m */; }; + 3A03EAD419C4FF990095708C /* VENTouchLockPasscodeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709AAF19BE68BF00AC9238 /* VENTouchLockPasscodeView.m */; }; + 3A03EAD619C4FF990095708C /* UIViewController+VENTouchLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A8F19BE688000AC9238 /* UIViewController+VENTouchLock.m */; }; + 3A03EAD919C56C9E0095708C /* UIViewController+VENTouchLockSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A03EAD819C56C9E0095708C /* UIViewController+VENTouchLockSpec.m */; }; + 3A03EADB19C5E41A0095708C /* VENTouchLockSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A03EADA19C5E41A0095708C /* VENTouchLockSpec.m */; }; + 3A5C456719D9C16B00E86B7C /* VENTouchLockAppearance.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A5C456519D9C16B00E86B7C /* VENTouchLockAppearance.h */; }; + 3A5C456819D9C16B00E86B7C /* VENTouchLockAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A5C456619D9C16B00E86B7C /* VENTouchLockAppearance.m */; }; + 3A5C456919D9C1A500E86B7C /* VENTouchLockAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A5C456619D9C16B00E86B7C /* VENTouchLockAppearance.m */; }; + 3A709A7619BE67D800AC9238 /* VENTouchLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A709A7519BE67D800AC9238 /* VENTouchLock.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A709A8A19BE686900AC9238 /* VENTouchLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A8919BE686900AC9238 /* VENTouchLock.m */; }; + 3A709A9219BE688000AC9238 /* UIViewController+VENTouchLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A709A8E19BE688000AC9238 /* UIViewController+VENTouchLock.h */; }; + 3A709A9319BE688000AC9238 /* UIViewController+VENTouchLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A8F19BE688000AC9238 /* UIViewController+VENTouchLock.m */; }; + 3A709AA419BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A9919BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.m */; }; + 3A709AA519BE68A300AC9238 /* VENTouchLockPasscodeViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A709A9A19BE68A300AC9238 /* VENTouchLockPasscodeViewController.h */; }; + 3A709AA619BE68A300AC9238 /* VENTouchLockPasscodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A9B19BE68A300AC9238 /* VENTouchLockPasscodeViewController.m */; }; + 3A709AA719BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A709A9C19BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.h */; }; + 3A709AA819BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709A9D19BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.m */; }; + 3A709AB119BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A709AAC19BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.h */; }; + 3A709AB219BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709AAD19BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.m */; }; + 3A709AB319BE68BF00AC9238 /* VENTouchLockPasscodeView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A709AAE19BE68BF00AC9238 /* VENTouchLockPasscodeView.h */; }; + 3A709AB419BE68BF00AC9238 /* VENTouchLockPasscodeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A709AAF19BE68BF00AC9238 /* VENTouchLockPasscodeView.m */; }; + 3A709AB519BE68BF00AC9238 /* VENTouchLockPasscodeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3A709AB019BE68BF00AC9238 /* VENTouchLockPasscodeView.xib */; }; + B0AAA75C21C74F8DA9D13175 /* libPods-VENTouchLockTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BBF12C3327B45B5803FC9C5 /* libPods-VENTouchLockTests.a */; }; + F922C76D1AA2BF9600B406BD /* VENNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = F922C76B1AA2BF9600B406BD /* VENNavigationController.h */; }; + F922C76E1AA2BF9600B406BD /* VENNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = F922C76C1AA2BF9600B406BD /* VENNavigationController.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 3A03EAC919C4F4E40095708C /* VENTouchLockTests-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "VENTouchLockTests-Prefix.pch"; sourceTree = ""; }; + 3A03EACA19C4F72C0095708C /* VENTouchLockEnterPasscodeViewControllerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENTouchLockEnterPasscodeViewControllerSpec.m; sourceTree = ""; }; + 3A03EAD819C56C9E0095708C /* UIViewController+VENTouchLockSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+VENTouchLockSpec.m"; sourceTree = ""; }; + 3A03EADA19C5E41A0095708C /* VENTouchLockSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENTouchLockSpec.m; sourceTree = ""; }; + 3A4FE4165D8CB1C8FB147395 /* Pods-VENTouchLockTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENTouchLockTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VENTouchLockTests/Pods-VENTouchLockTests.debug.xcconfig"; sourceTree = ""; }; + 3A5C456519D9C16B00E86B7C /* VENTouchLockAppearance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENTouchLockAppearance.h; path = Models/VENTouchLockAppearance.h; sourceTree = ""; }; + 3A5C456619D9C16B00E86B7C /* VENTouchLockAppearance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENTouchLockAppearance.m; path = Models/VENTouchLockAppearance.m; sourceTree = ""; }; + 3A709A7019BE67D800AC9238 /* VENTouchLock.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = VENTouchLock.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3A709A7419BE67D800AC9238 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3A709A7519BE67D800AC9238 /* VENTouchLock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VENTouchLock.h; sourceTree = ""; }; + 3A709A7B19BE67D800AC9238 /* VENTouchLockTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VENTouchLockTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3A709A7E19BE67D800AC9238 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3A709A8919BE686900AC9238 /* VENTouchLock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VENTouchLock.m; sourceTree = ""; }; + 3A709A8E19BE688000AC9238 /* UIViewController+VENTouchLock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIViewController+VENTouchLock.h"; path = "Categories/UIViewController+VENTouchLock.h"; sourceTree = ""; }; + 3A709A8F19BE688000AC9238 /* UIViewController+VENTouchLock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+VENTouchLock.m"; path = "Categories/UIViewController+VENTouchLock.m"; sourceTree = ""; }; + 3A709A9819BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENTouchLockEnterPasscodeViewController.h; path = Controllers/VENTouchLockEnterPasscodeViewController.h; sourceTree = ""; }; + 3A709A9919BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENTouchLockEnterPasscodeViewController.m; path = Controllers/VENTouchLockEnterPasscodeViewController.m; sourceTree = ""; }; + 3A709A9A19BE68A300AC9238 /* VENTouchLockPasscodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENTouchLockPasscodeViewController.h; path = Controllers/VENTouchLockPasscodeViewController.h; sourceTree = ""; }; + 3A709A9B19BE68A300AC9238 /* VENTouchLockPasscodeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENTouchLockPasscodeViewController.m; path = Controllers/VENTouchLockPasscodeViewController.m; sourceTree = ""; }; + 3A709A9C19BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENTouchLockCreatePasscodeViewController.h; path = Controllers/VENTouchLockCreatePasscodeViewController.h; sourceTree = ""; }; + 3A709A9D19BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENTouchLockCreatePasscodeViewController.m; path = Controllers/VENTouchLockCreatePasscodeViewController.m; sourceTree = ""; }; + 3A709AAC19BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENTouchLockPasscodeCharacterView.h; path = Views/VENTouchLockPasscodeCharacterView.h; sourceTree = ""; }; + 3A709AAD19BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENTouchLockPasscodeCharacterView.m; path = Views/VENTouchLockPasscodeCharacterView.m; sourceTree = ""; }; + 3A709AAE19BE68BF00AC9238 /* VENTouchLockPasscodeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENTouchLockPasscodeView.h; path = Views/VENTouchLockPasscodeView.h; sourceTree = ""; }; + 3A709AAF19BE68BF00AC9238 /* VENTouchLockPasscodeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENTouchLockPasscodeView.m; path = Views/VENTouchLockPasscodeView.m; sourceTree = ""; }; + 3A709AB019BE68BF00AC9238 /* VENTouchLockPasscodeView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = VENTouchLockPasscodeView.xib; path = Views/VENTouchLockPasscodeView.xib; sourceTree = ""; }; + 4BBF12C3327B45B5803FC9C5 /* libPods-VENTouchLockTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VENTouchLockTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7214AFB127B057149904A934 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; + 8A8322082DAA4E4E8840A4D1 /* libPods-VENTouchLock.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VENTouchLock.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 8C50D98031904B55BA82D2E5 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + ACF4DE98AD7E614B0C1615BF /* Pods-VENTouchLockTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VENTouchLockTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-VENTouchLockTests/Pods-VENTouchLockTests.release.xcconfig"; sourceTree = ""; }; + EF1F7E543F036C4EB61FDC73 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; + F922C76B1AA2BF9600B406BD /* VENNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VENNavigationController.h; path = Controllers/VENNavigationController.h; sourceTree = ""; }; + F922C76C1AA2BF9600B406BD /* VENNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VENNavigationController.m; path = Controllers/VENNavigationController.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 3A709A6C19BE67D800AC9238 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0E8BBA2F9ED2474C8534716D /* libPods.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3A709A7819BE67D800AC9238 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B0AAA75C21C74F8DA9D13175 /* libPods-VENTouchLockTests.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 3A5C456419D9C15F00E86B7C /* Models */ = { + isa = PBXGroup; + children = ( + 3A5C456519D9C16B00E86B7C /* VENTouchLockAppearance.h */, + 3A5C456619D9C16B00E86B7C /* VENTouchLockAppearance.m */, + ); + name = Models; + sourceTree = ""; + }; + 3A709A6619BE67D800AC9238 = { + isa = PBXGroup; + children = ( + 3A709A7219BE67D800AC9238 /* VENTouchLock */, + 3A709A7C19BE67D800AC9238 /* VENTouchLockTests */, + 3A709A7119BE67D800AC9238 /* Products */, + 3D5E0250C8A240A2922F55F7 /* Frameworks */, + AE7750A29BBEFCCFD46D3B6D /* Pods */, + ); + sourceTree = ""; + }; + 3A709A7119BE67D800AC9238 /* Products */ = { + isa = PBXGroup; + children = ( + 3A709A7019BE67D800AC9238 /* VENTouchLock.framework */, + 3A709A7B19BE67D800AC9238 /* VENTouchLockTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 3A709A7219BE67D800AC9238 /* VENTouchLock */ = { + isa = PBXGroup; + children = ( + 3A709A7519BE67D800AC9238 /* VENTouchLock.h */, + 3A709A8919BE686900AC9238 /* VENTouchLock.m */, + 3A5C456419D9C15F00E86B7C /* Models */, + 3A709A9419BE688E00AC9238 /* Controllers */, + 3A709AAB19BE68B400AC9238 /* Views */, + 3A709A8B19BE687100AC9238 /* Categories */, + 3A709A7319BE67D800AC9238 /* Supporting Files */, + ); + path = VENTouchLock; + sourceTree = ""; + }; + 3A709A7319BE67D800AC9238 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 3A709A7419BE67D800AC9238 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 3A709A7C19BE67D800AC9238 /* VENTouchLockTests */ = { + isa = PBXGroup; + children = ( + 3A03EADA19C5E41A0095708C /* VENTouchLockSpec.m */, + 3A03EACA19C4F72C0095708C /* VENTouchLockEnterPasscodeViewControllerSpec.m */, + 3A03EAD819C56C9E0095708C /* UIViewController+VENTouchLockSpec.m */, + 3A709A7D19BE67D800AC9238 /* Supporting Files */, + ); + path = VENTouchLockTests; + sourceTree = ""; + }; + 3A709A7D19BE67D800AC9238 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 3A709A7E19BE67D800AC9238 /* Info.plist */, + 3A03EAC919C4F4E40095708C /* VENTouchLockTests-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 3A709A8B19BE687100AC9238 /* Categories */ = { + isa = PBXGroup; + children = ( + 3A709A8E19BE688000AC9238 /* UIViewController+VENTouchLock.h */, + 3A709A8F19BE688000AC9238 /* UIViewController+VENTouchLock.m */, + ); + name = Categories; + sourceTree = ""; + }; + 3A709A9419BE688E00AC9238 /* Controllers */ = { + isa = PBXGroup; + children = ( + 3A709A9819BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.h */, + 3A709A9919BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.m */, + 3A709A9A19BE68A300AC9238 /* VENTouchLockPasscodeViewController.h */, + 3A709A9B19BE68A300AC9238 /* VENTouchLockPasscodeViewController.m */, + 3A709A9C19BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.h */, + 3A709A9D19BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.m */, + F922C76B1AA2BF9600B406BD /* VENNavigationController.h */, + F922C76C1AA2BF9600B406BD /* VENNavigationController.m */, + ); + name = Controllers; + sourceTree = ""; + }; + 3A709AAB19BE68B400AC9238 /* Views */ = { + isa = PBXGroup; + children = ( + 3A709AAC19BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.h */, + 3A709AAD19BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.m */, + 3A709AAE19BE68BF00AC9238 /* VENTouchLockPasscodeView.h */, + 3A709AAF19BE68BF00AC9238 /* VENTouchLockPasscodeView.m */, + 3A709AB019BE68BF00AC9238 /* VENTouchLockPasscodeView.xib */, + ); + name = Views; + sourceTree = ""; + }; + 3D5E0250C8A240A2922F55F7 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 8A8322082DAA4E4E8840A4D1 /* libPods-VENTouchLock.a */, + 4BBF12C3327B45B5803FC9C5 /* libPods-VENTouchLockTests.a */, + 8C50D98031904B55BA82D2E5 /* libPods.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + AE7750A29BBEFCCFD46D3B6D /* Pods */ = { + isa = PBXGroup; + children = ( + EF1F7E543F036C4EB61FDC73 /* Pods.debug.xcconfig */, + 7214AFB127B057149904A934 /* Pods.release.xcconfig */, + 3A4FE4165D8CB1C8FB147395 /* Pods-VENTouchLockTests.debug.xcconfig */, + ACF4DE98AD7E614B0C1615BF /* Pods-VENTouchLockTests.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 3A709A6D19BE67D800AC9238 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F922C76D1AA2BF9600B406BD /* VENNavigationController.h in Headers */, + 3A709A9219BE688000AC9238 /* UIViewController+VENTouchLock.h in Headers */, + 3A709A7619BE67D800AC9238 /* VENTouchLock.h in Headers */, + 3A03EACC19C4FF1D0095708C /* VENTouchLockEnterPasscodeViewController.h in Headers */, + 3A5C456719D9C16B00E86B7C /* VENTouchLockAppearance.h in Headers */, + 3A709AB319BE68BF00AC9238 /* VENTouchLockPasscodeView.h in Headers */, + 3A709AA719BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.h in Headers */, + 3A709AB119BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.h in Headers */, + 3A709AA519BE68A300AC9238 /* VENTouchLockPasscodeViewController.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 3A709A6F19BE67D800AC9238 /* VENTouchLock */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3A709A8319BE67D800AC9238 /* Build configuration list for PBXNativeTarget "VENTouchLock" */; + buildPhases = ( + 578CFE7974F84E93ACDBAB3E /* Check Pods Manifest.lock */, + 3A709A6B19BE67D800AC9238 /* Sources */, + 3A709A6C19BE67D800AC9238 /* Frameworks */, + 3A709A6D19BE67D800AC9238 /* Headers */, + 3A709A6E19BE67D800AC9238 /* Resources */, + DBA0684AD4E9464DAC14CC9A /* Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = VENTouchLock; + productName = VENTouchLock; + productReference = 3A709A7019BE67D800AC9238 /* VENTouchLock.framework */; + productType = "com.apple.product-type.framework"; + }; + 3A709A7A19BE67D800AC9238 /* VENTouchLockTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3A709A8619BE67D800AC9238 /* Build configuration list for PBXNativeTarget "VENTouchLockTests" */; + buildPhases = ( + 006CE543BCFC47E7AB666869 /* Check Pods Manifest.lock */, + 3A709A7719BE67D800AC9238 /* Sources */, + 3A709A7819BE67D800AC9238 /* Frameworks */, + 3A709A7919BE67D800AC9238 /* Resources */, + 8B971D45E9814AC3A4071695 /* Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = VENTouchLockTests; + productName = VENTouchLockTests; + productReference = 3A709A7B19BE67D800AC9238 /* VENTouchLockTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 3A709A6719BE67D800AC9238 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0600; + ORGANIZATIONNAME = Venmo; + TargetAttributes = { + 3A709A6F19BE67D800AC9238 = { + CreatedOnToolsVersion = 6.0; + }; + 3A709A7A19BE67D800AC9238 = { + CreatedOnToolsVersion = 6.0; + }; + }; + }; + buildConfigurationList = 3A709A6A19BE67D800AC9238 /* Build configuration list for PBXProject "VENTouchLock" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 3A709A6619BE67D800AC9238; + productRefGroup = 3A709A7119BE67D800AC9238 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 3A709A6F19BE67D800AC9238 /* VENTouchLock */, + 3A709A7A19BE67D800AC9238 /* VENTouchLockTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 3A709A6E19BE67D800AC9238 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A709AB519BE68BF00AC9238 /* VENTouchLockPasscodeView.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3A709A7919BE67D800AC9238 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 006CE543BCFC47E7AB666869 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 578CFE7974F84E93ACDBAB3E /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 8B971D45E9814AC3A4071695 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VENTouchLockTests/Pods-VENTouchLockTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + DBA0684AD4E9464DAC14CC9A /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 3A709A6B19BE67D800AC9238 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A709AA419BE68A300AC9238 /* VENTouchLockEnterPasscodeViewController.m in Sources */, + 3A709A9319BE688000AC9238 /* UIViewController+VENTouchLock.m in Sources */, + 3A709A8A19BE686900AC9238 /* VENTouchLock.m in Sources */, + 3A709AB219BE68BF00AC9238 /* VENTouchLockPasscodeCharacterView.m in Sources */, + F922C76E1AA2BF9600B406BD /* VENNavigationController.m in Sources */, + 3A709AA819BE68A300AC9238 /* VENTouchLockCreatePasscodeViewController.m in Sources */, + 3A709AA619BE68A300AC9238 /* VENTouchLockPasscodeViewController.m in Sources */, + 3A5C456819D9C16B00E86B7C /* VENTouchLockAppearance.m in Sources */, + 3A709AB419BE68BF00AC9238 /* VENTouchLockPasscodeView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3A709A7719BE67D800AC9238 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A5C456919D9C1A500E86B7C /* VENTouchLockAppearance.m in Sources */, + 3A03EACF19C4FF990095708C /* VENTouchLock.m in Sources */, + 3A03EAD019C4FF990095708C /* VENTouchLockPasscodeViewController.m in Sources */, + 3A03EAD119C4FF990095708C /* VENTouchLockCreatePasscodeViewController.m in Sources */, + 3A03EAD319C4FF990095708C /* VENTouchLockPasscodeCharacterView.m in Sources */, + 3A03EAD919C56C9E0095708C /* UIViewController+VENTouchLockSpec.m in Sources */, + 3A03EAD419C4FF990095708C /* VENTouchLockPasscodeView.m in Sources */, + 3A03EAD619C4FF990095708C /* UIViewController+VENTouchLock.m in Sources */, + 3A03EADB19C5E41A0095708C /* VENTouchLockSpec.m in Sources */, + 3A03EACE19C4FF440095708C /* VENTouchLockEnterPasscodeViewController.m in Sources */, + 3A03EACB19C4F72C0095708C /* VENTouchLockEnterPasscodeViewControllerSpec.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 3A709A8119BE67D800AC9238 /* Debug */ = { + 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_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 3A709A8219BE67D800AC9238 /* 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_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + CURRENT_PROJECT_VERSION = 1; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 3A709A8419BE67D800AC9238 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EF1F7E543F036C4EB61FDC73 /* Pods.debug.xcconfig */; + buildSettings = { + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = VENTouchLock/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 3A709A8519BE67D800AC9238 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7214AFB127B057149904A934 /* Pods.release.xcconfig */; + buildSettings = { + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = VENTouchLock/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 3A709A8719BE67D800AC9238 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3A4FE4165D8CB1C8FB147395 /* Pods-VENTouchLockTests.debug.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREFIX_HEADER = "VENTouchLockTests/VENTouchLockTests-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = VENTouchLockTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 3A709A8819BE67D800AC9238 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = ACF4DE98AD7E614B0C1615BF /* Pods-VENTouchLockTests.release.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREFIX_HEADER = "VENTouchLockTests/VENTouchLockTests-Prefix.pch"; + INFOPLIST_FILE = VENTouchLockTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3A709A6A19BE67D800AC9238 /* Build configuration list for PBXProject "VENTouchLock" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3A709A8119BE67D800AC9238 /* Debug */, + 3A709A8219BE67D800AC9238 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3A709A8319BE67D800AC9238 /* Build configuration list for PBXNativeTarget "VENTouchLock" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3A709A8419BE67D800AC9238 /* Debug */, + 3A709A8519BE67D800AC9238 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3A709A8619BE67D800AC9238 /* Build configuration list for PBXNativeTarget "VENTouchLockTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3A709A8719BE67D800AC9238 /* Debug */, + 3A709A8819BE67D800AC9238 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 3A709A6719BE67D800AC9238 /* Project object */; +} diff --git a/VENTouchLock/Categories/UIViewController+VENTouchLock.m b/VENTouchLock/Categories/UIViewController+VENTouchLock.m index 24d4520..7cd98b9 100644 --- a/VENTouchLock/Categories/UIViewController+VENTouchLock.m +++ b/VENTouchLock/Categories/UIViewController+VENTouchLock.m @@ -1,10 +1,11 @@ #import "UIViewController+VENTouchLock.h" +#import "VENNavigationController.h" @implementation UIViewController (VENTouchLock) - (UINavigationController *)ventouchlock_embeddedInNavigationController { - UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:self]; + VENNavigationController *navigationController = [[VENNavigationController alloc] initWithRootViewController:self]; navigationController.navigationBar.translucent = NO; return navigationController; } diff --git a/VENTouchLock/Controllers/VENNavigationController.h b/VENTouchLock/Controllers/VENNavigationController.h new file mode 100644 index 0000000..104d601 --- /dev/null +++ b/VENTouchLock/Controllers/VENNavigationController.h @@ -0,0 +1,13 @@ +// +// VENNavigationController.h +// VENTouchLock +// +// Created by Sean M Kirkpatrick on 2/28/15. +// Copyright (c) 2015 Venmo. All rights reserved. +// + +#import + +@interface VENNavigationController : UINavigationController + +@end diff --git a/VENTouchLock/Controllers/VENNavigationController.m b/VENTouchLock/Controllers/VENNavigationController.m new file mode 100644 index 0000000..ef2a478 --- /dev/null +++ b/VENTouchLock/Controllers/VENNavigationController.m @@ -0,0 +1,28 @@ +// +// VENNavigationController.m +// VENTouchLock +// +// Created by Sean M Kirkpatrick on 2/28/15. +// Copyright (c) 2015 Venmo. All rights reserved. +// + +#import "VENNavigationController.h" + +@implementation VENNavigationController + +- (BOOL)shouldAutorotate +{ + return self.topViewController.shouldAutorotate; +} + +-(NSUInteger)supportedInterfaceOrientations +{ + return self.topViewController.supportedInterfaceOrientations; +} + +-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation +{ + return self.topViewController.preferredInterfaceOrientationForPresentation; +} + +@end diff --git a/VENTouchLock/Controllers/VENTouchLockCreatePasscodeViewController.m b/VENTouchLock/Controllers/VENTouchLockCreatePasscodeViewController.m index 2272388..4793047 100644 --- a/VENTouchLock/Controllers/VENTouchLockCreatePasscodeViewController.m +++ b/VENTouchLock/Controllers/VENTouchLockCreatePasscodeViewController.m @@ -30,8 +30,7 @@ - (void)enteredPasscode:(NSString *)passcode; [super enteredPasscode:passcode]; if (self.firstPasscode) { if ([passcode isEqualToString:self.firstPasscode]) { - [self.touchLock setPasscode:passcode]; - [self finishWithResult:YES animated:YES]; + [self finishWithResult:[self.touchLock setPasscode:passcode] animated:YES]; } else { [self.passcodeView shakeAndVibrateCompletion:^{ diff --git a/VENTouchLock/Controllers/VENTouchLockEnterPasscodeViewController.m b/VENTouchLock/Controllers/VENTouchLockEnterPasscodeViewController.m index 6797fd2..c39531b 100644 --- a/VENTouchLock/Controllers/VENTouchLockEnterPasscodeViewController.m +++ b/VENTouchLock/Controllers/VENTouchLockEnterPasscodeViewController.m @@ -31,6 +31,19 @@ - (void)viewDidLoad { [super viewDidLoad]; self.passcodeView.title = [self.touchLock appearance].enterPasscodeInitialLabelText; + + if ([VENTouchLock shouldUseTouchID]) { + self.passcodeView.hideTouchIDButton = NO; + __weak VENTouchLockEnterPasscodeViewController *weakSelf = self; + [self.passcodeView setTouchIDButtonPressed:^(UIButton *button) { + [weakSelf.touchLock showTouchID]; + }]; + } +} + +- (void)configureNavigationItems +{ + // no navigation items } - (void)enteredPasscode:(NSString *)passcode @@ -44,9 +57,7 @@ - (void)enteredPasscode:(NSString *)passcode [self.passcodeView shakeAndVibrateCompletion:^{ self.passcodeView.title = [self.touchLock appearance].enterPasscodeIncorrectLabelText; [self clearPasscode]; - if ([self parentSplashViewController]) { - [self recordIncorrectPasscodeAttempt]; - } + [self recordIncorrectPasscodeAttempt]; }]; } @@ -66,25 +77,7 @@ - (void)recordIncorrectPasscodeAttempt - (void)callExceededLimitActionBlock { - [[self parentSplashViewController] dismissWithUnlockSuccess:NO - unlockType:VENTouchLockSplashViewControllerUnlockTypeNone - animated:NO]; -} - -- (VENTouchLockSplashViewController *)parentSplashViewController -{ - VENTouchLockSplashViewController *splashViewController = nil; - UIViewController *presentingViewController = self.presentingViewController; - if (self.touchLock.appearance.splashShouldEmbedInNavigationController) { - UIViewController *rootViewController = ([presentingViewController isKindOfClass:[UINavigationController class]]) ? [((UINavigationController *)presentingViewController).viewControllers firstObject] : nil; - if ([rootViewController isKindOfClass:[VENTouchLockSplashViewController class]]) { - splashViewController = (VENTouchLockSplashViewController *)rootViewController; - } - } - else if ([presentingViewController isKindOfClass:[VENTouchLockSplashViewController class]]) { - splashViewController = (VENTouchLockSplashViewController *)presentingViewController; - } - return splashViewController; + // TODO: come up with solution for this } @end diff --git a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h index 6e8f031..8e93f47 100644 --- a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h +++ b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.h @@ -10,17 +10,17 @@ @property (strong, nonatomic) VENTouchLockPasscodeView *passcodeView; /** - This block is called directly before the passcode view controller has completed its intended operation. If the operation was completed successfully, the returned BOOL will return YES, and NO otherwise. - If this block is defined, it is responsible for dismissing the passcode view controller. - If this block is nil, the payment view controller will dismiss itself. + If this block is defined, it is called within the completion block of the passcode view controller when it is dismissed. If the operation was completed successfully, the returned BOOL will return YES, and NO otherwise. */ -@property (nonatomic, copy) void (^willFinishWithResult)(BOOL success); +@property (nonatomic, copy) void (^didFinishWithResult)(BOOL success); +// ^ SYMPLE: usage customized and comment updated to reflect Symple usage /** The VENTouchLock framework this class interacts with. This property should not be set outside of VENTouchLock framework's automated tests. By default, it is set to the [VENTouchLock sharedInstance] singleton on initialization. */ @property (nonatomic, strong) VENTouchLock *touchLock; +@property (nonatomic, getter=isSnapshotViewController) BOOL snapshotViewController; /** Encapsulates the view controller in a navigation controller. */ diff --git a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m index 17d20cf..60deea6 100644 --- a/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m +++ b/VENTouchLock/Controllers/VENTouchLockPasscodeViewController.m @@ -32,11 +32,16 @@ - (instancetype)init - (void)viewDidLoad { [super viewDidLoad]; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBecomeActiveNotification) name:UIApplicationDidBecomeActiveNotification object:nil]; + self.view.backgroundColor = [self.touchLock appearance].passcodeViewControllerBackgroundColor; - [self configureInvisiblePasscodeField]; + + if (!self.isSnapshotViewController) { + [self configureInvisiblePasscodeField]; + } + [self configureNavigationItems]; [self configurePasscodeView]; } @@ -44,7 +49,8 @@ - (void)viewDidLoad - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - if (![self.invisiblePasscodeField isFirstResponder]) { + + if (!self.isSnapshotViewController && ![self.invisiblePasscodeField isFirstResponder]) { [self.invisiblePasscodeField becomeFirstResponder]; } } @@ -52,9 +58,22 @@ - (void)viewWillAppear:(BOOL)animated - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; - if ([self.invisiblePasscodeField isFirstResponder]) { + + if (!self.isSnapshotViewController && [self.invisiblePasscodeField isFirstResponder]) { [self.invisiblePasscodeField resignFirstResponder]; } + + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (void)viewWillLayoutSubviews +{ + [super viewWillLayoutSubviews]; + + if (self.isSnapshotViewController) { + // FIXME: keyboard height should not be hardcoded + [self setPasscodeViewFrameForKeyboardHeight:216]; + } } - (void)configureInvisiblePasscodeField @@ -89,12 +108,14 @@ - (void)userTappedCancel - (void)finishWithResult:(BOOL)success animated:(BOOL)animated { [self.invisiblePasscodeField resignFirstResponder]; - if (self.willFinishWithResult) { - self.willFinishWithResult(success); - } else { - [self dismissViewControllerAnimated:animated completion:nil]; - } + + [self dismissViewControllerAnimated:animated completion:^{ + if (self.didFinishWithResult) { + self.didFinishWithResult(success); + } + }]; } +// ^ SYMPLE: Customized - (UINavigationController *)embeddedInNavigationController { @@ -104,8 +125,13 @@ - (UINavigationController *)embeddedInNavigationController - (void)keyboardWillShow:(NSNotification *)notification { CGRect newKeyboardFrame = [(NSValue *)[notification.userInfo objectForKey:@"UIKeyboardFrameEndUserInfoKey"] CGRectValue]; - CGFloat passcodeLockViewHeight = CGRectGetHeight(self.view.frame) - CGRectGetHeight(newKeyboardFrame); - CGFloat passcodeLockViewWidth = CGRectGetWidth(self.view.frame); + [self setPasscodeViewFrameForKeyboardHeight:CGRectGetHeight(newKeyboardFrame)]; +} + +- (void)setPasscodeViewFrameForKeyboardHeight:(CGFloat)keyboardHeight +{ + CGFloat passcodeLockViewHeight = CGRectGetHeight(self.view.frame) - keyboardHeight; + CGFloat passcodeLockViewWidth = CGRectGetWidth(self.view.frame); self.passcodeView.frame = CGRectMake(0, 0, passcodeLockViewWidth, passcodeLockViewHeight); } @@ -154,7 +180,7 @@ - (void)textFieldDidChange:(UITextField *)textField } NSString *newString = textField.text; NSUInteger newLength = [newString length]; - + if (newLength == VENTouchLockViewControllerPasscodeLength) { self.shouldIgnoreTextFieldDelegateCalls = YES; textField.text = @""; @@ -162,4 +188,30 @@ - (void)textFieldDidChange:(UITextField *)textField } } -@end \ No newline at end of file +# pragma mark Symple rotation behavior + +-(BOOL)shouldAutorotate +{ + return NO; +} + +- (NSUInteger)supportedInterfaceOrientations +{ + return UIInterfaceOrientationMaskPortrait; +} + +- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation +{ + return UIInterfaceOrientationPortrait; +} + +#pragma mark - notification action + +- (void)didBecomeActiveNotification +{ + if (!self.isSnapshotViewController && ![self.invisiblePasscodeField isFirstResponder]) { + [self.invisiblePasscodeField becomeFirstResponder]; + } +} + +@end diff --git a/VENTouchLock/Controllers/VENTouchLockSplashViewController.h b/VENTouchLock/Controllers/VENTouchLockSplashViewController.h deleted file mode 100644 index 9266ee0..0000000 --- a/VENTouchLock/Controllers/VENTouchLockSplashViewController.h +++ /dev/null @@ -1,56 +0,0 @@ -#import - -typedef NS_ENUM(NSUInteger, VENTouchLockSplashViewControllerUnlockType) { - VENTouchLockSplashViewControllerUnlockTypeNone, - VENTouchLockSplashViewControllerUnlockTypeTouchID, - VENTouchLockSplashViewControllerUnlockTypePasscode -}; - -@class VENTouchLock; - -@interface VENTouchLockSplashViewController : UIViewController - -/** - Called when the VENTouchLockSplashViewController instance is dismissed. - @param success YES if the splash view controller was unlocked successfully. NO if the user reached passcodeAttemptLimit. - @param unlockType The type of unlock method used when unlock is successful. - @note A secure use-case of this block is to log out of your app when success is NO. - */ -@property (nonatomic, copy) void (^didFinishWithSuccess)(BOOL success, VENTouchLockSplashViewControllerUnlockType unlockType); - -/** - The VENTouchLock framework this class interacts with. This property should not be set outside of VENTouchLock framework's automated tests. By default, it is set to the [VENTouchLock sharedInstance] singleton on initialization. - */ -@property (nonatomic, strong) VENTouchLock *touchLock; - -/** - Displays a Touch ID prompt if the device can support it. - */ -- (void)showUnlockAnimated:(BOOL)animated; - -/** - Displays a Touch ID prompt if the device can support it. - */ -- (void)showTouchID; - -/** - Presents a VENTouchLockEnterPasscodeViewController instance. - */ -- (void)showPasscodeAnimated:(BOOL)animated; - -/** - Dismisses the VENTouchLockSplashViewController instance. This method should not be called outside of the VENTouchLock framework. - @param success YES if the splash view controller was unlocked successfully. NO if the user reached passcodeAttemptLimit. - @param unlockType The type of unlock method used when unlock is successful. - @param animated YES to animated the view controller's dismissal. NO otherwise. - */ -- (void)dismissWithUnlockSuccess:(BOOL)success - unlockType:(VENTouchLockSplashViewControllerUnlockType)unlockType - animated:(BOOL)animated; -/** - Signals the splash view controller to behave like a snapshot view for app-switch. This method should not be called outside of the VENTouchLock framework. - @param isSnapshotViewController YES if the splash view controller is for the app-switch snapshot. NO othwerise. - */ -- (void)setIsSnapshotViewController:(BOOL)isSnapshotViewController; - -@end diff --git a/VENTouchLock/Controllers/VENTouchLockSplashViewController.m b/VENTouchLock/Controllers/VENTouchLockSplashViewController.m deleted file mode 100644 index d12ccad..0000000 --- a/VENTouchLock/Controllers/VENTouchLockSplashViewController.m +++ /dev/null @@ -1,151 +0,0 @@ -#import "VENTouchLockSplashViewController.h" -#import "VENTouchLockEnterPasscodeViewController.h" -#import "VENTouchLock.h" - -@interface VENTouchLockSplashViewController () -@property (nonatomic, assign) BOOL isSnapshotViewController; -@end - -@implementation VENTouchLockSplashViewController - -#pragma mark - Creation and Lifecycle - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - if (!self.isSnapshotViewController) { - self.touchLock.backgroundLockVisible = NO; - } -} - -- (instancetype)init -{ - self = [super init]; - if (self) { - [self initialize]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder -{ - self = [super initWithCoder:aDecoder]; - if (self) { - [self initialize]; - } - return self; -} - -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - [self initialize]; - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - if (!self.view.backgroundColor) { - self.view.backgroundColor = [UIColor whiteColor]; - } -} - -- (void)viewDidAppear:(BOOL)animated -{ - [super viewDidAppear:animated]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil]; -} - -- (void)viewDidDisappear:(BOOL)animated -{ - [super viewDidDisappear:animated]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillEnterForegroundNotification object:nil]; -} - - -#pragma mark - Present unlock methods - -- (void)showUnlockAnimated:(BOOL)animated -{ - if ([VENTouchLock shouldUseTouchID]) { - [self showTouchID]; - } - else { - [self showPasscodeAnimated:animated]; - } -} - -- (void)showTouchID -{ - __weak VENTouchLockSplashViewController *weakSelf = self; - [self.touchLock requestTouchIDWithCompletion:^(VENTouchLockTouchIDResponse response) { - switch (response) { - case VENTouchLockTouchIDResponseSuccess: - [weakSelf unlockWithType:VENTouchLockSplashViewControllerUnlockTypeTouchID]; - break; - case VENTouchLockTouchIDResponseUsePasscode: - [weakSelf showPasscodeAnimated:YES]; - break; - default: - break; - } - }]; -} - -- (void)showPasscodeAnimated:(BOOL)animated -{ - [self presentViewController:[[self enterPasscodeVC] embeddedInNavigationController] - animated:animated - completion:nil]; -} - -- (VENTouchLockEnterPasscodeViewController *)enterPasscodeVC -{ - VENTouchLockEnterPasscodeViewController *enterPasscodeVC = [[VENTouchLockEnterPasscodeViewController alloc] init]; - __weak VENTouchLockSplashViewController *weakSelf = self; - enterPasscodeVC.willFinishWithResult = ^(BOOL success) { - if (success) { - [weakSelf unlockWithType:VENTouchLockSplashViewControllerUnlockTypePasscode]; - } - else { - [weakSelf dismissViewControllerAnimated:YES completion:nil]; - } - }; - return enterPasscodeVC; -} - -- (void)appWillEnterForeground -{ - if (!self.presentedViewController) { - [self showUnlockAnimated:NO]; - } -} - -- (void)unlockWithType:(VENTouchLockSplashViewControllerUnlockType)unlockType -{ - [self dismissWithUnlockSuccess:YES - unlockType:unlockType - animated:YES]; -} - -- (void)dismissWithUnlockSuccess:(BOOL)success - unlockType:(VENTouchLockSplashViewControllerUnlockType)unlockType - animated:(BOOL)animated -{ - [self.presentingViewController dismissViewControllerAnimated:animated completion:^{ - if (self.didFinishWithSuccess) { - self.didFinishWithSuccess(success, unlockType); - } - }]; -} - -- (void)initialize -{ - _touchLock = [VENTouchLock sharedInstance]; -} - -@end \ No newline at end of file diff --git a/VENTouchLock/Models/VENTouchLockAppearance.m b/VENTouchLock/Models/VENTouchLockAppearance.m index 93c529b..a3eed7d 100644 --- a/VENTouchLock/Models/VENTouchLockAppearance.m +++ b/VENTouchLock/Models/VENTouchLockAppearance.m @@ -8,7 +8,7 @@ - (instancetype)init if (self) { // Set default values _passcodeViewControllerTitleColor = [UIColor blackColor]; _passcodeViewControllerCharacterColor = [UIColor blackColor]; - _passcodeViewControllerBackgroundColor = [UIColor colorWithRed:239/255.0f green:239/255.0f blue:244/255.0f alpha:1.0f]; + _passcodeViewControllerBackgroundColor = [UIColor colorWithRed:247/255.0f green:247/255.0f blue:247/255.0f alpha:1.0f]; _cancelBarButtonItemTitle = NSLocalizedString(@"Cancel", nil); _createPasscodeInitialLabelText = NSLocalizedString(@"Enter a new passcode", nil); _createPasscodeConfirmLabelText = NSLocalizedString(@"Please re-enter your passcode", nil); @@ -17,7 +17,7 @@ - (instancetype)init _enterPasscodeInitialLabelText = NSLocalizedString(@"Enter your passcode", nil); _enterPasscodeIncorrectLabelText = NSLocalizedString(@"Incorrect passcode. Try again.", nil); _enterPasscodeViewControllerTitle = NSLocalizedString(@"Enter Passcode", nil); - _splashShouldEmbedInNavigationController = NO; + _splashShouldEmbedInNavigationController = YES; } return self; } diff --git a/VENTouchLock/VENTouchLock.h b/VENTouchLock/VENTouchLock.h index a9ef20d..9406cec 100644 --- a/VENTouchLock/VENTouchLock.h +++ b/VENTouchLock/VENTouchLock.h @@ -1,7 +1,6 @@ #import #import "VENTouchLockCreatePasscodeViewController.h" #import "VENTouchLockEnterPasscodeViewController.h" -#import "VENTouchLockSplashViewController.h" #import "VENTouchLockAppearance.h" typedef NS_ENUM(NSUInteger, VENTouchLockTouchIDResponse) { @@ -33,9 +32,7 @@ typedef NS_ENUM(NSUInteger, VENTouchLockTouchIDResponse) { - (void)setKeychainService:(NSString *)service keychainAccount:(NSString *)account touchIDReason:(NSString *)reason - passcodeAttemptLimit:(NSUInteger)attemptLimit - splashViewControllerClass:(Class)splashViewControllerClass; - + passcodeAttemptLimit:(NSUInteger)attemptLimit; /** Returns YES if a passcode exists, and NO otherwise. */ @@ -52,9 +49,9 @@ typedef NS_ENUM(NSUInteger, VENTouchLockTouchIDResponse) { - (BOOL)isPasscodeValid:(NSString *)passcode; /** - Sets the given string to be the current passcode. + Sets the given string to be the current passcode. Returns NO if the keychain write fails. */ -- (void)setPasscode:(NSString *)passcode; +- (BOOL)setPasscode:(NSString *)passcode; /** Deletes the current passcode if one exists. @@ -76,6 +73,11 @@ typedef NS_ENUM(NSUInteger, VENTouchLockTouchIDResponse) { */ + (void)setShouldUseTouchID:(BOOL)shouldUseTouchID; +/** + * Request Touch ID if possible + */ +- (void)showTouchID; + /** Requests a TouchID if possible. If canUseTouchID returns NO, this method does nothing. The displayed string on the touch id prompt will be the default touchIDReason. */ @@ -97,4 +99,10 @@ typedef NS_ENUM(NSUInteger, VENTouchLockTouchIDResponse) { */ - (VENTouchLockAppearance *)appearance; +/** + If this block is defined, it is called within the completion block of the passcode view controller when it is dismissed. If the operation was completed successfully, the returned BOOL will return YES, and NO otherwise. + */ +@property (nonatomic, copy) void (^didFinishWithResult)(BOOL success); +// ^ SYMPLE: VENTouchLockPasscodeViewController completion block exposed via Client API + @end \ No newline at end of file diff --git a/VENTouchLock/VENTouchLock.m b/VENTouchLock/VENTouchLock.m index 2174bb4..52b3e08 100644 --- a/VENTouchLock/VENTouchLock.m +++ b/VENTouchLock/VENTouchLock.m @@ -4,6 +4,7 @@ #import #import "UIViewController+VENTouchLock.h" + static NSString *const VENTouchLockUserDefaultsKeyTouchIDActivated = @"VENTouchLockUserDefaultsKeyTouchIDActivated"; @interface VENTouchLock () @@ -12,7 +13,6 @@ @interface VENTouchLock () @property (copy, nonatomic) NSString *keychainAccount; @property (copy, nonatomic) NSString *touchIDReason; @property (assign, nonatomic) NSUInteger passcodeAttemptLimit; -@property (assign, nonatomic) Class splashViewControllerClass; @property (strong, nonatomic) UIView *snapshotView; @property (strong, nonatomic) VENTouchLockAppearance *appearance; @@ -52,14 +52,11 @@ - (void)setKeychainService:(NSString *)service keychainAccount:(NSString *)account touchIDReason:(NSString *)reason passcodeAttemptLimit:(NSUInteger)attemptLimit - splashViewControllerClass:(Class)splashViewControllerClass - { self.keychainService = service; self.keychainAccount = account; self.touchIDReason = reason; self.passcodeAttemptLimit = attemptLimit; - self.splashViewControllerClass = splashViewControllerClass; } @@ -82,11 +79,18 @@ - (BOOL)isPasscodeValid:(NSString *)passcode return [passcode isEqualToString:[self currentPasscode]]; } -- (void)setPasscode:(NSString *)passcode +- (BOOL)setPasscode:(NSString *)passcode { NSString *service = self.keychainService; NSString *account = self.keychainAccount; - [SSKeychain setPassword:passcode forService:service account:account]; + + NSError *saveError = nil; + + if (![SSKeychain setPassword:passcode forService:service account:account error:&saveError]) { + NSLog(@"%s [Line %d] saveError: %@", __PRETTY_FUNCTION__, __LINE__, saveError); + } + + return (!saveError); } - (void)deletePasscode @@ -120,6 +124,30 @@ + (void)setShouldUseTouchID:(BOOL)shouldUseTouchID [[NSUserDefaults standardUserDefaults] synchronize]; } +- (void)showTouchID +{ + UIViewController *rootViewController = [UIViewController ventouchlock_topMostController]; + + [self requestTouchIDWithCompletion:^(VENTouchLockTouchIDResponse response) { + switch (response) { + case VENTouchLockTouchIDResponseSuccess: { + self.backgroundLockVisible = NO; + + [rootViewController dismissViewControllerAnimated:YES completion:^{ + if (self.didFinishWithResult) { + self.didFinishWithResult(YES); + } + }]; + break; + } + case VENTouchLockTouchIDResponseUsePasscode: + break; + default: + break; + } + }]; +} + - (void)requestTouchIDWithCompletion:(void (^)(VENTouchLockTouchIDResponse))completionBlock { [self requestTouchIDWithCompletion:completionBlock reason:self.touchIDReason]; @@ -129,7 +157,7 @@ - (void)requestTouchIDWithCompletion:(void (^)(VENTouchLockTouchIDResponse))comp { if ([[self class] canUseTouchID]) { LAContext *context = [[LAContext alloc] init]; - context.localizedFallbackTitle = NSLocalizedString(@"Enter Passcode", nil); + context.localizedFallbackTitle = @"Enter Passcode"; [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:reason reply:^(BOOL success, NSError *error) { @@ -163,46 +191,56 @@ - (void)requestTouchIDWithCompletion:(void (^)(VENTouchLockTouchIDResponse))comp - (void)lockFromBackground:(BOOL)fromBackground { - if (self.splashViewControllerClass != NULL) { - VENTouchLockSplashViewController *splashViewController = [[self.splashViewControllerClass alloc] init]; - if ([splashViewController isKindOfClass:[VENTouchLockSplashViewController class]]) { - UIWindow *mainWindow = [[UIApplication sharedApplication].windows firstObject]; - UIViewController *rootViewController = [UIViewController ventouchlock_topMostController]; - UIViewController *displayController; - if (self.appearance.splashShouldEmbedInNavigationController) { - displayController = [splashViewController ventouchlock_embeddedInNavigationController]; - } - else { - displayController = splashViewController; - } - - if (fromBackground) { - [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - VENTouchLockSplashViewController *snapshotSplashViewController = [[self.splashViewControllerClass alloc] init]; - [snapshotSplashViewController setIsSnapshotViewController:YES]; - UIViewController *snapshotDisplayController; - if (self.appearance.splashShouldEmbedInNavigationController) { - snapshotDisplayController = [snapshotSplashViewController ventouchlock_embeddedInNavigationController]; - } - else { - snapshotDisplayController = snapshotSplashViewController; - } - [snapshotDisplayController loadView]; - [snapshotDisplayController viewDidLoad]; - snapshotDisplayController.view.frame = mainWindow.bounds; - self.snapshotView = snapshotDisplayController.view; - [mainWindow addSubview:self.snapshotView]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - [rootViewController presentViewController:displayController animated:NO completion:^{ - self.backgroundLockVisible = YES; - [splashViewController showUnlockAnimated:NO]; - }]; - }); + VENTouchLockEnterPasscodeViewController *splashViewController = [self enterPasscodeVC]; + UIWindow *mainWindow = [[UIApplication sharedApplication].windows firstObject]; + UIViewController *rootViewController = [UIViewController ventouchlock_topMostController]; + UIViewController *displayController; + if (self.appearance.splashShouldEmbedInNavigationController) { + displayController = [splashViewController ventouchlock_embeddedInNavigationController]; + } + else { + displayController = splashViewController; + } + + if (fromBackground) { + [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; + VENTouchLockEnterPasscodeViewController *snapshotSplashViewController = [[VENTouchLockEnterPasscodeViewController alloc] init]; + snapshotSplashViewController.snapshotViewController = YES; + UIViewController *snapshotDisplayController; + if (self.appearance.splashShouldEmbedInNavigationController) { + snapshotDisplayController = [snapshotSplashViewController ventouchlock_embeddedInNavigationController]; + } + else { + snapshotDisplayController = snapshotSplashViewController; } + [snapshotDisplayController loadView]; + [snapshotDisplayController viewDidLoad]; + snapshotDisplayController.view.frame = mainWindow.bounds; + self.snapshotView = snapshotDisplayController.view; + [mainWindow addSubview:self.snapshotView]; } + dispatch_async(dispatch_get_main_queue(), ^{ + [rootViewController presentViewController:displayController animated:NO completion:^{ + self.backgroundLockVisible = YES; + if ([[self class] shouldUseTouchID]) { + [self showTouchID]; + } + }]; + }); } +- (VENTouchLockEnterPasscodeViewController *)enterPasscodeVC +{ + VENTouchLockEnterPasscodeViewController *enterPasscodeVC = [[VENTouchLockEnterPasscodeViewController alloc] init]; + enterPasscodeVC.didFinishWithResult = ^(BOOL success) { + self.backgroundLockVisible = NO; + if (self.didFinishWithResult) { + self.didFinishWithResult(success); + } + }; + return enterPasscodeVC; +} +// ^ SYMPLE: Customized to use completion block specified by client code #pragma mark - NSNotifications @@ -216,6 +254,7 @@ - (void)applicationDidFinishLaunching:(NSNotification *)notification - (void)applicationDidEnterBackground:(NSNotification *)notification { if ([self isPasscodeSet] && !self.backgroundLockVisible) { + [[UIApplication sharedApplication] ignoreSnapshotOnNextApplicationLaunch]; [self lockFromBackground:YES]; } } diff --git a/VENTouchLock/Views/VENTouchLockPasscodeView.h b/VENTouchLock/Views/VENTouchLockPasscodeView.h index 13bc56c..96e6fb8 100644 --- a/VENTouchLock/Views/VENTouchLockPasscodeView.h +++ b/VENTouchLock/Views/VENTouchLockPasscodeView.h @@ -22,6 +22,17 @@ */ @property (strong, nonatomic) UIColor *characterColor; +/** + * Default is YES + */ +@property (nonatomic) BOOL hideTouchIDButton; + +/** + * Callback when Touch ID button is pressed + */ +@property (nonatomic, copy) void (^touchIDButtonPressed)(UIButton *button); +- (void)setTouchIDButtonPressed:(void (^)(UIButton *button))touchIDButtonPressed; + /** Creates a passcode view controller with the given title and frame. */ diff --git a/VENTouchLock/Views/VENTouchLockPasscodeView.m b/VENTouchLock/Views/VENTouchLockPasscodeView.m index 9cf382e..241f7dc 100644 --- a/VENTouchLock/Views/VENTouchLockPasscodeView.m +++ b/VENTouchLock/Views/VENTouchLockPasscodeView.m @@ -10,6 +10,8 @@ @interface VENTouchLockPasscodeView () @property (weak, nonatomic) IBOutlet VENTouchLockPasscodeCharacterView *thirdCharacter; @property (weak, nonatomic) IBOutlet VENTouchLockPasscodeCharacterView *fourthCharacter; +@property (nonatomic, strong) IBOutlet UIButton *touchIDButton; + @end @implementation VENTouchLockPasscodeView @@ -31,6 +33,8 @@ - (instancetype)initWithTitle:(NSString *)title frame:(CGRect)frame titleColor:( for (VENTouchLockPasscodeCharacterView *characterView in _characters) { characterView.fillColor = characterColor; } + + self.hideTouchIDButton = YES; } return self; } @@ -95,4 +99,19 @@ - (void)setTitleColor:(UIColor *)titleColor self.titleLabel.textColor = titleColor; } +- (void)setHideTouchIDButton:(BOOL)hideTouchIDButton +{ + _hideTouchIDButton = hideTouchIDButton; + self.touchIDButton.hidden = hideTouchIDButton; +} + +#pragma mark - Button actions + +- (IBAction)touchIDButtonPressed:(id)sender +{ + if (self.touchIDButtonPressed) { + _touchIDButtonPressed(sender); + } +} + @end \ No newline at end of file diff --git a/VENTouchLock/Views/VENTouchLockPasscodeView.xib b/VENTouchLock/Views/VENTouchLockPasscodeView.xib index ec019f9..ed939c6 100644 --- a/VENTouchLock/Views/VENTouchLockPasscodeView.xib +++ b/VENTouchLock/Views/VENTouchLockPasscodeView.xib @@ -1,7 +1,7 @@ - + - + @@ -11,7 +11,7 @@ - + @@ -37,16 +37,38 @@ + - + + + @@ -57,15 +79,13 @@ + - - - - +