diff --git a/.DS_Store b/.DS_Store index 17cad49..46eccd7 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bd1cdd0..ef55b2b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,15 +3,15 @@ name: Test on: pull_request jobs: test: - runs-on: macOS-latest + runs-on: macos-latest strategy: matrix: - destination: ['platform=iOS Simulator,OS=13.7,name=iPhone 11'] + destination: ['platform=iOS Simulator,OS=14.0,name=iPhone 11 Pro Max'] steps: - name: Checkout uses: actions/checkout@master - - name: Force XCode 11.7 - run: sudo xcode-select -switch /Applications/Xcode_11.7.app + - name: Force XCode 12 + run: sudo xcode-select -switch /Applications/Xcode_12.app - name: Install Dependences run: | cd Example diff --git a/Cotter.podspec b/Cotter.podspec index 6a84aa8..92710f3 100644 --- a/Cotter.podspec +++ b/Cotter.podspec @@ -12,40 +12,33 @@ Pod::Spec.new do |s| s.summary = 'Cotter is the client SDK for Cotter authentication services' s.swift_versions = '5.0' -# This description is used to generate tags and improve search results. -# * Think: What does it do? Why did you write it? What is the focus? -# * Try to keep it short, snappy and to the point. -# * Write the description between the DESC delimiters below. -# * Finally, don't worry about the indent, CocoaPods strips it! - s.description = <<-DESC CotterIOS simplifies client's integration with Cotter. It is an SDK that provides necessary pages and API services that connects your application to Cotter authentication services. DESC s.homepage = 'https://github.com/cotterapp/ios-sdk.git' - # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' s.license = { :type => 'BSD', :file => 'LICENSE' } s.author = { 'Cotter Team' => 'team@cotter.app' } s.source = { :git => 'https://github.com/cotterapp/ios-sdk.git', :tag => s.version.to_s } - # s.social_media_url = 'https://twitter.com/' s.platform = :ios s.ios.deployment_target = '10.0' s.source_files = 'Source/**/*.swift' s.resource_bundles = { - 'Cotter' => ['Source/**/*.{png,storyboard,lproj,xib,xcassets}'] + 'Assets' => ['Source/**/*.{png,storyboard,lproj,xib,xcassets}'] } - # s.public_header_files = 'Pod/Classes/**/*.h' s.static_framework = true s.frameworks = 'UIKit' s.dependency 'TTGSnackbar', '1.10.3' - s.dependency 'OneSignal', '2.15.3' + s.dependency 'OneSignal', '~> 3.0' s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' } s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' } -# s.test_spec 'Tests' do |test_spec| -# test_spec.source_files = 'Example/Tests/**/*.{swift}' -# end + s.test_spec 'Tests' do |test_spec| + test_spec.requires_app_host = true + test_spec.source_files = 'Example/Tests/Cases/{Services,Models}/*.{swift}' + test_spec.dependency 'Nimble', '~> 8.0' + end end diff --git a/Cotter/0.0.1/CotterIOS.podspec b/Cotter/0.0.1/CotterIOS.podspec deleted file mode 100644 index ddd4d0e..0000000 --- a/Cotter/0.0.1/CotterIOS.podspec +++ /dev/null @@ -1,43 +0,0 @@ -# -# Be sure to run `pod lib lint CotterIOS.podspec' to ensure this is a -# valid spec before submitting. -# -# Any lines starting with a # are optional, but their use is encouraged -# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html -# - -Pod::Spec.new do |s| - s.name = 'CotterIOS' - s.version = '0.0.1' - s.summary = 'CotterIOS is the client SDK for Cotter authentication services' - s.swift_versions = '5.0' - -# This description is used to generate tags and improve search results. -# * Think: What does it do? Why did you write it? What is the focus? -# * Try to keep it short, snappy and to the point. -# * Write the description between the DESC delimiters below. -# * Finally, don't worry about the indent, CocoaPods strips it! - - s.description = <<-DESC -CotterIOS simplifies client's integration with Cotter. It is an SDK that provides necessary pages and API services that connects your application to Cotter authentication services. - DESC - - s.homepage = 'https://gitlab.com/govest/cotter/ios' - # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' - s.license = { :type => 'MIT', :file => 'LICENSE' } - s.author = { 'Cotter Team' => 'team@cotter.app' } - s.source = { :git => 'https://gitlab.com/govest/cotter/ios.git', :tag => s.version.to_s } - # s.social_media_url = 'https://twitter.com/' - - s.ios.deployment_target = '13.0' - - s.source_files = 'CotterIOS/Classes/**/*' - - s.resource_bundles = { - 'CotterIOS' => ['Source/**/*.{png,storyboard,lproj}'] - } - - # s.public_header_files = 'Pod/Classes/**/*.h' - s.frameworks = 'UIKit' -# s.dependency 'Alamofire', '~> 5.0.0-rc.3' -end diff --git a/Cotter/0.0.2/CotterIOS.podspec b/Cotter/0.0.2/CotterIOS.podspec deleted file mode 100644 index 556a20b..0000000 --- a/Cotter/0.0.2/CotterIOS.podspec +++ /dev/null @@ -1,43 +0,0 @@ -# -# Be sure to run `pod lib lint CotterIOS.podspec' to ensure this is a -# valid spec before submitting. -# -# Any lines starting with a # are optional, but their use is encouraged -# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html -# - -Pod::Spec.new do |s| - s.name = 'CotterIOS' - s.version = '0.0.2' - s.summary = 'CotterIOS is the client SDK for Cotter authentication services' - s.swift_versions = '5.0' - -# This description is used to generate tags and improve search results. -# * Think: What does it do? Why did you write it? What is the focus? -# * Try to keep it short, snappy and to the point. -# * Write the description between the DESC delimiters below. -# * Finally, don't worry about the indent, CocoaPods strips it! - - s.description = <<-DESC -CotterIOS simplifies client's integration with Cotter. It is an SDK that provides necessary pages and API services that connects your application to Cotter authentication services. - DESC - - s.homepage = 'https://gitlab.com/govest/cotter/ios' - # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' - s.license = { :type => 'MIT', :file => 'LICENSE' } - s.author = { 'Cotter Team' => 'team@cotter.app' } - s.source = { :git => 'https://gitlab.com/govest/cotter/ios.git', :tag => s.version.to_s } - # s.social_media_url = 'https://twitter.com/' - - s.ios.deployment_target = '13.0' - - s.source_files = 'Source/**/*' - - s.resource_bundles = { - 'CotterIOS' => ['Source/**/*.{png,storyboard,lproj}'] - } - - # s.public_header_files = 'Pod/Classes/**/*.h' - s.frameworks = 'UIKit' -# s.dependency 'Alamofire', '~> 5.0.0-rc.3' -end diff --git a/Cotter/Assets/.gitkeep b/Cotter/Assets/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/Cotter/Classes/.gitkeep b/Cotter/Classes/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/Cotter/Classes/ReplaceMe.swift b/Cotter/Classes/ReplaceMe.swift deleted file mode 100644 index e69de29..0000000 diff --git a/Example/CotterIOS.xcodeproj/project.pbxproj b/Example/CotterIOS.xcodeproj/project.pbxproj index ec6483f..536c4fd 100644 --- a/Example/CotterIOS.xcodeproj/project.pbxproj +++ b/Example/CotterIOS.xcodeproj/project.pbxproj @@ -16,21 +16,11 @@ 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; 6C0AD45B24378E5200D59998 /* Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C0AD45A24378E5200D59998 /* Environment.swift */; }; 6C638BFE2468E8890089CE30 /* APIServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C638BFD2468E8890089CE30 /* APIServiceTests.swift */; }; - 6C7AAAB8245109E6005A10F8 /* PINFinalViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAAB7245109E6005A10F8 /* PINFinalViewControllerTests.swift */; }; - 6C7AAABA24510F76005A10F8 /* PINViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAAB924510F76005A10F8 /* PINViewControllerTests.swift */; }; - 6C7AAABC24510F93005A10F8 /* PINConfirmViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAABB24510F93005A10F8 /* PINConfirmViewControllerTests.swift */; }; 6C7AAABE24511525005A10F8 /* UserInfoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAABD24511525005A10F8 /* UserInfoTests.swift */; }; 6C7AAAC024511543005A10F8 /* CotterImagesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAABF24511543005A10F8 /* CotterImagesTests.swift */; }; 6C7AAAC224511574005A10F8 /* CotterStringsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAAC124511574005A10F8 /* CotterStringsTests.swift */; }; 6C7AAAC424511592005A10F8 /* ImageObjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAAC324511592005A10F8 /* ImageObjectTests.swift */; }; 6C7AAAC6245115B7005A10F8 /* LanguageObjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAAC5245115B7005A10F8 /* LanguageObjectTests.swift */; }; - 6C7AAAC824523633005A10F8 /* TransactionPINViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAAC724523633005A10F8 /* TransactionPINViewControllerTests.swift */; }; - 6C7AAACA24524829005A10F8 /* ResetPINViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAAC924524829005A10F8 /* ResetPINViewControllerTests.swift */; }; - 6C7AAACC24525330005A10F8 /* ResetNewPINViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAACB24525330005A10F8 /* ResetNewPINViewControllerTests.swift */; }; - 6C7AAACE24525928005A10F8 /* ResetConfirmPINViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAACD24525928005A10F8 /* ResetConfirmPINViewControllerTests.swift */; }; - 6C7AAAD224528D48005A10F8 /* UpdatePINViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAAD124528D48005A10F8 /* UpdatePINViewControllerTests.swift */; }; - 6C7AAAD424533EAC005A10F8 /* UpdateCreateNewPINViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAAD324533EAC005A10F8 /* UpdateCreateNewPINViewControllerTests.swift */; }; - 6C7AAAD624534347005A10F8 /* UpdateConfirmNewPINViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AAAD524534347005A10F8 /* UpdateConfirmNewPINViewControllerTests.swift */; }; 6C7AABA32468A1BD005A10F8 /* APIClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7AABA22468A1BD005A10F8 /* APIClientTests.swift */; }; 85292E4223EC21CB008363AB /* CryptoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85292E4123EC21CB008363AB /* CryptoViewController.swift */; }; 8594181023F55A3F00B4DA6D /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8594180F23F55A3F00B4DA6D /* LoginViewController.swift */; }; @@ -520,11 +510,11 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-CotterIOS_Example/Pods-CotterIOS_Example-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/Cotter/Cotter.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/Cotter/Assets.bundle", ); name = "[CP] Copy Pods Resources"; outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Cotter.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Assets.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -586,24 +576,14 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6C7AAAD424533EAC005A10F8 /* UpdateCreateNewPINViewControllerTests.swift in Sources */, 6C7AAAC024511543005A10F8 /* CotterImagesTests.swift in Sources */, 6C638BFE2468E8890089CE30 /* APIServiceTests.swift in Sources */, - 6C7AAACC24525330005A10F8 /* ResetNewPINViewControllerTests.swift in Sources */, 6C7AAAC424511592005A10F8 /* ImageObjectTests.swift in Sources */, - 6C7AAAB8245109E6005A10F8 /* PINFinalViewControllerTests.swift in Sources */, - 6C7AAACA24524829005A10F8 /* ResetPINViewControllerTests.swift in Sources */, 6C7AAAC224511574005A10F8 /* CotterStringsTests.swift in Sources */, - 6C7AAABA24510F76005A10F8 /* PINViewControllerTests.swift in Sources */, 6C7AAABE24511525005A10F8 /* UserInfoTests.swift in Sources */, - 6C7AAABC24510F93005A10F8 /* PINConfirmViewControllerTests.swift in Sources */, 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, - 6C7AAAD224528D48005A10F8 /* UpdatePINViewControllerTests.swift in Sources */, - 6C7AAAD624534347005A10F8 /* UpdateConfirmNewPINViewControllerTests.swift in Sources */, 6C7AAAC6245115B7005A10F8 /* LanguageObjectTests.swift in Sources */, 6C7AABA32468A1BD005A10F8 /* APIClientTests.swift in Sources */, - 6C7AAAC824523633005A10F8 /* TransactionPINViewControllerTests.swift in Sources */, - 6C7AAACE24525928005A10F8 /* ResetConfirmPINViewControllerTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Example/CotterIOS.xcodeproj/xcshareddata/xcschemes/Cotter.xcscheme b/Example/CotterIOS.xcodeproj/xcshareddata/xcschemes/Cotter.xcscheme index 2c48661..37d1b70 100644 --- a/Example/CotterIOS.xcodeproj/xcshareddata/xcschemes/Cotter.xcscheme +++ b/Example/CotterIOS.xcodeproj/xcshareddata/xcschemes/Cotter.xcscheme @@ -88,11 +88,11 @@ + isEnabled = "NO"> diff --git a/Example/CotterIOS/AppDelegate.swift b/Example/CotterIOS/AppDelegate.swift index 220643b..f5b8c7b 100644 --- a/Example/CotterIOS/AppDelegate.swift +++ b/Example/CotterIOS/AppDelegate.swift @@ -72,7 +72,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD // custom coloring let color = ColorSchemeObject(primary: CotterColor.purple, accent: CotterColor.orange) - + Cotter.configureWithLaunchOptions( launchOptions: launchOptions, apiSecretKey: apiSecretKey, @@ -80,7 +80,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD configuration: [ "colors": color, "images": img, - + // Other configuration // "base_url": "http://192.168.86.33:1234/api/v0", // "passwordless_base_url": "https://s.js.cotter.app/app", @@ -88,7 +88,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD // "fonts": customFont, ] ) - + // Granting user permission using notification center UNUserNotificationCenter.current() // 1 .requestAuthorization(options: [.alert, .sound, .badge]) { // 2 diff --git a/Example/Podfile b/Example/Podfile index e47ec7b..2f3e83a 100644 --- a/Example/Podfile +++ b/Example/Podfile @@ -1,11 +1,10 @@ # Comment use_frameworks! to accomodate for iOS 13.3.1 devices use_frameworks! -# use_modular_headers! target 'CotterIOS_Example' do pod 'TweeTextField' pod 'TTGSnackbar', '1.10.3' - pod 'OneSignal', '2.15.3' + pod 'OneSignal', '~> 3.0' pod 'Cotter', :path => '../' target 'CotterIOS_Tests' do diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 42a2963..5283ccd 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,9 +1,9 @@ PODS: - - Cotter (1.5.12): - - OneSignal (= 2.15.3) + - Cotter (1.5.20): + - OneSignal (~> 3.0) - TTGSnackbar (= 1.10.3) - Nimble (8.1.2) - - OneSignal (2.15.3) + - OneSignal (3.0.0) - Sourcery (1.0.0) - TTGSnackbar (1.10.3) - TweeTextField (1.6.3) @@ -11,7 +11,7 @@ PODS: DEPENDENCIES: - Cotter (from `../`) - Nimble (~> 8.0) - - OneSignal (= 2.15.3) + - OneSignal (~> 3.0) - Sourcery - TTGSnackbar (= 1.10.3) - TweeTextField @@ -29,13 +29,13 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - Cotter: ee8c6085e39012471e88a5b46434dea1da5206f6 + Cotter: 1a7ef5bb803abc2d4072d377eea8caec3785d1fb Nimble: 3864815b4703c7ebffba875973c70e854489fbae - OneSignal: d85b81aa313ed8040522b884f556267883d652c2 + OneSignal: e291067823e1f35d57bcafafc7327d2b514ae69d Sourcery: 928a146ea9b777fa64b0c6ce915c4128b4488cff TTGSnackbar: 97c033600de8a9c8f4a093f25a08543a03946bcc TweeTextField: 47bf8e7f0433364a7f7e119c45e7f278ea50eb62 -PODFILE CHECKSUM: f8cf607b1a98df9ed743bc77a368381b23ef2226 +PODFILE CHECKSUM: 2023634113f547a5a75213e1a16f47c73a9b3d7f COCOAPODS: 1.9.3 diff --git a/Example/Pods/Local Podspecs/Cotter.podspec.json b/Example/Pods/Local Podspecs/Cotter.podspec.json index ae3f7e4..e95c11a 100644 --- a/Example/Pods/Local Podspecs/Cotter.podspec.json +++ b/Example/Pods/Local Podspecs/Cotter.podspec.json @@ -1,6 +1,6 @@ { "name": "Cotter", - "version": "1.5.12", + "version": "1.5.20", "summary": "Cotter is the client SDK for Cotter authentication services", "swift_versions": "5.0", "description": "CotterIOS simplifies client's integration with Cotter. It is an SDK that provides necessary pages and API services that connects your application to Cotter authentication services.", @@ -14,15 +14,15 @@ }, "source": { "git": "https://github.com/cotterapp/ios-sdk.git", - "tag": "1.5.12" + "tag": "1.5.20" }, "platforms": { "ios": "10.0" }, "source_files": "Source/**/*.swift", "resource_bundles": { - "Cotter": [ - "Source/**/*.{png,storyboard,lproj,xib}" + "Assets": [ + "Source/**/*.{png,storyboard,lproj,xib,xcassets}" ] }, "static_framework": true, @@ -32,7 +32,7 @@ "1.10.3" ], "OneSignal": [ - "2.15.3" + "~> 3.0" ] }, "pod_target_xcconfig": { @@ -41,5 +41,18 @@ "user_target_xcconfig": { "EXCLUDED_ARCHS[sdk=iphonesimulator*]": "arm64" }, + "testspecs": [ + { + "name": "Tests", + "test_type": "unit", + "requires_app_host": true, + "source_files": "Example/Tests/Cases/{Services,Models}/*.{swift}", + "dependencies": { + "Nimble": [ + "~> 8.0" + ] + } + } + ], "swift_version": "5.0" } diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 42a2963..5283ccd 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,9 +1,9 @@ PODS: - - Cotter (1.5.12): - - OneSignal (= 2.15.3) + - Cotter (1.5.20): + - OneSignal (~> 3.0) - TTGSnackbar (= 1.10.3) - Nimble (8.1.2) - - OneSignal (2.15.3) + - OneSignal (3.0.0) - Sourcery (1.0.0) - TTGSnackbar (1.10.3) - TweeTextField (1.6.3) @@ -11,7 +11,7 @@ PODS: DEPENDENCIES: - Cotter (from `../`) - Nimble (~> 8.0) - - OneSignal (= 2.15.3) + - OneSignal (~> 3.0) - Sourcery - TTGSnackbar (= 1.10.3) - TweeTextField @@ -29,13 +29,13 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - Cotter: ee8c6085e39012471e88a5b46434dea1da5206f6 + Cotter: 1a7ef5bb803abc2d4072d377eea8caec3785d1fb Nimble: 3864815b4703c7ebffba875973c70e854489fbae - OneSignal: d85b81aa313ed8040522b884f556267883d652c2 + OneSignal: e291067823e1f35d57bcafafc7327d2b514ae69d Sourcery: 928a146ea9b777fa64b0c6ce915c4128b4488cff TTGSnackbar: 97c033600de8a9c8f4a093f25a08543a03946bcc TweeTextField: 47bf8e7f0433364a7f7e119c45e7f278ea50eb62 -PODFILE CHECKSUM: f8cf607b1a98df9ed743bc77a368381b23ef2226 +PODFILE CHECKSUM: 2023634113f547a5a75213e1a16f47c73a9b3d7f COCOAPODS: 1.9.3 diff --git a/Example/Pods/OneSignal/README.md b/Example/Pods/OneSignal/README.md index ba7298e..6020b7c 100644 --- a/Example/Pods/OneSignal/README.md +++ b/Example/Pods/OneSignal/README.md @@ -26,4 +26,4 @@ For account issues and support please contact OneSignal support from the [OneSig #### Supports: * Swift and Objective-C Projects -* Supports iOS 7 to iOS 13 +* Supports iOS 9 to iOS 13 diff --git a/Example/Pods/OneSignal/iOS_SDK/OneSignalSDK/Framework/OneSignal.framework/Versions/A/Headers/OneSignal.h b/Example/Pods/OneSignal/iOS_SDK/OneSignalSDK/Framework/OneSignal.framework/Versions/A/Headers/OneSignal.h index 8bed5da..82a5298 100755 --- a/Example/Pods/OneSignal/iOS_SDK/OneSignalSDK/Framework/OneSignal.framework/Versions/A/Headers/OneSignal.h +++ b/Example/Pods/OneSignal/iOS_SDK/OneSignalSDK/Framework/OneSignal.framework/Versions/A/Headers/OneSignal.h @@ -54,53 +54,41 @@ typedef NS_ENUM(NSUInteger, OSNotificationActionType) { OSNotificationActionTypeActionTaken }; -/* The way a notification was displayed to the user */ -typedef NS_ENUM(NSUInteger, OSNotificationDisplayType) { - /*Notification is silent, or app is in focus but InAppAlertNotifications are disabled*/ - OSNotificationDisplayTypeNone, - - /*Default UIAlertController display*/ - OSNotificationDisplayTypeInAppAlert, - - /*iOS native notification display*/ - OSNotificationDisplayTypeNotification -}; - @interface OSNotificationAction : NSObject /* The type of the notification action */ @property(readonly)OSNotificationActionType type; -/* The ID associated with the button tapped. NULL when the actionType is NotificationTapped or InAppAlertClosed */ -@property(readonly)NSString* actionID; +/* The ID associated with the button tapped. NULL when the actionType is NotificationTapped */ +@property(readonly, nullable)NSString* actionId; @end -/* Notification Payload Received Object */ -@interface OSNotificationPayload : NSObject +/* OneSignal OSNotification */ +@interface OSNotification : NSObject /* Unique Message Identifier */ -@property(readonly)NSString* notificationID; +@property(readonly, nullable)NSString* notificationId; /* Unique Template Identifier */ -@property(readonly)NSString* templateID; +@property(readonly, nullable)NSString* templateId; /* Name of Template */ -@property(readonly)NSString* templateName; +@property(readonly, nullable)NSString* templateName; -/* True when the key content-available is set to 1 in the aps payload. +/* True when the key content-available is set to 1 in the apns payload. content-available is used to wake your app when the payload is received. See Apple's documenation for more details. https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623013-application */ @property(readonly)BOOL contentAvailable; -/* True when the key mutable-content is set to 1 in the aps payload. +/* True when the key mutable-content is set to 1 in the apns payload. mutable-content is used to wake your Notification Service Extension to modify a notification. See Apple's documenation for more details. https://developer.apple.com/documentation/usernotifications/unnotificationserviceextension */ -@property(readonly)BOOL mutableContent; +@property(readonly, getter=hasMutableContent)BOOL mutableContent; /* Notification category key previously registered to display with. @@ -108,84 +96,63 @@ typedef NS_ENUM(NSUInteger, OSNotificationDisplayType) { See Apple's documenation for more details. https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/SupportingNotificationsinYourApp.html#//apple_ref/doc/uid/TP40008194-CH4-SW26 */ -@property(readonly)NSString* category; +@property(readonly, nullable)NSString* category; /* The badge assigned to the application icon */ -@property(readonly)NSUInteger badge; +@property(readonly)NSInteger badge; @property(readonly)NSInteger badgeIncrement; /* The sound parameter passed to the notification By default set to UILocalNotificationDefaultSoundName */ -@property(readonly)NSString* sound; +@property(readonly, nullable)NSString* sound; /* Main push content */ -@property(readonly)NSString* title; -@property(readonly)NSString* subtitle; -@property(readonly)NSString* body; +@property(readonly, nullable)NSString* title; +@property(readonly, nullable)NSString* subtitle; +@property(readonly, nullable)NSString* body; /* Web address to launch within the app via a WKWebView */ -@property(readonly)NSString* launchURL; +@property(readonly, nullable)NSString* launchURL; /* Additional key value properties set within the payload */ -@property(readonly)NSDictionary* additionalData; +@property(readonly, nullable)NSDictionary* additionalData; /* iOS 10+ : Attachments sent as part of the rich notification */ -@property(readonly)NSDictionary* attachments; +@property(readonly, nullable)NSDictionary* attachments; /* Action buttons passed */ -@property(readonly)NSArray *actionButtons; +@property(readonly, nullable)NSArray *actionButtons; /* Holds the original payload received Keep the raw value for users that would like to root the push */ -@property(readonly)NSDictionary *rawPayload; +@property(readonly, nonnull)NSDictionary *rawPayload; /* iOS 10+ : Groups notifications into threads */ -@property(readonly)NSString *threadId; +@property(readonly, nullable)NSString *threadId; -/* Parses an APS push payload into a OSNotificationPayload object. +/* Parses an APNS push payload into a OSNotification object. Useful to call from your NotificationServiceExtension when the didReceiveNotificationRequest:withContentHandler: method fires. */ + (instancetype)parseWithApns:(nonnull NSDictionary*)message; -@end - -/* OneSignal OSNotification */ -@interface OSNotification : NSObject - -/* Notification Payload */ -@property(readonly)OSNotificationPayload* payload; - -/* Display method of the notification */ -@property(readonly)OSNotificationDisplayType displayType; - -/* Set to true when the user was able to see the notification and reacted to it - Set to false when app is in focus and in-app alerts are disabled, or the remote notification is silent. */ -@property(readonly, getter=wasShown)BOOL shown; - -/* Set to true if the app was in focus when the notification */ -@property(readonly, getter=wasAppInFocus)BOOL isAppInFocus; - -/* Set to true when the received notification is silent - Silent means there is no alert, sound, or badge payload in the aps dictionary - requires remote-notification within UIBackgroundModes array of the Info.plist */ -@property(readonly, getter=isSilentNotification)BOOL silentNotification; - -/* iOS 10+: Indicates whether or not the received notification has mutableContent : 1 assigned to its payload - Used for UNNotificationServiceExtension to launch extension. */ -@property(readonly, getter=hasMutableContent)BOOL mutableContent; +/* Convert object into a custom Dictionary / JSON Object */ +- (NSDictionary* _Nonnull)jsonRepresentation; /* Convert object into an NSString that can be convertible into a custom Dictionary / JSON Object */ -- (NSString*)stringify; +- (NSString* _Nonnull)stringify; @end @interface OSNotificationOpenedResult : NSObject -@property(readonly)OSNotification* notification; -@property(readonly)OSNotificationAction *action; +@property(readonly, nonnull)OSNotification* notification; +@property(readonly, nonnull)OSNotificationAction *action; /* Convert object into an NSString that can be convertible into a custom Dictionary / JSON Object */ -- (NSString*)stringify; +- (NSString* _Nonnull)stringify; + +// Convert the class into a NSDictionary +- (NSDictionary *_Nonnull)jsonRepresentation; @end; @@ -240,8 +207,10 @@ typedef NS_ENUM(NSUInteger, OSNotificationDisplayType) { - (void)handleMessageAction:(OSInAppMessageAction * _Nonnull)action NS_SWIFT_NAME(handleMessageAction(action:)); @end +// Pass in nil means a notification will not display +typedef void (^OSNotificationDisplayResponse)(OSNotification* _Nullable notification); /* OneSignal Influence Types */ -typedef NS_ENUM(NSUInteger, Session) { +typedef NS_ENUM(NSUInteger, OSInfluenceType) { DIRECT, INDIRECT, UNATTRIBUTED, @@ -256,7 +225,7 @@ typedef NS_ENUM(NSUInteger, OSInfluenceChannel) { @interface OSOutcomeEvent : NSObject // Session enum (DIRECT, INDIRECT, UNATTRIBUTED, or DISABLED) to determine code route and request params -@property (nonatomic) Session session; +@property (nonatomic) OSInfluenceType session; // Notification ids for the current session @property (strong, nonatomic, nullable) NSArray *notificationIds; @@ -275,7 +244,6 @@ typedef NS_ENUM(NSUInteger, OSInfluenceChannel) { @end - typedef NS_ENUM(NSInteger, OSNotificationPermission) { // The user has not yet made a choice regarding whether your app can show notifications. OSNotificationPermissionNotDetermined = 0, @@ -287,7 +255,10 @@ typedef NS_ENUM(NSInteger, OSNotificationPermission) { OSNotificationPermissionAuthorized, // the application is only authorized to post Provisional notifications (direct to history) - OSNotificationPermissionProvisional + OSNotificationPermissionProvisional, + + // the application is authorized to send notifications for 8 hours. Only used by App Clips. + OSNotificationPermissionEphemeral }; // Permission Classes @@ -297,115 +268,107 @@ typedef NS_ENUM(NSInteger, OSNotificationPermission) { @property (readonly, nonatomic) BOOL hasPrompted; @property (readonly, nonatomic) BOOL providesAppNotificationSettings; @property (readonly, nonatomic) OSNotificationPermission status; -- (NSDictionary*)toDictionary; +- (NSDictionary* _Nonnull)toDictionary; @end @interface OSPermissionStateChanges : NSObject -@property (readonly) OSPermissionState* to; -@property (readonly) OSPermissionState* from; -- (NSDictionary*)toDictionary; - -@end +@property (readonly, nonnull) OSPermissionState* to; +@property (readonly, nonnull) OSPermissionState* from; +- (NSDictionary* _Nonnull)toDictionary; -@protocol OSPermissionObserver -- (void)onOSPermissionChanged:(OSPermissionStateChanges*)stateChanges; @end - // Subscription Classes @interface OSSubscriptionState : NSObject -@property (readonly, nonatomic) BOOL subscribed; // (yes only if userId, pushToken, and setSubscription exists / are true) -@property (readonly, nonatomic) BOOL userSubscriptionSetting; // returns setSubscription state. -@property (readonly, nonatomic) NSString* userId; // AKA OneSignal PlayerId -@property (readonly, nonatomic) NSString* pushToken; // AKA Apple Device Token -- (NSDictionary*)toDictionary; +@property (readonly, nonatomic) BOOL isSubscribed; // (yes only if userId, pushToken, and setSubscription exists / are true) +@property (readonly, nonatomic) BOOL isPushDisabled; // returns value of disablePush. +@property (readonly, nonatomic, nullable) NSString* userId; // AKA OneSignal PlayerId +@property (readonly, nonatomic, nullable) NSString* pushToken; // AKA Apple Device Token +- (NSDictionary* _Nonnull)toDictionary; @end - @interface OSEmailSubscriptionState : NSObject -@property (readonly, nonatomic) NSString* emailUserId; // The new Email user ID -@property (readonly, nonatomic) NSString *emailAddress; -@property (readonly, nonatomic) BOOL subscribed; -- (NSDictionary*)toDictionary; +@property (readonly, nonatomic, nullable) NSString* emailUserId; // The new Email user ID +@property (readonly, nonatomic, nullable) NSString *emailAddress; +@property (readonly, nonatomic) BOOL isSubscribed; +- (NSDictionary* _Nonnull)toDictionary; @end @interface OSSubscriptionStateChanges : NSObject -@property (readonly) OSSubscriptionState* to; -@property (readonly) OSSubscriptionState* from; -- (NSDictionary*)toDictionary; +@property (readonly, nonnull) OSSubscriptionState* to; +@property (readonly, nonnull) OSSubscriptionState* from; +- (NSDictionary* _Nonnull)toDictionary; @end @interface OSEmailSubscriptionStateChanges : NSObject -@property (readonly) OSEmailSubscriptionState* to; -@property (readonly) OSEmailSubscriptionState* from; -- (NSDictionary*)toDictionary; +@property (readonly, nonnull) OSEmailSubscriptionState* to; +@property (readonly, nonnull) OSEmailSubscriptionState* from; +- (NSDictionary* _Nonnull)toDictionary; @end @protocol OSSubscriptionObserver -- (void)onOSSubscriptionChanged:(OSSubscriptionStateChanges*)stateChanges; +- (void)onOSSubscriptionChanged:(OSSubscriptionStateChanges* _Nonnull)stateChanges; @end @protocol OSEmailSubscriptionObserver -- (void)onOSEmailSubscriptionChanged:(OSEmailSubscriptionStateChanges*)stateChanges; +- (void)onOSEmailSubscriptionChanged:(OSEmailSubscriptionStateChanges* _Nonnull)stateChanges; @end - - -// Permission+Subscription Classes -@interface OSPermissionSubscriptionState : NSObject - -@property (readonly) OSPermissionState* permissionStatus; -@property (readonly) OSSubscriptionState* subscriptionStatus; -@property (readonly) OSEmailSubscriptionState *emailSubscriptionStatus; -- (NSDictionary*)toDictionary; - +@protocol OSPermissionObserver +- (void)onOSPermissionChanged:(OSPermissionStateChanges* _Nonnull)stateChanges; @end -@interface OSDevice : NSObject +@interface OSDeviceState : NSObject /** * Get the app's notification permission * @return false if the user disabled notifications for the app, otherwise true */ -- (BOOL)isNotificationEnabled; +@property (readonly) BOOL hasNotificationPermission; /** * Get whether the user is subscribed to OneSignal notifications or not * @return false if the user is not subscribed to OneSignal notifications, otherwise true */ -- (BOOL)isUserSubscribed; +@property (readonly) BOOL isPushDisabled; /** * Get whether the user is subscribed * @return true if isNotificationEnabled, isUserSubscribed, getUserId and getPushToken are true, otherwise false */ -- (BOOL)isSubscribed; +@property (readonly) BOOL isSubscribed; /** * Get the user notification permision status * @return OSNotificationPermission */ -- (OSNotificationPermission)getNotificationPermissionStatus; +@property (readonly) OSNotificationPermission notificationPermissionStatus; /** * Get user id from registration (player id) - * @return user id if user is registered, otherwise false + * @return user id if user is registered, otherwise null */ -- (NSString*)getUserId; +@property (readonly, nullable) NSString* userId; /** * Get apple deice push token * @return push token if available, otherwise null */ -- (NSString*)getPushToken; +@property (readonly, nullable) NSString* pushToken; /** * Get the user email id * @return email id if user address was registered, otherwise null */ -- (NSString*)getEmailUserId; +@property (readonly, nullable) NSString* emailUserId; /** * Get the user email * @return email address if set, otherwise null */ -- (NSString*)getEmailAddress; +@property (readonly, nullable) NSString* emailAddress; + +@property (readonly) BOOL isEmailSubscribed; + +// Convert the class into a NSDictionary +- (NSDictionary *_Nonnull)jsonRepresentation; + @end typedef void (^OSWebOpenURLResultBlock)(BOOL shouldOpen); @@ -414,157 +377,116 @@ typedef void (^OSWebOpenURLResultBlock)(BOOL shouldOpen); typedef void (^OSResultSuccessBlock)(NSDictionary* result); typedef void (^OSFailureBlock)(NSError* error); -/*Block for notifying availability of the User's ID and push token*/ -typedef void (^OSIdsAvailableBlock)(NSString* userId, NSString* pushToken); - -/*Block for handling the reception of a remote notification */ -typedef void (^OSHandleNotificationReceivedBlock)(OSNotification* notification); - -/*Block for handling a user reaction to a notification*/ -typedef void (^OSHandleNotificationActionBlock)(OSNotificationOpenedResult * result); - -/*Block for handling user click on an in app message*/ -typedef void (^OSHandleInAppMessageActionClickBlock)(OSInAppMessageAction* action); - /*Block for handling outcome event being sent successfully*/ typedef void (^OSSendOutcomeSuccess)(OSOutcomeEvent* outcome); -/*Dictionary of keys to pass alongside the init settings*/ - -/*Let OneSignal directly prompt for push notifications on init*/ -extern NSString * const kOSSettingsKeyAutoPrompt; - -/*Enable the default in-app alerts*/ -extern NSString * const kOSSettingsKeyInAppAlerts; - -/*Enable In-App display of Launch URLs*/ -extern NSString * const kOSSettingsKeyInAppLaunchURL; - -/*Prompt user yes/no to open URL's from push notifications*/ -extern NSString * const kOSSSettingsKeyPromptBeforeOpeningPushURL; - -/* iOS 10 + - Set notification's in-focus display option. - Value must be an OSNotificationDisplayType enum -*/ -extern NSString * const kOSSettingsKeyInFocusDisplayOption; - - -/* iOS 12 + - Used to determine if the app is able to present it's - own customized Notification Settings view -*/ -extern NSString * const kOSSettingsKeyProvidesAppNotificationSettings; - // ======= OneSignal Class Interface ========= @interface OneSignal : NSObject extern NSString* const ONESIGNAL_VERSION; -typedef NS_ENUM(NSUInteger, ONE_S_LOG_LEVEL) { - ONE_S_LL_NONE, ONE_S_LL_FATAL, ONE_S_LL_ERROR, ONE_S_LL_WARN, ONE_S_LL_INFO, ONE_S_LL_DEBUG, ONE_S_LL_VERBOSE -}; - ++ (NSString*)appId; ++ (NSString* _Nonnull)sdkVersionRaw; ++ (NSString* _Nonnull)sdkSemanticVersion; -/* - Initialize OneSignal. - Sends push token to OneSignal so you can later send notifications. - */ - -// - Initialization -+ (id)initWithLaunchOptions:(NSDictionary*)launchOptions appId:(NSString*)appId; -+ (id)initWithLaunchOptions:(NSDictionary*)launchOptions appId:(NSString*)appId handleNotificationAction:(OSHandleNotificationActionBlock)actionCallback; -+ (id)initWithLaunchOptions:(NSDictionary*)launchOptions appId:(NSString*)appId handleNotificationAction:(OSHandleNotificationActionBlock)actionCallback settings:(NSDictionary*)settings; -+ (id)initWithLaunchOptions:(NSDictionary*)launchOptions appId:(NSString*)appId handleNotificationReceived:(OSHandleNotificationReceivedBlock)receivedCallback handleNotificationAction:(OSHandleNotificationActionBlock)actionCallback settings:(NSDictionary*)settings; ++ (void)disablePush:(BOOL)disable; -// - Privacy -+ (void)consentGranted:(BOOL)granted; -+ (BOOL)requiresUserPrivacyConsent; // tells your application if privacy consent is still needed from the current user -+ (void)setRequiresUserPrivacyConsent:(BOOL)required; //used by wrapper SDK's to require user privacy consent +// Only used for wrapping SDKs, such as Unity, Cordova, Xamarin, etc. ++ (void)setMSDKType:(NSString* _Nonnull)type; -@property (class) OSNotificationDisplayType inFocusDisplayType; +#pragma mark Initialization ++ (void)setAppId:(NSString* _Nonnull)newAppId; ++ (void)initWithLaunchOptions:(NSDictionary* _Nullable)launchOptions; ++ (void)setLaunchURLsInApp:(BOOL)launchInApp; ++ (void)setProvidesNotificationSettingsView:(BOOL)providesView; -+ (NSString*)app_id; -+ (NSString*)sdk_version_raw; -+ (NSString*)sdk_semantic_version; +#pragma mark Logging +typedef NS_ENUM(NSUInteger, ONE_S_LOG_LEVEL) { + ONE_S_LL_NONE, + ONE_S_LL_FATAL, + ONE_S_LL_ERROR, + ONE_S_LL_WARN, + ONE_S_LL_INFO, + ONE_S_LL_DEBUG, + ONE_S_LL_VERBOSE +}; -// Only use if you set kOSSettingsKeyAutoPrompt to false -+ (void)registerForPushNotifications __deprecated_msg("Please use promptForPushNotificationsWithUserResponse instead."); -+ (void)promptForPushNotificationsWithUserResponse:(void(^)(BOOL accepted))completionHandler; -+ (void)promptForPushNotificationsWithUserResponse:(void (^)(BOOL accepted))completionHandler fallbackToSettings:(BOOL)fallback; ++ (void)setLogLevel:(ONE_S_LOG_LEVEL)logLevel visualLevel:(ONE_S_LOG_LEVEL)visualLogLevel; ++ (void)onesignalLog:(ONE_S_LOG_LEVEL)logLevel message:(NSString* _Nonnull)message; -// This method opens the iOS Settings app and navigates to the Push Notification Settings -// page for your app specifically -+ (void)presentAppSettings; -+ (void)registerForProvisionalAuthorization:(void(^)(BOOL accepted))completionHandler; +#pragma mark Prompt For Push +typedef void(^OSUserResponseBlock)(BOOL accepted); -// - Logging -+ (void)setLogLevel:(ONE_S_LOG_LEVEL)logLevel visualLevel:(ONE_S_LOG_LEVEL)visualLogLevel; -+ (void)onesignal_Log:(ONE_S_LOG_LEVEL)logLevel message:(NSString*)message; - -// - Tagging -+ (void)sendTag:(NSString*)key value:(NSString*)value onSuccess:(OSResultSuccessBlock)successBlock onFailure:(OSFailureBlock)failureBlock; -+ (void)sendTag:(NSString*)key value:(NSString*)value; -+ (void)sendTags:(NSDictionary*)keyValuePair onSuccess:(OSResultSuccessBlock)successBlock onFailure:(OSFailureBlock)failureBlock; -+ (void)sendTags:(NSDictionary*)keyValuePair; -+ (void)sendTagsWithJsonString:(NSString*)jsonString; -+ (void)getTags:(OSResultSuccessBlock)successBlock onFailure:(OSFailureBlock)failureBlock; -+ (void)getTags:(OSResultSuccessBlock)successBlock; -+ (void)deleteTag:(NSString*)key onSuccess:(OSResultSuccessBlock)successBlock onFailure:(OSFailureBlock)failureBlock; -+ (void)deleteTag:(NSString*)key; -+ (void)deleteTags:(NSArray*)keys onSuccess:(OSResultSuccessBlock)successBlock onFailure:(OSFailureBlock)failureBlock; -+ (void)deleteTags:(NSArray*)keys; -+ (void)deleteTagsWithJsonString:(NSString*)jsonString; -// Optional method that sends us the user's email as an anonymized hash so that we can better target and personalize notifications sent to that user across their devices. -// Sends as MD5 and SHA1 of the provided email -+ (void)syncHashedEmail:(NSString*)email __deprecated_msg("Please refer to our new Email methods/functionality such as setEmail(). This method will be removed in a future version of the OneSignal SDK"); - -// - Subscription and Permissions -+ (void)IdsAvailable:(OSIdsAvailableBlock)idsAvailableBlock __deprecated_msg("Please use getPermissionSubscriptionState or addSubscriptionObserver and addPermissionObserver instead."); - -+ (OSPermissionSubscriptionState*)getPermissionSubscriptionState; -+ (OSDevice*)getUserDevice; ++ (void)promptForPushNotificationsWithUserResponse:(OSUserResponseBlock)block; ++ (void)promptForPushNotificationsWithUserResponse:(OSUserResponseBlock)block fallbackToSettings:(BOOL)fallback; ++ (void)registerForProvisionalAuthorization:(OSUserResponseBlock)block; ++ (OSDeviceState*)getDeviceState; -+ (void)addPermissionObserver:(NSObject*)observer; -+ (void)removePermissionObserver:(NSObject*)observer; +#pragma mark Privacy Consent ++ (void)consentGranted:(BOOL)granted; +// Tells your application if privacy consent is still needed from the current user ++ (BOOL)requiresUserPrivacyConsent; ++ (void)setRequiresUserPrivacyConsent:(BOOL)required; -+ (void)addSubscriptionObserver:(NSObject*)observer; -+ (void)removeSubscriptionObserver:(NSObject*)observer; +#pragma mark Public Handlers -+ (void)addEmailSubscriptionObserver:(NSObject*)observer; -+ (void)removeEmailSubscriptionObserver:(NSObject*)observer; +// If the completion block is not called within 25 seconds of this block being called in notificationWillShowInForegroundHandler then the completion will be automatically fired. +typedef void (^OSNotificationWillShowInForegroundBlock)(OSNotification * _Nonnull notification, OSNotificationDisplayResponse _Nonnull completion); +typedef void (^OSNotificationOpenedBlock)(OSNotificationOpenedResult * _Nonnull result); +typedef void (^OSInAppMessageClickBlock)(OSInAppMessageAction * _Nonnull action); -+ (void)setSubscription:(BOOL)enable; -+ (BOOL)isInAppMessagingPaused; -+ (void)pauseInAppMessages:(BOOL)pause; ++ (void)setNotificationWillShowInForegroundHandler:(OSNotificationWillShowInForegroundBlock _Nullable)block; ++ (void)setNotificationOpenedHandler:(OSNotificationOpenedBlock _Nullable)block; ++ (void)setInAppMessageClickHandler:(OSInAppMessageClickBlock _Nullable)block; -// - Posting Notification -+ (void)postNotification:(NSDictionary*)jsonData; -+ (void)postNotification:(NSDictionary*)jsonData onSuccess:(OSResultSuccessBlock)successBlock onFailure:(OSFailureBlock)failureBlock; -+ (void)postNotificationWithJsonString:(NSString*)jsonData onSuccess:(OSResultSuccessBlock)successBlock onFailure:(OSFailureBlock)failureBlock; -+ (NSString*)parseNSErrorAsJsonString:(NSError*)error; +#pragma mark Post Notification ++ (void)postNotification:(NSDictionary* _Nonnull)jsonData; ++ (void)postNotification:(NSDictionary* _Nonnull)jsonData onSuccess:(OSResultSuccessBlock _Nullable)successBlock onFailure:(OSFailureBlock _Nullable)failureBlock; ++ (void)postNotificationWithJsonString:(NSString* _Nonnull)jsonData onSuccess:(OSResultSuccessBlock _Nullable)successBlock onFailure:(OSFailureBlock _Nullable)failureBlock; +#pragma mark Location // - Request and track user's location + (void)promptLocation; + (void)setLocationShared:(BOOL)enable; + (BOOL)isLocationShared; - -// Only used for wrapping SDKs, such as Unity, Cordova, Xamarin, etc. -+ (void)setMSDKType:(NSString*)type; - -+ (void)setInAppMessageClickHandler:(OSHandleInAppMessageActionClickBlock)delegate; - +#pragma mark NotificationService Extension // iOS 10 only // Process from Notification Service Extension. // Used for iOS Media Attachemtns and Action Buttons. -+ (UNMutableNotificationContent*)didReceiveNotificationExtensionRequest:(UNNotificationRequest*)request withMutableNotificationContent:(UNMutableNotificationContent*)replacementContent; -+ (UNMutableNotificationContent*)serviceExtensionTimeWillExpireRequest:(UNNotificationRequest*)request withMutableNotificationContent:(UNMutableNotificationContent*)replacementContent; ++ (UNMutableNotificationContent*)didReceiveNotificationExtensionRequest:(UNNotificationRequest* _Nonnull)request withMutableNotificationContent:(UNMutableNotificationContent* _Nullable)replacementContent; ++ (UNMutableNotificationContent*)serviceExtensionTimeWillExpireRequest:(UNNotificationRequest* _Nonnull)request withMutableNotificationContent:(UNMutableNotificationContent* _Nullable)replacementContent; + +#pragma mark Tags ++ (void)sendTag:(NSString* _Nonnull)key value:(NSString* _Nonnull)value onSuccess:(OSResultSuccessBlock _Nullable)successBlock onFailure:(OSFailureBlock _Nullable)failureBlock; ++ (void)sendTag:(NSString* _Nonnull)key value:(NSString* _Nonnull)value; ++ (void)sendTags:(NSDictionary* _Nonnull)keyValuePair onSuccess:(OSResultSuccessBlock _Nullable)successBlock onFailure:(OSFailureBlock _Nullable)failureBlock; ++ (void)sendTags:(NSDictionary* _Nonnull)keyValuePair; ++ (void)sendTagsWithJsonString:(NSString* _Nonnull)jsonString; ++ (void)getTags:(OSResultSuccessBlock _Nullable)successBlock onFailure:(OSFailureBlock _Nullable)failureBlock; ++ (void)getTags:(OSResultSuccessBlock _Nullable)successBlock; ++ (void)deleteTag:(NSString* _Nonnull)key onSuccess:(OSResultSuccessBlock _Nullable)successBlock onFailure:(OSFailureBlock _Nullable)failureBlock; ++ (void)deleteTag:(NSString* _Nonnull)key; ++ (void)deleteTags:(NSArray* _Nonnull)keys onSuccess:(OSResultSuccessBlock _Nullable)successBlock onFailure:(OSFailureBlock _Nullable)failureBlock; ++ (void)deleteTags:(NSArray *_Nonnull)keys; ++ (void)deleteTagsWithJsonString:(NSString* _Nonnull)jsonString; + +#pragma mark Permission, Subscription, and Email Observers +NS_ASSUME_NONNULL_BEGIN -// Email methods ++ (void)addPermissionObserver:(NSObject*)observer; ++ (void)removePermissionObserver:(NSObject*)observer; + ++ (void)addSubscriptionObserver:(NSObject*)observer; ++ (void)removeSubscriptionObserver:(NSObject*)observer; ++ (void)addEmailSubscriptionObserver:(NSObject*)observer; ++ (void)removeEmailSubscriptionObserver:(NSObject*)observer; +NS_ASSUME_NONNULL_END + +#pragma mark Email // Typedefs defining completion blocks for email & simultaneous HTTP requests -typedef void (^OSEmailFailureBlock)(NSError* error); +typedef void (^OSEmailFailureBlock)(NSError *error); typedef void (^OSEmailSuccessBlock)(); // Allows you to set the email for this user. @@ -583,16 +505,20 @@ typedef void (^OSEmailSuccessBlock)(); + (void)logoutEmailWithSuccess:(OSEmailSuccessBlock _Nullable)successBlock withFailure:(OSEmailFailureBlock _Nullable)failureBlock; -// External user id +#pragma mark External User Id // Typedefs defining completion blocks for updating the external user id -typedef void (^OSUpdateExternalUserIdBlock)(NSDictionary* results); +typedef void (^OSUpdateExternalUserIdFailureBlock)(NSError *error); +typedef void (^OSUpdateExternalUserIdSuccessBlock)(NSDictionary *results); + (void)setExternalUserId:(NSString * _Nonnull)externalId; -+ (void)setExternalUserId:(NSString * _Nonnull)externalId withCompletion:(OSUpdateExternalUserIdBlock _Nullable)completionBlock; ++ (void)setExternalUserId:(NSString * _Nonnull)externalId withSuccess:(OSUpdateExternalUserIdSuccessBlock _Nullable)successBlock withFailure:(OSUpdateExternalUserIdFailureBlock _Nullable)failureBlock; ++ (void)setExternalUserId:(NSString *)externalId withExternalIdAuthHashToken:(NSString *)hashToken withSuccess:(OSUpdateExternalUserIdSuccessBlock _Nullable)successBlock withFailure:(OSUpdateExternalUserIdFailureBlock _Nullable)failureBlock; + (void)removeExternalUserId; -+ (void)removeExternalUserId:(OSUpdateExternalUserIdBlock _Nullable)completionBlock; ++ (void)removeExternalUserId:(OSUpdateExternalUserIdSuccessBlock _Nullable)successBlock withFailure:(OSUpdateExternalUserIdFailureBlock _Nullable)failureBlock; -// In-App Messaging triggers +#pragma mark In-App Messaging ++ (BOOL)isInAppMessagingPaused; ++ (void)pauseInAppMessages:(BOOL)pause; + (void)addTrigger:(NSString * _Nonnull)key withValue:(id _Nonnull)value; + (void)addTriggers:(NSDictionary * _Nonnull)triggers; + (void)removeTriggerForKey:(NSString * _Nonnull)key; @@ -600,7 +526,7 @@ typedef void (^OSUpdateExternalUserIdBlock)(NSDictionary* results); + (NSDictionary * _Nonnull)getTriggers; + (id _Nullable)getTriggerValueForKey:(NSString * _Nonnull)key; -// Outcome Events +#pragma mark Outcomes + (void)sendOutcome:(NSString * _Nonnull)name; + (void)sendOutcome:(NSString * _Nonnull)name onSuccess:(OSSendOutcomeSuccess _Nullable)success; + (void)sendUniqueOutcome:(NSString * _Nonnull)name; diff --git a/Example/Pods/OneSignal/iOS_SDK/OneSignalSDK/Framework/OneSignal.framework/Versions/A/OneSignal b/Example/Pods/OneSignal/iOS_SDK/OneSignalSDK/Framework/OneSignal.framework/Versions/A/OneSignal index 42b6712..950ec01 100644 Binary files a/Example/Pods/OneSignal/iOS_SDK/OneSignalSDK/Framework/OneSignal.framework/Versions/A/OneSignal and b/Example/Pods/OneSignal/iOS_SDK/OneSignalSDK/Framework/OneSignal.framework/Versions/A/OneSignal differ diff --git a/Example/Pods/OneSignal/iOS_SDK/OneSignalSDK/Framework/OneSignal.framework/Versions/A/Resources/Info.plist b/Example/Pods/OneSignal/iOS_SDK/OneSignalSDK/Framework/OneSignal.framework/Versions/A/Resources/Info.plist index a57f66d..14bb67d 100644 Binary files a/Example/Pods/OneSignal/iOS_SDK/OneSignalSDK/Framework/OneSignal.framework/Versions/A/Resources/Info.plist and b/Example/Pods/OneSignal/iOS_SDK/OneSignalSDK/Framework/OneSignal.framework/Versions/A/Resources/Info.plist differ diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 21be4f8..906dbd9 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -9,13 +9,12 @@ /* Begin PBXAggregateTarget section */ 210EB05CEC7AD9C148F90F752DE74C48 /* OneSignal */ = { isa = PBXAggregateTarget; - buildConfigurationList = 87F91B97727723F85C3CA80BD211276F /* Build configuration list for PBXAggregateTarget "OneSignal" */; + buildConfigurationList = 443E15B43FD186C99A5C5225DEB0CAAC /* Build configuration list for PBXAggregateTarget "OneSignal" */; buildPhases = ( ); dependencies = ( ); name = OneSignal; - productName = OneSignal; }; 4D8229B0397AE8C2F7C11B3F9EFC9362 /* Sourcery */ = { isa = PBXAggregateTarget; @@ -25,241 +24,240 @@ dependencies = ( ); name = Sourcery; - productName = Sourcery; }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ 0091251C2EB004DB4B3090CFB827F8E0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; - 011411C60CFBBCA4382D141E7B1C0AA8 /* OAuthToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = 680C0148AA3AE130D448DEFB63CBB5BE /* OAuthToken.swift */; }; - 01626F85D0E0A1772AA9963EB3609446 /* CreatePendingEventRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 643509475A97F365F847AEA4148C5285 /* CreatePendingEventRequest.swift */; }; - 03D141D44DF252C62F5C924E7C41A503 /* UserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5014CD006C6C13D3E570C3EDEE5C3A08 /* UserInfo.swift */; }; - 043E05E350F907CB46F007EC0D279058 /* CrossButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E1277E6E4950601601EAB84FE591500 /* CrossButton.swift */; }; + 00964DB21AEA03F7622E89BCED8805AE /* RegisterTrustedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37156249E9193C7BB9452DACA79EA2B8 /* RegisterTrustedViewController.swift */; }; + 02C647F40D1FEC59FBE3641838BDD71F /* GetUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37433606BD1CC3D8F8BA5252C04381E0 /* GetUser.swift */; }; + 046BFCFDA70560A5CCE096732029CFF5 /* VerifyPINResetCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBF6BC3D014A2F8941D2B0C48E88081A /* VerifyPINResetCode.swift */; }; + 04FE0F5C94665DEE9B830BE3128F9D06 /* UserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B816388B5A800514CF7F2BE2BCFA01A /* UserInfo.swift */; }; 06F36216CFDCBCDBD2042E5AA33C5BEA /* Pods-CotterIOS_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CE12D24FD3D002C469ACDB238907772E /* Pods-CotterIOS_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 074156582B8258F37C8D65109607EA50 /* UpdateConfirmNewPINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFA501F23A049B54CAF9BE3119A5BA1E /* UpdateConfirmNewPINViewController.swift */; }; + 07BC42E1FEA2694A2D64B1447D73A135 /* APIServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE9796A8A548333A9174CD02EBFDB0A8 /* APIServiceProtocol.swift */; }; 0892D14FE7A3452423E9129D7917664B /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB5D460349AC3D552E63194BFC2FD0D2 /* MatchError.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 08F7E3A84735F767E09B173B05122495 /* cotter-lapis-logo.png in Resources */ = {isa = PBXBuildFile; fileRef = CFAB8A460A4B815A2A15AD5F28C0B0DA /* cotter-lapis-logo.png */; }; 092256E303520E50ADEFF25EEB4E73EE /* CwlCatchException.h in Headers */ = {isa = PBXBuildFile; fileRef = 353DE3150621E7B27CA596B4FD4B4835 /* CwlCatchException.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0A8719F18AADFBA156F0782E57CB11F6 /* RegisterBiometric.swift in Sources */ = {isa = PBXBuildFile; fileRef = B951E46DAE238B00D1C7DD6B8F4ED246 /* RegisterBiometric.swift */; }; - 0B327C6E80884DBD5BCCAD5AC735BDD8 /* LoadingScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 652E3948FAA404DA07E3A9CAB5E364D6 /* LoadingScreen.swift */; }; - 0CEC901A613300A717BCE9FBB4CA9C21 /* Callback.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB09E6F30FD5AE9968EFECF1F6E0891 /* Callback.swift */; }; - 11261108BB8F9D5E81D3D4EF1667B597 /* UINavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DC54EF53D0A8B11BD1227885EF8DD4D /* UINavigationController.swift */; }; + 0CA0920A1FF4799648CB748447E94AD5 /* LocalAuthService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8E0B4AE991BC4EA49FDDC2B7788FABF /* LocalAuthService.swift */; }; + 0F61BBE229DC32A794D67EC813C8342B /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50192664722E80E546C054C72FA679BF /* Image.swift */; }; + 0F7338915ABDDC30ABBDE5CE865AAA10 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAE9EDA9533912092D8061743125D6E2 /* Response.swift */; }; + 0FEF64E6B3966A2B873FD65FD19D9452 /* GetTrustedDeviceEnrolledAny.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8155AD8980ED90E7DBEEC3D6CD2A821 /* GetTrustedDeviceEnrolledAny.swift */; }; 13D2A4D59DD9612E1AA7F3182A342162 /* mach_excServer.c in Sources */ = {isa = PBXBuildFile; fileRef = 6BBCCBF5CC7D9BEEC387AC1BBD61EFB3 /* mach_excServer.c */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 140438420B87358766C88E41FEBAFD95 /* AutoEquatable.generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C712792085DD744A75C839CA9CDEEB5 /* AutoEquatable.generated.swift */; }; - 15E3EC06E352C9683BB82626DB707F3C /* ImageObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB5455819B215830267835ABF9A740A7 /* ImageObject.swift */; }; - 1626FCEA906E5AC0835C28C0AFBF5F1F /* UpdateBiometricStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC80103637CE38CD4FDE4CE7BAE617AA /* UpdateBiometricStatus.swift */; }; - 179CA1F1539E84B1632D546D3E57C6C0 /* Default.swift in Sources */ = {isa = PBXBuildFile; fileRef = F58816E6283180EA78C73EC9843C8AF3 /* Default.swift */; }; - 18488BFC4A3852E61C1A86208C5C9B7A /* Cotter-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EFE6D19235D816F7DB49134E10E7A12 /* Cotter-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 163073622ACDB67C373AF807C95F9FFC /* cotter.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D3851D17F6F0FBD4FD08AB12768604D6 /* cotter.xcassets */; }; + 16CA6D9C330CE41107AD16D787301E7D /* TransactionPINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787652874641A387983E0866F8198407 /* TransactionPINViewController.swift */; }; 192A3F8BEC1A99FD8712D3E09724D72C /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A980A57EEC18434079D4FF77FC211E /* FailureMessage.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 1A88419585C48820BD50E584BA714B95 /* Cotter-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C180B9127A8A150055811C73EEB28AB5 /* Cotter-dummy.m */; }; + 198D590072D4209935F6312BE5D04717 /* AuthAlertMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 094903CF0F7AC0CD4164EAD2A0111333 /* AuthAlertMessages.swift */; }; + 19A46C5CE35F88ED2F171F7EF87BB31C /* UpdateCreateNewPINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72DC720805276810E56C63BD08785BC5 /* UpdateCreateNewPINViewController.swift */; }; + 1ABBE049575A33553C9BB183AA32BA64 /* TTGSnackbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F376CDCF047BB4C2A9E16BE93CD8E9B /* TTGSnackbar.swift */; }; + 1B8D1994F6D7CE4A1307449946072A87 /* BiometricFailPopup.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BA3BCEBE3D8781A8E53D5F00E84D14 /* BiometricFailPopup.swift */; }; 1D2BF0EF7336651B7CB7E2BC7B83F9CB /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 312B988EF117AE4DE76A268D970131FE /* UIKit.framework */; }; - 226859A913F378D1B37860FBF9D1F1BD /* LocalAuthService.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEAB37EEA081492DF6D2A33BAF6E4ED4 /* LocalAuthService.swift */; }; + 1D6B090E92226F882E43A8C93D99AAA0 /* ImageKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0665161AFB03DB0CD4F8B6B24C142E28 /* ImageKey.swift */; }; + 1E18B7CA6517B5D6B02F7A153473AD98 /* MockedAPIClient.generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70ABCBB964A5DD020846B8BDCA459042 /* MockedAPIClient.generated.swift */; }; + 1E2F1B28F6F8EEE0F13F308E45E4D69F /* cotter-success-check.png in Resources */ = {isa = PBXBuildFile; fileRef = 64101DC9565CABAE267581E270B40C60 /* cotter-success-check.png */; }; + 1ED2DE08D479E52BD83CD2ACBE6E6404 /* TTGSnackbar-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A552898FBB26301F58C6D3EE039608A /* TTGSnackbar-dummy.m */; }; + 1F9F04A740559C2802FD47AC0B6D0CD5 /* EnrollTrustedDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA682EA90C21A566806A7F43AFBA0D80 /* EnrollTrustedDevice.swift */; }; + 203F926603DD18A1F0560E28C6EA2293 /* EnrolledMethods.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57C9438BBBBCAA2A3E379599FADBCCA8 /* EnrolledMethods.swift */; }; 234849AD309265FD107C74357FC8C0CF /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = C81240BABA09EB5B8FC1447ECF008815 /* DSL+Wait.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 239092650F8E028B97A33424422F2059 /* TTGSnackbar.h in Headers */ = {isa = PBXBuildFile; fileRef = DCB123AC231A50B6A170937F04AE8F9F /* TTGSnackbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2391FFD3230B40E2348B5257D6296BBB /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA5EF47987819D05D149E9A27E4A721D /* BeGreaterThanOrEqualTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 26550585B12AB8BAEF3AF380DA252736 /* OneTimeCodeTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8252FF59C2D3F9605832848938C9EAC /* OneTimeCodeTextField.swift */; }; 26B9FEAB3DE0C8B91709D53571752A3B /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B2954D7DBC4042CD97153C6D0716015 /* MatcherFunc.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 273A76AB05855AE158DD8509CF97F342 /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AB5B5F331DC3DDFC81C8D6923F9C1C8 /* UIViewController.swift */; }; - 27DEE044021A5670B9DCDB3B32A42DDA /* PinStepEnums.swift in Sources */ = {isa = PBXBuildFile; fileRef = A102851D5137469CF31B7BF1FB6B4854 /* PinStepEnums.swift */; }; + 27090A2823C943DB023BAE5920BC4C8D /* BiometricAuthenticationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1C6EE7061E5A4BF4566B2B482982E5B /* BiometricAuthenticationService.swift */; }; + 2A3BA13377C662789E433DEA7973F864 /* LanguageObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CD77D83BC50E9C01828423077045C7D /* LanguageObject.swift */; }; + 2A710C34CDB136C83ABF36B1611FEA18 /* RequestToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = 388B5CEF26E02093063CB7A24D15C35D /* RequestToken.swift */; }; 2B350015B9F7546D0769649EE12D7D1A /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E915FECA513FB8072680784946D924A /* NimbleXCTestHandler.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 2BD0EDB3F326D6CB664A7C2543A67A02 /* warning.png in Resources */ = {isa = PBXBuildFile; fileRef = AB03D1E1955742C54D56783B447D78FA /* warning.png */; }; - 30CD4300B366FAEFCE0EAE1CC25C9B83 /* CrossApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0833A618E80B842D6A25800B3395BAD4 /* CrossApp.swift */; }; - 323CA2C1414AC710F8A0751938178FC8 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73522986844CA97C0DA5727C89B6D20F /* String.swift */; }; + 2BACC36F65A5D6CEDC271C0AFFDA571D /* CotterJWT.swift in Sources */ = {isa = PBXBuildFile; fileRef = E672C4497E07330EED754DAC658DB6A4 /* CotterJWT.swift */; }; + 2C67EE118173BB0B8A5E4DE60C9850AE /* UIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56C096310678D7EA88CFA9D75F4D6075 /* UIImageView.swift */; }; + 2C8C323E9D1C8BD6E5325ADAE2BFEEFF /* PINConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BA097A3B62606CA5B4FA2347F2DBB43 /* PINConfirmViewController.swift */; }; + 2D87EE1141C4B31EDD4AF25EAE7E3639 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = B218D24806BBF16BFF46772D946BF2A9 /* UIImage.swift */; }; + 306249627BA2E9134E9F03D9473D7CB1 /* UserKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9B382DF456F8287E92BFF876D45AF8A /* UserKey.swift */; }; + 319A0ABB7F579AF9D5FF4A708B7146AC /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32DFE347BD5D3C43A34119A056E89DB7 /* Event.swift */; }; + 325426197B3D8E95E66241C413F7EACF /* TrustedDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6862DCFD70455DDB2A2F51534E1F426 /* TrustedDevice.swift */; }; 3262B230B938C8D6522790093FEAF69D /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = F537A18934107248B7A447CC5704329C /* EndWith.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 330E8E4A6596ED625E9B34C94CC4136E /* Await.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB1CCACE7C065FC463B5B7988A22C288 /* Await.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 33530D0FA852B45FA80439BF45F7A3BC /* TweeActiveTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 929F5721B8A1B108D88379988548673D /* TweeActiveTextField.swift */; }; - 335728582F704DCE227F7F6C6C4F667F /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56F1E65DBC6A3BC5211539F420EA7A5B /* Utils.swift */; }; + 341A4D54B75342CBF14EE40755C44A9F /* CrossApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3686DC4FEDB7E12661CF556141209ED /* CrossApp.swift */; }; 3460FEA0CEADB05D3B56C2E1CAF9590C /* ElementsEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E2A89BBFE54CA2355EBD95AF0AC6C0 /* ElementsEqual.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 354B14FD3BB78069E127EE4E79CD8248 /* FontObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DC726CE1EBC2482B4826B80B37FFB92 /* FontObject.swift */; }; - 35C80C06B2826AE13F2AD0DD453F72F4 /* BiometricAuthenticationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25BAA4B7F4E618B46207A3C286E4C94A /* BiometricAuthenticationService.swift */; }; - 3736FB48EDA08CD98F56B1E736EBBF27 /* PINFinalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 515C3B2F1152B1BDC6B9B3CE90F40D7F /* PINFinalViewController.swift */; }; 3752D5BC0E14222D9963CEC475246972 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; 39133A7716CEDEB690A7DA9D12C45C4D /* CwlDarwinDefinitions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3BF3568526A4210DF24F9FE8E9C9B2A /* CwlDarwinDefinitions.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 39CBF7688BBAB5B4060F7EDFC5BCE51B /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6519F9009F625F071A818263CB5BBC02 /* Request.swift */; }; - 3B64A52065909B3BC931819BD8913360 /* GetNotificationAppID.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4FC1546FC62699FD054217A9B693BE2 /* GetNotificationAppID.swift */; }; + 3A125BD6966ADA056E5B2F9671990605 /* UINavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 129588B184DB58487123017907B6A72F /* UINavigationController.swift */; }; 3BD0C370BBCEBDEA68B8EDBD969370EB /* mach_excServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4335D6D44B2DAB43F96ED95FF94D2148 /* mach_excServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3CB69091A029DDA4D2D74852A964C916 /* cotter-fingerprint-failed.png in Resources */ = {isa = PBXBuildFile; fileRef = DC517FC36DF7E7551850193FCEF442F5 /* cotter-fingerprint-failed.png */; }; - 3E94318BFC647D7175B96D64797D7F3D /* ViewControllerClassNames.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2BA261E65D0E5536EE19258DFE42696 /* ViewControllerClassNames.swift */; }; - 40A2ABF5DDC566BE71CBB5C2CADA5587 /* BiometricSuccessPopup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 014E386AE1A5CE8A7472C1A521B87371 /* BiometricSuccessPopup.swift */; }; + 3C66995AD253B3058CB94D0615AB728D /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70762DB3C40ED9F2298431D629FEE569 /* Constants.swift */; }; + 3CC6A702230C16D21E9529F957F19D82 /* RegisterBiometric.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED0B7D9123367BE0859180D65F2A764 /* RegisterBiometric.swift */; }; + 3DAC481CC10E924AC261A836A12A8653 /* RequestPINReset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 506733759570C1F47CB730FD7597D302 /* RequestPINReset.swift */; }; + 3FB8CE623ADB1E6D0525C6CDD06D0128 /* Cotter-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 00AAFC1E2FD9886378CDC96F3ED039F4 /* Cotter-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4203EF96811AE514D64AE069311B1575 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73EBE410D0EC6976265EBCAABFA3862E /* AllPass.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 425BBABC84D899951627153399E26EF4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; 42F76698690916E0407F51610D829412 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1151EB934A33EA8B5D4D188BAF0A8444 /* BeGreaterThan.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 447B1E554AAC41B518A75FE325903502 /* CotterAPIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EBD97F86BC5475B474CF47A4563429F /* CotterAPIService.swift */; }; 44C9470137EF941955A1FDCE71D68C26 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D89C88CF5162422B9BD76B152B06DED /* MatcherProtocols.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 45B1D4370DF8163EF774F5FE75CCC053 /* RequestToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0A16806A07D9D58C1FE56DBE445310A /* RequestToken.swift */; }; - 4636BD7FD767BAE6226C5CC68D3B80D6 /* Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD426F1672AAACDAAEBE6FCF8C980AB5 /* Protocols.swift */; }; + 45246F6CD732F41E83F0B630D3129CB1 /* LoadingScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE107AE5D74F7F29D8FFFCB1B8C64217 /* LoadingScreen.swift */; }; + 462903A129B72BBEA603D4E0AFCA90BF /* CotterImages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C413AEFF474B0D36666218DC73C2B49 /* CotterImages.swift */; }; 46B90B2CF2EB97B38C43A31E9A5478C2 /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3B104281D84C76D2A6F7D1BF86E4591 /* PostNotification.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 46BDEBF35D99D2CC53EF72DFC5BDCDCC /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F9B18484A397566677B09E6D498FFC4 /* BeLessThanOrEqual.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 4847F76AF7CD5336FCF96982DF919CA6 /* Passwordless.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62DDE21D20C6638DE0AA8E34B6229E6A /* Passwordless.swift */; }; + 48D30D78F49F9108C635B68862354A9F /* GetTrustedDeviceStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = F298395C5D486DE92331F03AF9C033FC /* GetTrustedDeviceStatus.swift */; }; 4A9E7C1A8B697A1C0B0A1E0DF855A591 /* CwlCatchException.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF58D80FBA7F9D2E380C4C57B9B0C705 /* CwlCatchException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 4AC31D7241B423D0BE92E1E5A52F54BB /* Transaction.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 49EB298287B96C5C33D7E1B35D6C3376 /* Transaction.storyboard */; }; 4AF64D505F6064D1936D05ABADD72EA7 /* Pods-CotterIOS_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B6BE05276AB9D35CD09A927E095356D /* Pods-CotterIOS_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4CA535C07A87974CD61532A5352F057B /* TrustedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0471DAE276ED80E2DA6CEF7DA906E584 /* TrustedViewController.swift */; }; - 4D79E5596121129F1533FC84B3C77AF2 /* CotterClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8A00768593F957EE294A707807FD19 /* CotterClient.swift */; }; - 4ECB8519F166C240ABF2C0225F6879BD /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7AF3A87D447265768124E18151FAF8D /* Image.swift */; }; + 4B4BA3CA6382DCCE40A2432EA5FB0799 /* Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = B22AD32ECB8EA35FDA6C539C4CBE4A0F /* Collection.swift */; }; + 4C88F2F3268166E1526C248FD03A5F60 /* UIExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D337D24D1F0369C61C736474FD64D55F /* UIExtensions.swift */; }; + 5056F6AFF35264DA88022C5560A58893 /* UpdatePINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3245B237EA7F541BDC44B2D72C402EC3 /* UpdatePINViewController.swift */; }; 52AB6461CAA9481D24835F3E48301FC6 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD5B47DF01D3215E3D25DA281B431155 /* BeIdenticalTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 54073CBE39AB64CBBC550F868BD42E48 /* RequestPINReset.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71262338C054814C70F35FC8D0ED4C4 /* RequestPINReset.swift */; }; - 54C170C415AC538799C295A89B3F1716 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; - 555DF923E896731106913C97A6C487C5 /* HTTPCallback.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FD868FB807B81277CFABFED91612AE0 /* HTTPCallback.swift */; }; 5578F928AEFA8B2B7CC542033590DFD6 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EFB31C9AAC03276BD094B91DEF7DF9B /* Match.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 56D9714B05EBE2506170952B76E6DE90 /* CotterJWT.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CD92171CFB03D0DFAC1BFF4F6C5D437 /* CotterJWT.swift */; }; - 5A466D6354DAE13B17C581F29A04AF67 /* ResetNewPINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E84E44838221D7AA0B795F1132AB708 /* ResetNewPINViewController.swift */; }; + 565A931161EDB667BD589856FC116FCD /* ResetNewPINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFE6F2DD82E0BD18694F0708E1F29EBC /* ResetNewPINViewController.swift */; }; + 56CC7A1C74BA21736A3A96A7D871ECD3 /* warning.png in Resources */ = {isa = PBXBuildFile; fileRef = 49E92870F05513A63DB7F239B19C2EBF /* warning.png */; }; + 59814608DE851BCB82A10E1098DBBA6B /* NonTrusted.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8F5865C68B146B5E986499AB5DAB237 /* NonTrusted.swift */; }; + 59E3AD153A90F11073AF5C5313E417A4 /* NotificationCredential.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88C4BD0EF80D760C2D6E7708D109AE56 /* NotificationCredential.swift */; }; + 5A02895756F1F5D3D029A8D8E1107D6B /* RemoveTrustedDeviceStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D2C5D108BD75FED8ABC7462CE909B6D /* RemoveTrustedDeviceStatus.swift */; }; + 5ABB0D4512F9A18DFE6B7473F7744578 /* BiometricSuccessPopup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E44DAD072A942C78AF70E54E68AA07F /* BiometricSuccessPopup.swift */; }; 5B6F70DDD4C63CF6ED95291BCB633494 /* ContainElementSatisfying.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0FF7496DDE1D7468B75539E53852770 /* ContainElementSatisfying.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 5BE915AABFFC098AF71F0D800C2B6EF7 /* TweeTextField-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AEE59E879BA1C4D9D619503732911B9C /* TweeTextField-dummy.m */; }; - 5C36A027D8A41B50849B5F40D7E2248A /* MockedCotterClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BFCC5EB8A1A0590BF8B562AA83DBBF2 /* MockedCotterClient.swift */; }; - 5CE37DF1DFDF06D166CF0F41A4302961 /* RegisterTrustedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDF017A436FE1B8279AAA86B467BECDA /* RegisterTrustedViewController.swift */; }; - 5EEB04A94B9E28D2D7F70941024F4258 /* UserKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8163D319D7826D220DA6A2877EBBC3BC /* UserKey.swift */; }; - 602800B1FF749FDFAE5C181255367B18 /* EnrollUserPIN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4F5EE41F31C2631DBD6654D3BF7059 /* EnrollUserPIN.swift */; }; 602E3758C0EF64AF6B7FCEA05BF5B9B9 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 613FD4635119075BC14860C4E246ADCC /* Expectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 604394930D457F7ECF056787E44E9E2F /* Identity.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3747D80200B98679E581C6398C6E249 /* Identity.swift */; }; - 6285F85361D04A62D328B153F83A935F /* ResetConfirmPINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6B34F982DBD8D1F29B8B53E687F8B18 /* ResetConfirmPINViewController.swift */; }; + 642347AEC44468399987426D7943A171 /* PINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 348A9197B52B60F119BC012A71B37A81 /* PINViewController.swift */; }; 64E26D7D025AC4462DFA8BA66B38C9D8 /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23955CA4949A28E13233F4544140729D /* HaveCount.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 654C4C33EC4FA1EF2C9250EFACB59450 /* WeakTargetProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ADE6D49B7FFBC85AAF68585204E60E4 /* WeakTargetProxy.swift */; }; 66445DFD50DC38E66E5FD097CA02DE12 /* FontAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D4F25396AA1E36145EED9F75BE1BAB0 /* FontAnimation.swift */; }; 66958AAFB77E186758F2472CBFEE2439 /* TweeTextField-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 647B2D5A3ECD8228F3A264A3D3971C32 /* TweeTextField-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 674AF03FE32446527E76DF0593F5EEDD /* TrustedDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CCC10B79D3E54167E93F6AE78E67AE /* TrustedDevice.swift */; }; - 697DD1F8FFF481A2C01F6ABBA5015A9A /* NotificationCredential.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE15241446ED33A2C2B4D07D58C8339D /* NotificationCredential.swift */; }; - 6BA720A7F6E527880B6DB5C3067D464D /* AuthMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D19082F5E1CC2078708D7413E4018F2 /* AuthMethod.swift */; }; - 6F444AF1CB3EC9DA48E4FD08CC7A234F /* RemoveTrustedDeviceStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 839BA615E722A5F99D3EC8AA926C608F /* RemoveTrustedDeviceStatus.swift */; }; - 6FE5D4F51F019C7711072D8658A5095B /* VerifyPINResetCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C4AF5AF7305793D361D4115A4C4BB3C /* VerifyPINResetCode.swift */; }; + 6839E42A52B5598706B6BA35231D568A /* ViewControllerClassNames.swift in Sources */ = {isa = PBXBuildFile; fileRef = A303A6E769C1BEE95A78AB857B413621 /* ViewControllerClassNames.swift */; }; + 686829D0AF2F4AB2A58DDDC174D85FC7 /* Transaction.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FE2211D83ECD70074A7D4D0108302684 /* Transaction.storyboard */; }; + 6A5491BD888E27AD47AA4A553E34B532 /* GetEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F338D8F4DF6FFBE80D7698744E9C8FB /* GetEvent.swift */; }; + 6DD66D321C0CA32A69F7EBFE2D847A1F /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82003EB76568628F0947239A51F8B449 /* User.swift */; }; + 6E4513369CF1193CA92D50ECC78349E1 /* PKCE.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1771EA68E7DF3E3B9A017AA3DE93E7C2 /* PKCE.swift */; }; + 6E6B8D5A195422F90B591094C9E6CBEB /* ImageObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE52624F2BC59135BE26705B0DAE74BD /* ImageObject.swift */; }; + 70473DC5694726A2B052401944614EB0 /* ResetCodeTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02B00AD9B524ABB9359D19E1A6AD5781 /* ResetCodeTextField.swift */; }; + 706556B69623E2529E4A6E517308947F /* CreatePendingEventRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98DDB50F6931462BE7506ABD4615E9FD /* CreatePendingEventRequest.swift */; }; 72FB8CEABF346A37D54CC08647489A98 /* ThrowAssertion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FC474F79FD116E6583735B2716BA1E8 /* ThrowAssertion.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 75C8E84018A409E66F969E382AD8A5DB /* TTGSnackbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F376CDCF047BB4C2A9E16BE93CD8E9B /* TTGSnackbar.swift */; }; - 77CCCA27CEBA955543B235FD3821941A /* TTGSnackbar-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A552898FBB26301F58C6D3EE039608A /* TTGSnackbar-dummy.m */; }; + 76E021C40399BDD88044A5D3A613CB44 /* OneTimeCodeTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77DF85BC242C42AD9591CC916CDECE7C /* OneTimeCodeTextField.swift */; }; + 76F02C88066222A24191DA4D82726A8D /* TrustedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2DC783981130DA978F94F02FD843D4C /* TrustedViewController.swift */; }; 78A51B7FCC1DFB888AAA254529013C12 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6058D6B2BFE138A977BDB3DC079A56E7 /* BeginWith.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 7AABE94431E241E86D11069C120243F6 /* ImageKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 867AB8F5B655A618BA59B6C114E41AF5 /* ImageKey.swift */; }; - 7AB1AA6C6A5061311951BEFEC94CB09D /* tap_device.png in Resources */ = {isa = PBXBuildFile; fileRef = 2EB0C384CC9E399493D73E9FC789C7AB /* tap_device.png */; }; + 7ABD8749D7A552858013A6F135662377 /* ErrorMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58D6181096D626AFBA169FE36C70FCE3 /* ErrorMessages.swift */; }; 7AC93EB6DCDA9226165D5BC354FE7BC6 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B391511A80E300377F9DB0B3AF246F7 /* DSL.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 7AF8A7BFCAA8BB4EB43DB4F8C8AACD31 /* ErrorMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CB21BE2E59FABA97C8FE830E79F0FEE /* ErrorMessages.swift */; }; - 7CC65587ADA0056188A03DBA0EBA37EB /* UpdatePINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 149010F74B97096F436477728FC84FB8 /* UpdatePINViewController.swift */; }; + 7B1E3AE9C968215DA3188CCDF002A1C0 /* AutoEquatable.generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA85A0795B6474141AFD1DB1060BC920 /* AutoEquatable.generated.swift */; }; + 7C0DED0384ABA06FF0A4A4D00E60C42F /* BiometricRegistrationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB112AAD255468830258E8554A43357C /* BiometricRegistrationService.swift */; }; + 7C7E963762C6D9E7C5C662D25B812CF6 /* MockedAPIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C048C9B47B8A19DD961FEF9579A0FC8 /* MockedAPIService.swift */; }; + 7D22BCE55408904E6EE26A56914692CB /* AuthMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AE3F57034ABA3AAE3944EE518EDA441 /* AuthMethod.swift */; }; 7DAC86DCBC36C10F43FA5FEB819B7BF1 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437FC478C6C0DC2542D7EBDFAEB4DDAF /* Functional.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 7DC356E1F06685C9417C814904E89D84 /* PINBaseController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A62013CC4131F0EBEC109837D1D71D3 /* PINBaseController.swift */; }; 806B9040D79A3DC58FB56EAC16FE19BF /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1E208120DD0FF06E5C181BCF4ABFEE4 /* Stringers.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 80DEBE41D84FBA1C4D4FE00C8D797E82 /* CwlPreconditionTesting.h in Headers */ = {isa = PBXBuildFile; fileRef = 03ABFB604D9B4735F2D6BAED099ACBB7 /* CwlPreconditionTesting.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 821E09EB75EF532C7C097D6B9837B3DF /* PINConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21DA5BDF01575F01F97173A7878B78FC /* PINConfirmViewController.swift */; }; - 826AD5DD50B4ABB7EAF2045E9692541F /* TransactionPINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF6D9E342497144CBB5C0949C9F6F43E /* TransactionPINViewController.swift */; }; - 82A1B61342F0966055C677A256C045CE /* GetBiometricStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = E68BF3E14B4D0C4AC827252A0197C144 /* GetBiometricStatus.swift */; }; - 852813862565142100F407DE /* UIWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852813852565142100F407DE /* UIWindow.swift */; }; - 85A1C6898CF5E8F2D1A4A6DEAADBF90B /* GetUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8392B0EC756086E2846E501FB5DA976 /* GetUser.swift */; }; - 85C66703255116C8005C4AE6 /* BiometricRegistrationFailPopup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85C66702255116C8005C4AE6 /* BiometricRegistrationFailPopup.swift */; }; - 85E75625253535AE0053A186 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85E75624253535AE0053A186 /* UIImage.swift */; }; - 85E75645253536910053A186 /* cotter.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 85E7562F2535362A0053A186 /* cotter.xcassets */; }; - 87D2CE559F5D9822C0FEB123D190B293 /* UpdateUserPIN.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB681B6D77ADB23073C91701B19CC719 /* UpdateUserPIN.swift */; }; + 81D38361731A13A7B627D6130879B6E3 /* CotterNavigationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B950E8391AADFF36F2C7FF7A0CDA4D42 /* CotterNavigationViewController.swift */; }; + 8269EAAFF58E28580D22764E9AE3CAE2 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA055956A087836389AD821C21E4685E /* Config.swift */; }; + 849355CB8A5056D104C45F49160A172F /* MockedCotterClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE692A1448A11FA598709183E7F53E63 /* MockedCotterClient.swift */; }; + 882FFD022038E6C8A8817B8D8E23EA20 /* BasicButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2BFD91549602FFEAF588045B67D47FA /* BasicButton.swift */; }; 89EE4D6DBDB79963D65AA1E67B543B6D /* CwlCatchBadInstruction.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF61476DE7A2C99B33F4C0E767F2F674 /* CwlCatchBadInstruction.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 8A0EF19254BAC5DF0885D1FBA345E016 /* CwlMachBadInstructionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 76817A3D8A5B3B7BA9224986E6987154 /* CwlMachBadInstructionHandler.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 8B593E98FCFBE553F2AA93D212C82543 /* PKCE.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54ADA578D0A9ACDA29D2B78B6E47F9DF /* PKCE.swift */; }; + 8B71646650F074DF1639B82AE8B061BC /* Cotter-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C24D82BE4E6243C6C28BD4ED9587ED3 /* Cotter-dummy.m */; }; + 8BC51374B260FBA1171BC3040B626636 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; + 8BDA3413D868A5D6A682424B57E5FA2F /* Token.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2681F688220B1EE3A91E5F0449974E7 /* Token.swift */; }; + 8C684E20D58BB293FD22F4EAB5EB45AA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; 8D17749611AB0C8BD51C068749D8DF68 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = D3BEB7448A9846DB6CD9AD89C375F949 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8D543DAD9A6C0B8BF8A5DB38AD876677 /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4664394262CD2E2E8FB1841D1D3AE211 /* SatisfyAnyOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 8D75EC8969EA46FBD6E1BED7791A3C37 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89B0FF91229B20BDBC11C854A1A3D8D6 /* BeLogical.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 8EF5D98966D3CB86E02ECD812D731BA8 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1293ADAAE32FE1C2FAB48A1D25FAC988 /* Constants.swift */; }; - 90E85B255F70B0A4950CD149985F3C8D /* Cotter.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 55F6A204BD0AEB2C390638135493C52B /* Cotter.storyboard */; }; - 91058AF7B026BF83F41ABD0469F879B6 /* MockedAPIClient.generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22A32ACEDB52E7162DDD9840E6D9865A /* MockedAPIClient.generated.swift */; }; - 918D9A47F511F9DD0FA130067E0870BE /* CotterTokens.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE40F13C6877F057ECC055E0B4918E1A /* CotterTokens.swift */; }; - 93AABA337FF2DAD360EF428943124359 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = F96B6FE42BADF68CEDD38A675D9B5B6D /* User.swift */; }; + 8E3A9CE073B780C69BED699F6012E262 /* Cotter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AFA2C2369E66748BFE3603448247509 /* Cotter.swift */; }; + 909DAACB3565C684E2995381AF6E1AA1 /* TTGSnackbar-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 97B7B42250CF9B8BE835B64DE01D3063 /* TTGSnackbar-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9268CFCB745C8508BD8C3F6BD3747158 /* PINFinalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10B71F7D83A3587DDAA9E29C55C259B2 /* PINFinalViewController.swift */; }; + 94952B087B0984D369703C1B240DB0AD /* UpdateProfile.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B699688F82F02C9FA278FC815142D70E /* UpdateProfile.storyboard */; }; 94DA3131D64B3D904BE28E72F1871065 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3210926F2E18722A48096F596D3F0344 /* BeAKindOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 951C32C0477AA68596C2DEA1C41C9C9C /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = B07B81543E9AE08162E1B84382F76791 /* Config.swift */; }; - 9540D59AAF1CDC6659045E268071C324 /* LanguageObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3577C1E1D15ECD49F8A7133C6DD9EB5D /* LanguageObject.swift */; }; - 958C0CE8EDB5DA5DC56C0D53C2EF4028 /* Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 548AF493F6257067947B1CBF4AC41221 /* Collection.swift */; }; - 97E2337485FFADFEB5442999CA48FEAF /* Passwordless.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90C3FB4B37D75A7C13D410180699D0B2 /* Passwordless.swift */; }; + 95F5979DB2B387C1AB2A88B4383EE696 /* CrossButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2C6834822D798DB3C33FC4BC7C05ACF /* CrossButton.swift */; }; 99E8019F4689A514DAC6AA40AFF7352E /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = D071CFB5DFB9D8ED6F52A239AA068111 /* NMBObjCMatcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 9A0F9BCADC79292CD6508259F87BD814 /* BottomPopupModal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80431B2A6601F6B04F0524A94DF0909C /* BottomPopupModal.swift */; }; 9B9714C476F416AD7FD803EA1184D113 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BA5A1BAABD748502A2A6C4DCA5E88E3 /* BeLessThan.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 9BB1EE62E8EAA63D965F22CDD5825834 /* UpdateProfile.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 57480C7725B8CD644B39ECB76744DA3D /* UpdateProfile.storyboard */; }; 9BB5E9B6487FE95C710687B484C17161 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 45DA45FA86B1F71F53ABE1B451D9FAE1 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9C460BA614D4B1D314A252C4C5CE1D87 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD5A7A14D43A613AA982B949F7A29C10 /* BeAnInstanceOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 9E2115F996ED0781962D9858EECC28B2 /* TweePlaceholderTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852A77A8E7A6E27DBCD441181CC13C6F /* TweePlaceholderTextField.swift */; }; - 9E57BF2107E09BC7F2D0291F2C378295 /* cotter-lapis-logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 041916CEE73B9E1B2B870C8978A7A985 /* cotter-lapis-logo.png */; }; 9F70369EF71BD9ABAFF687AF532CC20D /* CwlMachBadInstructionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B9C32A3BCD59379572E25E46658A989 /* CwlMachBadInstructionHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3E918AA50FECF60BF8D1600E45B8366 /* BiometricFailPopup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90B7CEA9AABD0A7F177D1BB488756C95 /* BiometricFailPopup.swift */; }; - A57E4C7870419C221F9593601D7476BE /* RefreshToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6FD5CD2EA5C15E68B254D2062B77A47 /* RefreshToken.swift */; }; + 9FEC5E44570BEC108345852FD12DDED4 /* PINBaseController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08C92CC5DA6BBB74775D8280AE753782 /* PINBaseController.swift */; }; + A0CA77E5A0F34AC3DE4D4F7D457D4101 /* cotter_logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 6A304430F102D9C1614983AA4E9DEC7B /* cotter_logo.png */; }; + A478A7D954555C38660C91BEC56B5BCA /* Indonesian.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98A0A5F167C0859C6EBC6875C4ACB256 /* Indonesian.swift */; }; + A583BCF7BE7FF1EC94BDA0A24149D5A5 /* ColorSchemeObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2BD009AE620AA4F4F3D7C8AC7F8563E /* ColorSchemeObject.swift */; }; + A6577C478185790B1201D1947222CCF6 /* UIWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE364B51FD880D80697701FEF29AD964 /* UIWindow.swift */; }; + A6933CA0FF54B17B1206593F20B5A3BA /* UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C746A4002549200758A5999C924119A0 /* UIColor.swift */; }; A9996A6303084D17B9C439CB132A1F69 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06DE409A7DB16FD354D20F649E6CF30C /* DSL.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + AAF6588DF8A483EF01B2033C35E42247 /* RespondEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01B16D95BEA339F24EBB7751C0720EC5 /* RespondEvent.swift */; }; AD69407E2FA1D39A9E09248052F2D81B /* ExpectationMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 676846DE63A41F35EA1310A087578F39 /* ExpectationMessage.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - ADF73974DE50268DC61F8AB0DDBF5AAE /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08178A27D173D7A61EF27B0154A0BA39 /* Event.swift */; }; - AEDB4C3DF376D2C156970E4268A37403 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62F0893ABA76B03589FE7135331FBAB6 /* Response.swift */; }; - B171C84DB4534E8137C2F15F5F8F7254 /* Indonesian.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E7FDAF685AF04C8A387E8EE773A11A6 /* Indonesian.swift */; }; - B1729AF7E8004738820793ADC40451A3 /* UIExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A344D7867E754B240664FD4E7A2B89A /* UIExtensions.swift */; }; - B26C922EB70FE2ADA30F4E8630169ABB /* GetTrustedDeviceEnrolledAny.swift in Sources */ = {isa = PBXBuildFile; fileRef = B558706B13BC53731F7283A365F18113 /* GetTrustedDeviceEnrolledAny.swift */; }; + AFF96158849C3AD97660094221937562 /* GetBiometricStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = A04C0B43A99373D4145E25E8468BF57C /* GetBiometricStatus.swift */; }; B2A65EEDB5D5EC246EA68E10964FF7B3 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ECF2F95BC584440A52DDD4B3FC8CF10 /* ThrowError.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; B4058A2AA8486E9879F113E6F67B9679 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E07D44425A3E47626F765325DF95965 /* AdapterProtocols.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - B58B86B2152B837F3DBAA7B2EF3DD1D4 /* RegisterUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D9ACC081C81E48E1ACDBBB23F3DC026 /* RegisterUser.swift */; }; - B5B90DBFA0ACADC11051ECA86BB75D76 /* CotterNavigationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E52ACB3B762FDF90611DE01CD547FAE7 /* CotterNavigationViewController.swift */; }; + B59F80DCE02BFF9602654153C05056C8 /* Default.swift in Sources */ = {isa = PBXBuildFile; fileRef = 640701A966D347E2B835CA394ACCDA91 /* Default.swift */; }; + B6B068EF11ED2F285E7445B671C0DC51 /* GetNewEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3DFB50536666DC4F0A5A3AFC462FD47 /* GetNewEvent.swift */; }; B6CC23C6C288F4EB9EDD3A06F1F5F094 /* Predicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A76B2EC11055AA7921D7A995624D0073 /* Predicate.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; B71070160CF07EFA99ED0445B0D191E7 /* Nimble-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DB8CA5B4CFD4189E070E53E3724116B /* Nimble-dummy.m */; }; B7662703AF8D3FFFCB0070C50FEDCC58 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5930F998C5827F023F74A2CCCF801526 /* Errors.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; B79FC6E46F642C3FC74B3E6D9175B1AB /* SatisfyAllOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E8F24EE702D7D35AD02F3E9605E1FBD /* SatisfyAllOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - B831C74028710ABE8E242EE5C9C93419 /* KeyboardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41FA14ADBE3BEF637781FBA4A16B507 /* KeyboardView.swift */; }; - B9C7EA97BA3447E6F48582F6D0C28B31 /* GetNewEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FB95A1337E573402B9D61E8ADC0DA8 /* GetNewEvent.swift */; }; - BAED2B2F96E1F01B5E254197612D2F7E /* ResetCodeTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 958D270DFAFCFE79BFCCDFD5D327BADE /* ResetCodeTextField.swift */; }; - BB57E55117DC5145C777F2713CC46E88 /* UIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33371B50CFA84A7E8F7AEC547D48E4C4 /* UIImageView.swift */; }; - BBD24BD9A872CC42FADD6F5DA8EBFF71 /* CotterError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E79E76F0DC62C5E5CA89B43F99850CC /* CotterError.swift */; }; - BDC8F36464FDFEA10FA16BE2BAF50119 /* cotter-fingerprint.png in Resources */ = {isa = PBXBuildFile; fileRef = F66AE16473FCBCF369BFE116CCD998B9 /* cotter-fingerprint.png */; }; - C03947A801676A8EADA85CD6D657AB51 /* cotter-failure-x.png in Resources */ = {isa = PBXBuildFile; fileRef = 25BE2570CD457BD3C44447F17ADD36A8 /* cotter-failure-x.png */; }; + B898692798BEC4DA18E95DFDFE599625 /* CotterError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9242CF9D9CA440D1A0CB5E57F98A8B13 /* CotterError.swift */; }; + B977A02C3FFFF50D47F0D70682FD2FFF /* RegisterUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8986D1E3FD769D22E027D679AC32A6D /* RegisterUser.swift */; }; + BC6664B7B471FB79376596BFACD7A78D /* ResetPIN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38FFC575F80891FDD21C66EB2EC40D17 /* ResetPIN.swift */; }; + BD4EA3AF1A49344485E254DEEB53B53D /* KeyboardView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F0CBDB5FE39FA473B4E14221738DB27 /* KeyboardView.xib */; }; + BD970BDE9C622D05F3E29872C0432FC8 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F84616AA27DDC69808DEDBCA2BECFC4 /* String.swift */; }; + BF8EE197368FFB2C74F3C8D75B54F67F /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26F100CD0C3AFD0AD4519A112E4F3859 /* Utils.swift */; }; + C00C2218807E8D99BF1C4C184AD99B2D /* CotterClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CD589E863E90EFCBDD2CC6DEEBF46D8 /* CotterClient.swift */; }; C051C0411627BD5FCDA031782EB1F716 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = D5AE9A1D50A3BB2768EDC88AED944DFC /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; C0C98C8C7D07E1598F20EE2F0539197D /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABA845E517D7CC3F2AEAB454A374766 /* NMBExpectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - C1A01ED5357136AFDF632FE87FF770BC /* AuthAlertMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBE3B9C9C6A732F07CD3C599FEAF1C81 /* AuthAlertMessages.swift */; }; - C1E307E20A79F853B09C96D61F4BAEEB /* CreateAuthenticationEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61EDF753B531B9D53F41D296659681F6 /* CreateAuthenticationEvent.swift */; }; - C530678E70BC84E5A64F880709082819 /* AlertService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73C6D575A0821153945EEFC447B99740 /* AlertService.swift */; }; + C0DB8B1691463AF56ACCA012473ECA8C /* CotterStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 325A844935D6C093DF18D114EA074E85 /* CotterStrings.swift */; }; + C69E8CA955997393FEF6FC59DF948330 /* UpdateUserPIN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8775B1E82651C33477D1DB6E1E5B9038 /* UpdateUserPIN.swift */; }; + C73A924EB24B85FCC2E722C6CB7F6489 /* BiometricRegistrationFailPopup.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF259207E39C5829817A930DE4A16D76 /* BiometricRegistrationFailPopup.swift */; }; C903AEFEEB4E73644A03FB8285543107 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4321DDFAF03E43E4DC6DC98827B85A5A /* BeEmpty.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; C979EEB0159A65246F6BD2C906A8ADB7 /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA376A9FBF6976E679026F612559772F /* BeVoid.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; C99BBC3F70E056CB6A3CC0516318939D /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86078D088DAF73254275FE099AD94FB9 /* AssertionDispatcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - C99F4CC60C7F7F7772F835C803A7ADAE /* KeyboardView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D54449EA61C87E2B15382098258EC01 /* KeyboardView.xib */; }; - CA00CBD82A9C1AF205AFE7CFD3C9604A /* NonTrusted.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD8E9DD053809F59EFEDCFB4B8C3DB04 /* NonTrusted.swift */; }; - CA77704114A4120D4F5F5509E544F41F /* TTGSnackbar-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 97B7B42250CF9B8BE835B64DE01D3063 /* TTGSnackbar-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC19B1C3F8D96E8B6355B72BD9EB7D91 /* BiometricRegistrationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD1C21456CC23FDF21C62641063122D4 /* BiometricRegistrationService.swift */; }; - CC84095281010A0A2077447E46FB56CB /* ResetPINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1198E001FB14505CB3D4A4E60967E35A /* ResetPINViewController.swift */; }; + CB0F15AF50B18DB77DA8BCAFAF914708 /* KeyboardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E34E7D814B0B527CB555CEF8110EFA8D /* KeyboardView.swift */; }; CD6B1F146B0E157FE5B9CAFFAE77A5B5 /* Nimble-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AE5409CDC2F7B42829D48F4C67D5F97A /* Nimble-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CDD1CFBD2E987E84641ADB5CFB12537F /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF00FFA87F50E3C65507AD99635B456F /* Request.swift */; }; + CE17AE024BAE88457F41783982DB99A6 /* Callback.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28E9AF88C7E2E363ACBA391C36B0C286 /* Callback.swift */; }; CEE8D31A4E76BB7B350BF2A7175D4BC2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 39E9D15354EA75C871F7D2C36A87D452 /* NMBExceptionCapture.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - CF42ED059DCB1B1295559A353F4585B6 /* Token.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D7819A300CE5E09BA9FB6DDF036BBD8 /* Token.swift */; }; CF9218FF56D8EE43681150A3E1635C9A /* ToSucceed.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649798858940C1CDDBF9D058E71E927D /* ToSucceed.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - D0943C11A3DD419DAA0D29D5808F9B61 /* PINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 212BD8447C358C37A0948B8C51CCDB36 /* PINViewController.swift */; }; D0FCEA36439BB5E9287C7DD2F845B5B7 /* TweeBorderedTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8E04DBA72420CD9D70E211ADDD43A17 /* TweeBorderedTextField.swift */; }; - D27DC5CD31DE6BB2142E0ED9D16BDF80 /* EnrollTrustedDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E4CF80A22BA5786F1B20D3385B1AFAD /* EnrollTrustedDevice.swift */; }; D34D0540ADCBF163575B6B5444B1AAF6 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 060516D17456A6C1283F8D4CE698CF42 /* Contain.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - D5708C2C8641F6A88CD172D8A23D7709 /* MockedAPIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 857E4CDDF190838DAA903EBA7DB73D9B /* MockedAPIService.swift */; }; + D608A66918C5E0389EA45E0D88A081E0 /* PinStepEnums.swift in Sources */ = {isa = PBXBuildFile; fileRef = 560DD1DD68603916310A3D6D00C2A2E9 /* PinStepEnums.swift */; }; + D60F7FADD3D11059EF5DFF4F45EC50AD /* HTTPCallback.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33B18843F4F545B528299DF320C3E35D /* HTTPCallback.swift */; }; + D61239855AD97E68E515B2F012276817 /* GetNotificationAppID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A1F31090F24799E16B64220AAC6751C /* GetNotificationAppID.swift */; }; + D73DC6221C70BCF2FA3BA716124CE941 /* Cotter.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9A48344F731FE63AF131C01D1A6264F9 /* Cotter.storyboard */; }; + D77F19AD19B690B9D087E293A6A85589 /* ResetConfirmPINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A0AFB4BADC41F8B4B8E51009EE39B07 /* ResetConfirmPINViewController.swift */; }; + D7AA38E6F0A66ACDD3FBCFE959004620 /* EnrollUserPIN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2981A68AB7615367CD87CC98B10761E1 /* EnrollUserPIN.swift */; }; + D84854BAE2B12084AF4BAA0A257238DA /* UpdateConfirmNewPINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A98EA11F2945B2174579AF3A3165861 /* UpdateConfirmNewPINViewController.swift */; }; + D876104EFC3803F79DA702ABC8DDAD67 /* cotter-failure-x.png in Resources */ = {isa = PBXBuildFile; fileRef = EC1559236E6459EF19621A183AE76297 /* cotter-failure-x.png */; }; D882BFFB37E0C296A1E8A0393070C3B2 /* Pods-CotterIOS_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 95986473FC86E267CD415392EEA3E8C8 /* Pods-CotterIOS_Example-dummy.m */; }; - D882EC9DF2F5C328A4F75DC48C5F716B /* EnrolledMethods.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ECFB6160DC305FA2348A3E0D5232E4B /* EnrolledMethods.swift */; }; D9CFB8E5E354D7BE61D092259779F437 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8B1F2E5F44DB2989A6AD57C67A311B1 /* Equal.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; D9D6150D329A87CBB415FD349F0C50FD /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F3578D08C065214E6BD7A0983854C7E /* SourceLocation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; DB84342A0C0DEABBF7F729DE55225D82 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = C32779AE345D5D4A64299E2690976903 /* XCTestObservationCenter+Register.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - DBD2EEE32DDC451B55F9F4A632FAF7D4 /* cotter_logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 50B3E1C8CADA0CC8FE75700ED42656D5 /* cotter_logo.png */; }; + DC57C3837942ED3D556606F07CBC853D /* ResetPINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16408158C0595A4CACAB4FF371145432 /* ResetPINViewController.swift */; }; + DC83C1EF119A956AE6D206298D5E88CD /* CreateAuthenticationEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21168608E06726321FD40BE36C44A027 /* CreateAuthenticationEvent.swift */; }; DCD198D49C0A198A09525B7688EE3BC9 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88B6C3DDA67FD9E407F126262E4773E8 /* Async.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - DE7543DF220015DE53701E1528C4229F /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F4AF11A52A4BC68396935F562DC75A9 /* UIView.swift */; }; - DEE5AA719FA388CAF2E91D227894C015 /* UpdateCreateNewPINViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF18AA5AB687C13DB3527C5B67CBA095 /* UpdateCreateNewPINViewController.swift */; }; + DE7DDE9FFC6086FE1A746299B828E650 /* Identity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 337DF6BA2C8C2779146E8A3729FAF1E0 /* Identity.swift */; }; + E0233D6FEEC972D312F4783AAE10CF52 /* OAuthToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80507B6498F3E6A74AFAAF781A34F374 /* OAuthToken.swift */; }; E0EAC85F7ACFAD998B14FCE66144000E /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 16862B903C99F39E6BB1D628479EABCD /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E3DC54D950BDFC2C6FC89233FFDE9604 /* KeyStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33D920D16D40DE5ABE9456B818B5F18E /* KeyStore.swift */; }; E458AAE1AE9E2250F29806E5633B1860 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F55EA63059C3A968959F973CF77D38 /* Expression.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - E4858A063A5AAFD5A5A253F744FA17D7 /* CotterAPIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B46A8EDEFCB2DED6C03ED8B2300EDB6A /* CotterAPIService.swift */; }; - EC235F5ABF65B18DE759CD153007F37A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; + E61A11D6E78E67A61B682CF611E465F4 /* English.swift in Sources */ = {isa = PBXBuildFile; fileRef = 137A6C46ADD23967EA485198186843A5 /* English.swift */; }; + E908B8DBDA65B236A1B23C2034FFA39E /* CotterTokens.swift in Sources */ = {isa = PBXBuildFile; fileRef = 093FBAF63056F133C0C49650BD92C1DF /* CotterTokens.swift */; }; + EA35D305FC4F1C1B37BC2DA3BE6211FC /* RefreshToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = 346C435023992C857703A60DA3DECA31 /* RefreshToken.swift */; }; EC7EF3D5778783BD93EBC6F82016ADA9 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36836876E86E78E14DCA74A9AA1C2034 /* BeNil.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; ECCA1FA570A912E8CDB54EB843F1D030 /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = F21F937F9E8D6B0448AF81566FBB57E0 /* NimbleEnvironment.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - EE203091827227C3A11C99DD9A9F3404 /* QRScannerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCBA13B4BA2A62076365CCB747B00EAE /* QRScannerViewController.swift */; }; + ECE8586A3CF0665791F7F9B000E92904 /* Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FCA320F4159EC3C59F53B0D4D6D3C83 /* Protocols.swift */; }; + ED88B5127BA0BD08D805DC0072E7C5C5 /* cotter-fingerprint.png in Resources */ = {isa = PBXBuildFile; fileRef = 7FECBBCFB4D390D1CCE0CE1F18353B3A /* cotter-fingerprint.png */; }; EFB9CC9267297D8104141A4046AAD14E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; - F0CAF424DC3AB96B76D92FF93A112757 /* CotterStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5FD1BE50353E38C49E312C73781224E /* CotterStrings.swift */; }; + F03FB23892B610A4BE9984956DE290FC /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10F85EE5BF88ADEBB2CE625885B27100 /* UIViewController.swift */; }; + F1319FCC223BC044DA932B548E38467A /* QRScannerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789904FB9E597996A2429FDD89D1DFDD /* QRScannerViewController.swift */; }; F1CB698135AD46C8ED6A60767D968A81 /* TweeAttributedTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB24F74194E94BD6EA616A215732313E /* TweeAttributedTextField.swift */; }; F27A7DE93F66B0C12B4C646D99F5B9F4 /* CwlCatchException.m in Sources */ = {isa = PBXBuildFile; fileRef = 170E998576C22E37CECB2E80E552CCFA /* CwlCatchException.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - F2A3EB73E9490AF76E5E9AB259D0F21B /* RespondEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F986652B48D288538301F5CE75A6EC /* RespondEvent.swift */; }; - F2AEB06CD0DB0B91A78D74B48F1AEA3C /* English.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A02568D6F5D3CC64A5C172CD9E1A688 /* English.swift */; }; + F29420DB5FA80C166A169C108EC9D89E /* KeyStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 709538D2F61DD0358DC4F244F3C9F5A4 /* KeyStore.swift */; }; F310B21703A7BC438A09DDB96670583F /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4237C235B1965800E68EAA1DF5E9ECC8 /* AssertionRecorder.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - F4780C321E4B1C273E036D202C6DB484 /* UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1B9C516A3E58FA8021C61F2D9E246BD /* UIColor.swift */; }; + F396704DEE7A820C33BB5AB97C6A331A /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02C371006F5D777385A944944BD107FC /* UIView.swift */; }; + F44FBCB1D592C0DCA56C40A3BA47D0E3 /* tap_device.png in Resources */ = {isa = PBXBuildFile; fileRef = 57FEAD6C73311CC6DBCF80E799CF042B /* tap_device.png */; }; F4877B3857C780DCDB7F413A03F95600 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F437E80EE793EF011DD279F2B92FB10 /* BeCloseTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - F4FFE895891703FE26243B8EF157CA55 /* GetTrustedDeviceStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = D262431ED78D68A927A5FE19BC151334 /* GetTrustedDeviceStatus.swift */; }; - F5B2874DA47286FFC3243BDDD9DDF329 /* ColorSchemeObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA5D993F6DB5426FADCF3B5644C82385 /* ColorSchemeObject.swift */; }; - F712F4C0CA834990D217D5DE6138EE35 /* GetEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F31891D15AAB038FF8B9E6D8D9D008B /* GetEvent.swift */; }; - F750FCC8DE29F5FD18F1C109534CDC34 /* BottomPopupModal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86C4BFFFC2D2762CF974253E910845F2 /* BottomPopupModal.swift */; }; + F4B93C42466C3DA707D1E78D17F30914 /* cotter-fingerprint-failed.png in Resources */ = {isa = PBXBuildFile; fileRef = DC575A2DA9BF0CEB5B87ADB77A712028 /* cotter-fingerprint-failed.png */; }; + F510B2EE7CE988840A477A7F59C2CBFB /* TTGSnackbar.h in Headers */ = {isa = PBXBuildFile; fileRef = DCB123AC231A50B6A170937F04AE8F9F /* TTGSnackbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F55249F43DC591337B68934F29309772 /* AlertService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E17BAED846F95DE66683B357EAFDCC95 /* AlertService.swift */; }; F78E35D04F09485FA5DFA72FE1AD5AB2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = C1CEF9A23CD8C980D5FFAF0E6DC578A9 /* NMBStringify.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - F86315360CDC7EB7F8E1229AEAE5A65E /* BasicButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2119A5D567BEED3583CCCEDADF7A619 /* BasicButton.swift */; }; - F8C7BC4668BAB0C4E92FCA9B64CAFAC4 /* cotter-success-check.png in Resources */ = {isa = PBXBuildFile; fileRef = 40DC0F66A11EA0C5E9828A7B5356ED9E /* cotter-success-check.png */; }; F9E85548BF1EF8C5035BAF92233C34B6 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78156B7E8B25EACF80F710100947A1C /* RaisesException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - FB61B169F5A61898CB849B50E5C55200 /* CotterImages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EC35B71203E6CB36ABA33AE20F9B49C /* CotterImages.swift */; }; FBFBE93C1C6A2901050B714A997E7104 /* Pods-CotterIOS_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D7CA5BC1BCDA239F94F27B49E7794638 /* Pods-CotterIOS_Tests-dummy.m */; }; - FD5E6DED3282F69574AD6750C220DDB1 /* ResetPIN.swift in Sources */ = {isa = PBXBuildFile; fileRef = C664611C9D3EDB6B2B353B3FDAB49150 /* ResetPIN.swift */; }; - FE343E790F5E670159F451B601D3B774 /* APIServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 711429425E73CCC04B11AB3711767DF8 /* APIServiceProtocol.swift */; }; + FF13A3E8516C52E1C1EC6A17E40ED047 /* UpdateBiometricStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805B1D02B4657895948B1C143C868294 /* UpdateBiometricStatus.swift */; }; + FF256ED0E4DA022B049851E330C088FE /* FontObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDCD81E7871106106F9EA4C9D425DDF1 /* FontObject.swift */; }; FF920E965F1CA016FF302DE8C92C5122 /* CwlBadInstructionException.swift in Sources */ = {isa = PBXBuildFile; fileRef = A94680240C1DE27100ADD59F6D95F494 /* CwlBadInstructionException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - FFEE9D1EC0294F2C981E81CCF256D54C /* Cotter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999C977F2D6141B165CF78289FCF750D /* Cotter.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 192A827FBFE22A073B40A368E2818F68 /* PBXContainerItemProxy */ = { + 3340684C56E0251DA26DF9202EC46111 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 1CB35B409B95E585BFA946F3A465F9A1; - remoteInfo = TTGSnackbar; + remoteGlobalIDString = 210EB05CEC7AD9C148F90F752DE74C48; + remoteInfo = OneSignal; }; 36900A61A08D19552B40BAABB8096D50 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -282,13 +280,6 @@ remoteGlobalIDString = 6F7853FE0141DC68336C4306610A0FD7; remoteInfo = "Pods-CotterIOS_Example"; }; - 6F60DF8625E4060DDF7CB8BFDD6E5AF6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 73D2AD3718E111E4FD58AD933268EE14; - remoteInfo = "Cotter-Cotter"; - }; 77F5BAC7C848904D2CF6FD9C38E275CE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -310,12 +301,12 @@ remoteGlobalIDString = 6F13695E06195A78EA8A95F8C7ED0D2F; remoteInfo = Nimble; }; - BE2B06288908AD9238F9E4E0A87B0B58 /* PBXContainerItemProxy */ = { + CF44BA79A944D23DA6B22FC991FB1FB4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 210EB05CEC7AD9C148F90F752DE74C48; - remoteInfo = OneSignal; + remoteGlobalIDString = 1CB35B409B95E585BFA946F3A465F9A1; + remoteInfo = TTGSnackbar; }; E3A2C72C9F310FCC44AEA40F76294808 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -324,436 +315,443 @@ remoteGlobalIDString = 4D8229B0397AE8C2F7C11B3F9EFC9362; remoteInfo = Sourcery; }; + FDBEBF321518655337C8127A81B3A089 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 72725BFB38D9E265FF037056E19AF71B; + remoteInfo = "Cotter-Assets"; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0085DF565D94F492A7A8EA90DB728389 /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = index.html; path = docs/index.html; sourceTree = ""; }; - 014E386AE1A5CE8A7472C1A521B87371 /* BiometricSuccessPopup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BiometricSuccessPopup.swift; sourceTree = ""; }; + 00AAFC1E2FD9886378CDC96F3ED039F4 /* Cotter-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Cotter-umbrella.h"; sourceTree = ""; }; 01A980A57EEC18434079D4FF77FC211E /* FailureMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FailureMessage.swift; path = Sources/Nimble/FailureMessage.swift; sourceTree = ""; }; + 01B16D95BEA339F24EBB7751C0720EC5 /* RespondEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RespondEvent.swift; sourceTree = ""; }; 01E2A89BBFE54CA2355EBD95AF0AC6C0 /* ElementsEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ElementsEqual.swift; path = Sources/Nimble/Matchers/ElementsEqual.swift; sourceTree = ""; }; - 01FB95A1337E573402B9D61E8ADC0DA8 /* GetNewEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetNewEvent.swift; sourceTree = ""; }; - 02765C0554DB36C7631C0B39E78396EB /* VCImageKey.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = VCImageKey.html; path = docs/Classes/VCImageKey.html; sourceTree = ""; }; + 028F11EB3C6FB9981381576ACB722380 /* CotterNotificationCredential.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterNotificationCredential.html; path = docs/Classes/CotterNotificationCredential.html; sourceTree = ""; }; + 02B00AD9B524ABB9359D19E1A6AD5781 /* ResetCodeTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ResetCodeTextField.swift; sourceTree = ""; }; + 02C371006F5D777385A944944BD107FC /* UIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIView.swift; sourceTree = ""; }; 03ABFB604D9B4735F2D6BAED099ACBB7 /* CwlPreconditionTesting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlPreconditionTesting.h; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/include/CwlPreconditionTesting.h; sourceTree = ""; }; - 041916CEE73B9E1B2B870C8978A7A985 /* cotter-lapis-logo.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = "cotter-lapis-logo.png"; sourceTree = ""; }; - 0471DAE276ED80E2DA6CEF7DA906E584 /* TrustedViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TrustedViewController.swift; sourceTree = ""; }; - 05695EF23FA90CA1ED43838C92598750 /* UpdatePinStep.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = UpdatePinStep.html; path = docs/Enums/UpdatePinStep.html; sourceTree = ""; }; + 051D709A2E32592EB0C018D1615DC333 /* RegisterUser.html */ = {isa = PBXFileReference; includeInIndex = 1; name = RegisterUser.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/RegisterUser.html; sourceTree = ""; }; + 05AA6B3283BB9F81DB7E448A1B860432 /* CotterEventRequest.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterEventRequest.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterEventRequest.html; sourceTree = ""; }; 060516D17456A6C1283F8D4CE698CF42 /* Contain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Contain.swift; path = Sources/Nimble/Matchers/Contain.swift; sourceTree = ""; }; - 0633797D1FD4379F8009F4ED9E54CE88 /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.css; name = jazzy.css; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/css/jazzy.css; sourceTree = ""; }; + 0665161AFB03DB0CD4F8B6B24C142E28 /* ImageKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ImageKey.swift; sourceTree = ""; }; 06DE409A7DB16FD354D20F649E6CF30C /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Sources/Nimble/DSL.swift; sourceTree = ""; }; - 080E362694B98CDDEBBD04B774CEA85E /* UIColor.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = UIColor.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Extensions/UIColor.html; sourceTree = ""; }; - 08178A27D173D7A61EF27B0154A0BA39 /* Event.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = ""; }; - 0833A618E80B842D6A25800B3395BAD4 /* CrossApp.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrossApp.swift; sourceTree = ""; }; - 093A10918520E26EE055209CB5543A28 /* Cotter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Cotter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0A344D7867E754B240664FD4E7A2B89A /* UIExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIExtensions.swift; sourceTree = ""; }; - 0A83323C0E28831D609F21C3246F47F4 /* Typealiases.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Typealiases.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Typealiases.html; sourceTree = ""; }; - 0B5852DDBD0C9C3F47496AAF519A6DF1 /* CotterEventRequest.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CotterEventRequest.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterEventRequest.html; sourceTree = ""; }; - 0FD868FB807B81277CFABFED91612AE0 /* HTTPCallback.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HTTPCallback.swift; sourceTree = ""; }; + 08C92CC5DA6BBB74775D8280AE753782 /* PINBaseController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PINBaseController.swift; sourceTree = ""; }; + 093A10918520E26EE055209CB5543A28 /* Cotter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Cotter.framework; path = Cotter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 093FBAF63056F133C0C49650BD92C1DF /* CotterTokens.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterTokens.swift; sourceTree = ""; }; + 094903CF0F7AC0CD4164EAD2A0111333 /* AuthAlertMessages.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthAlertMessages.swift; sourceTree = ""; }; + 0A69DECF5235CA8ADE8D9F9FD66A038D /* Extensions.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Extensions.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Extensions.html; sourceTree = ""; }; + 0A6CF95284A5A3E0D5AAF254FB6FE895 /* UpdateUserPIN.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UpdateUserPIN.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/UpdateUserPIN.html; sourceTree = ""; }; + 0C24D82BE4E6243C6C28BD4ED9587ED3 /* Cotter-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Cotter-dummy.m"; sourceTree = ""; }; + 0D949794B74AD26675F8E97487D38C24 /* APIClient.html */ = {isa = PBXFileReference; includeInIndex = 1; name = APIClient.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Protocols/APIClient.html; sourceTree = ""; }; + 0EE6862C5A2466A39E6AD428A083F26F /* CreatePendingEventRequest.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CreatePendingEventRequest.html; path = docs/Structs/CreatePendingEventRequest.html; sourceTree = ""; }; + 0F84616AA27DDC69808DEDBCA2BECFC4 /* String.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = String.swift; sourceTree = ""; }; + 10B71F7D83A3587DDAA9E29C55C259B2 /* PINFinalViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PINFinalViewController.swift; path = Source/PINFinalViewController.swift; sourceTree = ""; }; + 10F85EE5BF88ADEBB2CE625885B27100 /* UIViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIViewController.swift; sourceTree = ""; }; 1151EB934A33EA8B5D4D188BAF0A8444 /* BeGreaterThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThan.swift; path = Sources/Nimble/Matchers/BeGreaterThan.swift; sourceTree = ""; }; - 1198E001FB14505CB3D4A4E60967E35A /* ResetPINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResetPINViewController.swift; path = Source/ResetPINViewController.swift; sourceTree = ""; }; - 12607B791F56B42787372A6B9ADA0F07 /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = jquery.min.js; path = docs/js/jquery.min.js; sourceTree = ""; }; - 12839DD27962FF236ABE64A10859FE7C /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.css; name = highlight.css; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/css/highlight.css; sourceTree = ""; }; - 1293ADAAE32FE1C2FAB48A1D25FAC988 /* Constants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; - 12C7254376CCB4266FD6E4EE07F0CF60 /* CotterConstants.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CotterConstants.html; path = docs/Structs/CotterConstants.html; sourceTree = ""; }; - 146438955AE290915C2611CB8FAD5FBD /* RegisterTrustedViewControllerKey.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = RegisterTrustedViewControllerKey.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/RegisterTrustedViewControllerKey.html; sourceTree = ""; }; + 11A5E780C5A519AB6FB8805677FEFC17 /* GetBiometricStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GetBiometricStatus.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/GetBiometricStatus.html; sourceTree = ""; }; + 129588B184DB58487123017907B6A72F /* UINavigationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UINavigationController.swift; sourceTree = ""; }; + 137A6C46ADD23967EA485198186843A5 /* English.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = English.swift; sourceTree = ""; }; 149003012ECA6E781A92B7CA908ABAE3 /* Pods-CotterIOS_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CotterIOS_Tests.release.xcconfig"; sourceTree = ""; }; - 149010F74B97096F436477728FC84FB8 /* UpdatePINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UpdatePINViewController.swift; path = Source/UpdatePINViewController.swift; sourceTree = ""; }; + 1522DD5DCDD68C74BFCFBD6B67D03498 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + 1607D62B9B430CFF01DAF0DB6EC58955 /* AlertImageKey.html */ = {isa = PBXFileReference; includeInIndex = 1; name = AlertImageKey.html; path = docs/Classes/AlertImageKey.html; sourceTree = ""; }; + 1608614DDF3442E9A4299887F6A8C40B /* GetNewEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GetNewEvent.html; path = docs/Structs/GetNewEvent.html; sourceTree = ""; }; + 160EFDEC61F9A530E093A1666B5A3680 /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/img/gh.png; sourceTree = ""; }; + 16408158C0595A4CACAB4FF371145432 /* ResetPINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResetPINViewController.swift; path = Source/ResetPINViewController.swift; sourceTree = ""; }; 16862B903C99F39E6BB1D628479EABCD /* NMBStringify.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBStringify.h; path = Sources/NimbleObjectiveC/NMBStringify.h; sourceTree = ""; }; - 16E8FEBC0DA30B264383EF71A77ABD81 /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/img/carat.png; sourceTree = ""; }; 170E998576C22E37CECB2E80E552CCFA /* CwlCatchException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CwlCatchException.m; path = Carthage/Checkouts/CwlPreconditionTesting/Dependencies/CwlCatchException/Sources/CwlCatchExceptionSupport/CwlCatchException.m; sourceTree = ""; }; - 176295CB6F99F067DD36CE36B792E5C3 /* EnrolledMethods.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = EnrolledMethods.html; path = docs/Structs/EnrolledMethods.html; sourceTree = ""; }; - 17CCC10B79D3E54167E93F6AE78E67AE /* TrustedDevice.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TrustedDevice.swift; sourceTree = ""; }; - 17E6B6274382013ED1A088D1050B7948 /* CotterClient.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CotterClient.html; path = docs/Classes/CotterClient.html; sourceTree = ""; }; - 186C962BB0FA0079ED68B7C9D6664B84 /* Pods_CotterIOS_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CotterIOS_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 195F8E97D8DF36C11295ED8F52631B26 /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.json; name = search.json; path = docs/search.json; sourceTree = ""; }; - 1A78EA5637719157569197443E15774D /* CotterMethods.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CotterMethods.html; path = docs/Structs/CotterMethods.html; sourceTree = ""; }; - 1B1FF51DFF76D5201D9A6194C494460A /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.json; name = search.json; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/search.json; sourceTree = ""; }; + 1771EA68E7DF3E3B9A017AA3DE93E7C2 /* PKCE.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PKCE.swift; sourceTree = ""; }; + 17DFE7658652C4E86E09A8964CC9B5B0 /* RegisterTrustedViewControllerKey.html */ = {isa = PBXFileReference; includeInIndex = 1; name = RegisterTrustedViewControllerKey.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/RegisterTrustedViewControllerKey.html; sourceTree = ""; }; + 186C962BB0FA0079ED68B7C9D6664B84 /* Pods_CotterIOS_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_CotterIOS_Example.framework; path = "Pods-CotterIOS_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1B383F1050C646D519AC5BE763430DFE /* CotterUser.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterUser.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterUser.html; sourceTree = ""; }; 1B391511A80E300377F9DB0B3AF246F7 /* DSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DSL.m; path = Sources/NimbleObjectiveC/DSL.m; sourceTree = ""; }; - 1BDB2FAF621E87A2B7E384C21F72090D /* EnrollUserPIN.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = EnrollUserPIN.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/EnrollUserPIN.html; sourceTree = ""; }; - 1C76311B3C904E0D1B239153FC58F17B /* Cotter.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Cotter.html; path = docs/Classes/Cotter.html; sourceTree = ""; }; - 1D9ACC081C81E48E1ACDBBB23F3DC026 /* RegisterUser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RegisterUser.swift; sourceTree = ""; }; - 1E1277E6E4950601601EAB84FE591500 /* CrossButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrossButton.swift; sourceTree = ""; }; - 1EC35B71203E6CB36ABA33AE20F9B49C /* CotterImages.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterImages.swift; sourceTree = ""; }; - 207EBBB645DB56C874845DD1B5362DB3 /* Cotter.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cotter.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 212BD8447C358C37A0948B8C51CCDB36 /* PINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PINViewController.swift; path = Source/PINViewController.swift; sourceTree = ""; }; - 2180909ED9FA3976B893F9D742FB2E02 /* GetTrustedDeviceEnrolledAny.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GetTrustedDeviceEnrolledAny.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/GetTrustedDeviceEnrolledAny.html; sourceTree = ""; }; - 21DA5BDF01575F01F97173A7878B78FC /* PINConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PINConfirmViewController.swift; path = Source/PINConfirmViewController.swift; sourceTree = ""; }; + 1C4C0D85E2F2DF23E780FDC7FFE365E2 /* Token.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Token.html; path = docs/Structs/Token.html; sourceTree = ""; }; + 1D2C5D108BD75FED8ABC7462CE909B6D /* RemoveTrustedDeviceStatus.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RemoveTrustedDeviceStatus.swift; sourceTree = ""; }; + 1E099368098DAE1150AADA943782B938 /* Assets.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = Assets.bundle; path = "Cotter-Assets.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1E2F7783BF4B7E2E0B423B9423650F68 /* UpdateBiometricStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UpdateBiometricStatus.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/UpdateBiometricStatus.html; sourceTree = ""; }; + 1FF25DF26AD7F4EC79E0ED6D262A9636 /* Extensions.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Extensions.html; path = docs/Extensions.html; sourceTree = ""; }; + 202A6BD927FFD1E6BAE8F220319ADC8E /* CotterMethods.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterMethods.html; path = docs/Structs/CotterMethods.html; sourceTree = ""; }; + 21168608E06726321FD40BE36C44A027 /* CreateAuthenticationEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreateAuthenticationEvent.swift; sourceTree = ""; }; 222D8F30B82B9E54ADA10C6140EAC98E /* TTGSnackbar.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TTGSnackbar.debug.xcconfig; sourceTree = ""; }; - 2289DB3C598DA062F48FABABC40FD2C8 /* CryptoUtil.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CryptoUtil.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/CryptoUtil.html; sourceTree = ""; }; - 22A32ACEDB52E7162DDD9840E6D9865A /* MockedAPIClient.generated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MockedAPIClient.generated.swift; sourceTree = ""; }; 23955CA4949A28E13233F4544140729D /* HaveCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HaveCount.swift; path = Sources/Nimble/Matchers/HaveCount.swift; sourceTree = ""; }; - 2419091C3A85D5B6DA832FDD67A63A3A /* CotterResponseWithChallenge.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CotterResponseWithChallenge.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterResponseWithChallenge.html; sourceTree = ""; }; - 252E7D1A8D0B3C894C21E326EB4DC20F /* VerifyPINResetCode.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = VerifyPINResetCode.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/VerifyPINResetCode.html; sourceTree = ""; }; - 25BAA4B7F4E618B46207A3C286E4C94A /* BiometricAuthenticationService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BiometricAuthenticationService.swift; sourceTree = ""; }; - 25BE2570CD457BD3C44447F17ADD36A8 /* cotter-failure-x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = "cotter-failure-x.png"; sourceTree = ""; }; - 25F44F1FB3D711BB05E2419B80BE8C45 /* Token.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Token.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/Token.html; sourceTree = ""; }; - 26E53076BF8AA5FB59133CAE4CD82D01 /* PINViewControllerKey.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = PINViewControllerKey.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/PINViewControllerKey.html; sourceTree = ""; }; + 243984DA1C49027AF8C333965C794AAB /* UpdatePinStep.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UpdatePinStep.html; path = docs/Enums/UpdatePinStep.html; sourceTree = ""; }; + 24D5F057E8DE026FDB204BEEFB6938F2 /* QRScannerViewControllerKey.html */ = {isa = PBXFileReference; includeInIndex = 1; name = QRScannerViewControllerKey.html; path = docs/Classes/QRScannerViewControllerKey.html; sourceTree = ""; }; + 259DC896FAF260E2C0808A2E86D20F91 /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; name = badge.svg; path = docs/badge.svg; sourceTree = ""; }; + 25F23B258793CECCC3B051EA48AD6A20 /* EnrollUserPIN.html */ = {isa = PBXFileReference; includeInIndex = 1; name = EnrollUserPIN.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/EnrollUserPIN.html; sourceTree = ""; }; + 25F715E59A05CEA82601C70AE8A03B42 /* RequestToken.html */ = {isa = PBXFileReference; includeInIndex = 1; name = RequestToken.html; path = docs/Structs/RequestToken.html; sourceTree = ""; }; + 265E07EC7E173B325AA5152559BB92CA /* PINViewControllerKey.html */ = {isa = PBXFileReference; includeInIndex = 1; name = PINViewControllerKey.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/PINViewControllerKey.html; sourceTree = ""; }; + 26AEF1BCE4D54B73AA138A422041DDF9 /* CotterCallback.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterCallback.html; path = docs/Classes/CotterCallback.html; sourceTree = ""; }; + 26F100CD0C3AFD0AD4519A112E4F3859 /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = ""; }; 2713DBD26EAFE7982785E98847F5E14E /* OneSignal.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OneSignal.release.xcconfig; sourceTree = ""; }; - 27327FE412B1C0645CE7F4B6853907F0 /* CotterIdentity.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CotterIdentity.html; path = docs/Structs/CotterIdentity.html; sourceTree = ""; }; - 29DD9347572ED3BDC353B76EE3C14738 /* NonTrustedKey.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = NonTrustedKey.html; path = docs/Classes/NonTrustedKey.html; sourceTree = ""; }; - 2A62013CC4131F0EBEC109837D1D71D3 /* PINBaseController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PINBaseController.swift; sourceTree = ""; }; - 2D19082F5E1CC2078708D7413E4018F2 /* AuthMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthMethod.swift; sourceTree = ""; }; - 2D69B5F9175B5C58CD7A1EC533FEFA31 /* Cotter.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Cotter.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/Cotter.html; sourceTree = ""; }; - 2D7819A300CE5E09BA9FB6DDF036BBD8 /* Token.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Token.swift; sourceTree = ""; }; - 2DC54EF53D0A8B11BD1227885EF8DD4D /* UINavigationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UINavigationController.swift; sourceTree = ""; }; - 2E1B9CE647D5EE5A3B093DCDE77283C5 /* CotterMethods.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CotterMethods.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterMethods.html; sourceTree = ""; }; - 2EB0C384CC9E399493D73E9FC789C7AB /* tap_device.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = tap_device.png; sourceTree = ""; }; - 2ED1A57F70D8AF659C5BC586667EF419 /* Indonesian.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Indonesian.html; path = docs/Classes/Indonesian.html; sourceTree = ""; }; + 27259E476CFE6F01928F93E8B91327F5 /* CotterNotificationCredential.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterNotificationCredential.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/CotterNotificationCredential.html; sourceTree = ""; }; + 28D6DFF2FE2E66CC5D9E10D06B6B5D39 /* EnrolledMethods.html */ = {isa = PBXFileReference; includeInIndex = 1; name = EnrolledMethods.html; path = docs/Structs/EnrolledMethods.html; sourceTree = ""; }; + 28E9AF88C7E2E363ACBA391C36B0C286 /* Callback.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Callback.swift; sourceTree = ""; }; + 2981A68AB7615367CD87CC98B10761E1 /* EnrollUserPIN.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EnrollUserPIN.swift; sourceTree = ""; }; + 298664FFD7EE481C278A9FFEA8CB0C91 /* CreateAuthenticationEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CreateAuthenticationEvent.html; path = docs/Structs/CreateAuthenticationEvent.html; sourceTree = ""; }; + 2A06B28921FFCDA3B3F22DD749657648 /* CotterAPIService.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterAPIService.html; path = docs/Classes/CotterAPIService.html; sourceTree = ""; }; + 2AFA2C2369E66748BFE3603448247509 /* Cotter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cotter.swift; path = Source/Cotter.swift; sourceTree = ""; }; + 2B96F7B8F96F171CA89A379935F3FB95 /* ColorSchemeObject.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ColorSchemeObject.html; path = docs/Classes/ColorSchemeObject.html; sourceTree = ""; }; + 2DABB1F5B3B9FEA57E67C6D359621D3F /* RequestPINReset.html */ = {isa = PBXFileReference; includeInIndex = 1; name = RequestPINReset.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/RequestPINReset.html; sourceTree = ""; }; 2F3578D08C065214E6BD7A0983854C7E /* SourceLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SourceLocation.swift; path = Sources/Nimble/Utils/SourceLocation.swift; sourceTree = ""; }; + 3089AEFF59C2C03EC2B6708C59E7E681 /* InternalCallback.html */ = {isa = PBXFileReference; includeInIndex = 1; name = InternalCallback.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Protocols/InternalCallback.html; sourceTree = ""; }; 312B988EF117AE4DE76A268D970131FE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 3210926F2E18722A48096F596D3F0344 /* BeAKindOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAKindOf.swift; path = Sources/Nimble/Matchers/BeAKindOf.swift; sourceTree = ""; }; - 32F986652B48D288538301F5CE75A6EC /* RespondEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RespondEvent.swift; sourceTree = ""; }; + 3245B237EA7F541BDC44B2D72C402EC3 /* UpdatePINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UpdatePINViewController.swift; path = Source/UpdatePINViewController.swift; sourceTree = ""; }; + 325A844935D6C093DF18D114EA074E85 /* CotterStrings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterStrings.swift; sourceTree = ""; }; + 3298E7E82C8700EEE34843C1510D8C31 /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.css; path = docs/css/jazzy.css; sourceTree = ""; }; + 32DFE347BD5D3C43A34119A056E89DB7 /* Event.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = ""; }; 33213F485DFCB6DD29276137BF71FC31 /* Pods-CotterIOS_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CotterIOS_Example-resources.sh"; sourceTree = ""; }; - 33371B50CFA84A7E8F7AEC547D48E4C4 /* UIImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIImageView.swift; sourceTree = ""; }; - 33CFCD89394CDCA7528A0C9D03E3D715 /* ResetPIN.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = ResetPIN.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/ResetPIN.html; sourceTree = ""; }; - 33D920D16D40DE5ABE9456B818B5F18E /* KeyStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeyStore.swift; sourceTree = ""; }; - 34CC0D5E0F72E1199E05E5EAC1DB65D0 /* RegisterBiometric.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = RegisterBiometric.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/RegisterBiometric.html; sourceTree = ""; }; + 3368102FB50B0F541AB4C9859B38E4AB /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; name = undocumented.json; path = docs/undocumented.json; sourceTree = ""; }; + 337DF6BA2C8C2779146E8A3729FAF1E0 /* Identity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Identity.swift; sourceTree = ""; }; + 33B18843F4F545B528299DF320C3E35D /* HTTPCallback.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HTTPCallback.swift; sourceTree = ""; }; + 3401C8430BA490890564A736A41CD8A2 /* GetBiometricStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GetBiometricStatus.html; path = docs/Structs/GetBiometricStatus.html; sourceTree = ""; }; + 346C435023992C857703A60DA3DECA31 /* RefreshToken.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RefreshToken.swift; sourceTree = ""; }; + 348A9197B52B60F119BC012A71B37A81 /* PINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PINViewController.swift; path = Source/PINViewController.swift; sourceTree = ""; }; 34F55EA63059C3A968959F973CF77D38 /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/Nimble/Expression.swift; sourceTree = ""; }; 353DE3150621E7B27CA596B4FD4B4835 /* CwlCatchException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlCatchException.h; path = Carthage/Checkouts/CwlPreconditionTesting/Dependencies/CwlCatchException/Sources/CwlCatchExceptionSupport/include/CwlCatchException.h; sourceTree = ""; }; - 3577C1E1D15ECD49F8A7133C6DD9EB5D /* LanguageObject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LanguageObject.swift; sourceTree = ""; }; + 35AE20A2F384310EC66229CD6AE1FAE0 /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Enums.html; path = docs/Enums.html; sourceTree = ""; }; 36836876E86E78E14DCA74A9AA1C2034 /* BeNil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeNil.swift; path = Sources/Nimble/Matchers/BeNil.swift; sourceTree = ""; }; + 37156249E9193C7BB9452DACA79EA2B8 /* RegisterTrustedViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RegisterTrustedViewController.swift; sourceTree = ""; }; + 37433606BD1CC3D8F8BA5252C04381E0 /* GetUser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetUser.swift; sourceTree = ""; }; + 3821FE28178C7497DE563E9463940094 /* RespondEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = RespondEvent.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/RespondEvent.html; sourceTree = ""; }; + 388B5CEF26E02093063CB7A24D15C35D /* RequestToken.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RequestToken.swift; sourceTree = ""; }; + 38FFC575F80891FDD21C66EB2EC40D17 /* ResetPIN.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ResetPIN.swift; sourceTree = ""; }; 39E9D15354EA75C871F7D2C36A87D452 /* NMBExceptionCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBExceptionCapture.m; path = Sources/NimbleObjectiveC/NMBExceptionCapture.m; sourceTree = ""; }; - 3A02568D6F5D3CC64A5C172CD9E1A688 /* English.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = English.swift; sourceTree = ""; }; - 3AB5B5F331DC3DDFC81C8D6923F9C1C8 /* UIViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIViewController.swift; sourceTree = ""; }; - 3B3E06327FFEB02F20C43F1004B90C2F /* CreatePendingEventRequest.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CreatePendingEventRequest.html; path = docs/Structs/CreatePendingEventRequest.html; sourceTree = ""; }; + 3A0AFB4BADC41F8B4B8E51009EE39B07 /* ResetConfirmPINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResetConfirmPINViewController.swift; path = Source/ResetConfirmPINViewController.swift; sourceTree = ""; }; 3BA5A1BAABD748502A2A6C4DCA5E88E3 /* BeLessThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThan.swift; path = Sources/Nimble/Matchers/BeLessThan.swift; sourceTree = ""; }; - 3BFCC5EB8A1A0590BF8B562AA83DBBF2 /* MockedCotterClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MockedCotterClient.swift; path = Source/MockedCotterClient.swift; sourceTree = ""; }; - 3D4F039A27B73AC470C34C9B3DCFBFB2 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + 3C413AEFF474B0D36666218DC73C2B49 /* CotterImages.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterImages.swift; sourceTree = ""; }; + 3D4428D60504538E9289643082B9B9B4 /* GetNewEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GetNewEvent.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/GetNewEvent.html; sourceTree = ""; }; 3D529E0F239F5A06BC489C0545636314 /* Pods-CotterIOS_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CotterIOS_Example.release.xcconfig"; sourceTree = ""; }; - 3DC4A534C4AD016CB0ACD344E3D3E038 /* CotterAPIService.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CotterAPIService.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/CotterAPIService.html; sourceTree = ""; }; + 3DF34BCB9150DF6B47EA3576ED8A19C6 /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.css; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/css/jazzy.css; sourceTree = ""; }; + 3EBD97F86BC5475B474CF47A4563429F /* CotterAPIService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterAPIService.swift; sourceTree = ""; }; 3FBD5495CB3FA0A5399679A503AA5B2E /* Pods-CotterIOS_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CotterIOS_Example-frameworks.sh"; sourceTree = ""; }; - 40DC0F66A11EA0C5E9828A7B5356ED9E /* cotter-success-check.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = "cotter-success-check.png"; sourceTree = ""; }; - 41B9C35632C09E19BC92417E142047D1 /* QRScannerViewControllerKey.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = QRScannerViewControllerKey.html; path = docs/Classes/QRScannerViewControllerKey.html; sourceTree = ""; }; + 400998401D914C7A70750A38813F2DFA /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Classes.html; path = docs/Classes.html; sourceTree = ""; }; 4237C235B1965800E68EAA1DF5E9ECC8 /* AssertionRecorder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionRecorder.swift; path = Sources/Nimble/Adapters/AssertionRecorder.swift; sourceTree = ""; }; + 42580C9AAF7D2546C2B99FEC78765C9E /* Indonesian.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Indonesian.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/Indonesian.html; sourceTree = ""; }; 4321DDFAF03E43E4DC6DC98827B85A5A /* BeEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeEmpty.swift; path = Sources/Nimble/Matchers/BeEmpty.swift; sourceTree = ""; }; 4335D6D44B2DAB43F96ED95FF94D2148 /* mach_excServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mach_excServer.h; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.h; sourceTree = ""; }; 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 437FC478C6C0DC2542D7EBDFAEB4DDAF /* Functional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Functional.swift; path = Sources/Nimble/Utils/Functional.swift; sourceTree = ""; }; - 43B84430B27105435A9CF3FB5FA2F9F2 /* UpdateUserPIN.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = UpdateUserPIN.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/UpdateUserPIN.html; sourceTree = ""; }; - 43CAA12E8592A1770E30F1D584AF5031 /* RegisterBiometric.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = RegisterBiometric.html; path = docs/Structs/RegisterBiometric.html; sourceTree = ""; }; + 43CF448BC4DAADBC2AA0E2F53A3590E3 /* Cotter.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Cotter.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/Cotter.html; sourceTree = ""; }; + 44B34C9DDA330269DF467FBBFF09C7F5 /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/img/carat.png; sourceTree = ""; }; + 45D4AC5AE41B2BBF4532F92D94C30818 /* QRScannerViewControllerKey.html */ = {isa = PBXFileReference; includeInIndex = 1; name = QRScannerViewControllerKey.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/QRScannerViewControllerKey.html; sourceTree = ""; }; 45DA45FA86B1F71F53ABE1B451D9FAE1 /* Nimble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nimble.h; path = Sources/Nimble/Nimble.h; sourceTree = ""; }; 45FD557367A95E98E651C284BC4B6549 /* TTGSnackbar-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TTGSnackbar-prefix.pch"; sourceTree = ""; }; 4664394262CD2E2E8FB1841D1D3AE211 /* SatisfyAnyOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SatisfyAnyOf.swift; path = Sources/Nimble/Matchers/SatisfyAnyOf.swift; sourceTree = ""; }; - 46DDD546496A377E7F47F2699EEE2006 /* CotterResponseWithChallenge.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CotterResponseWithChallenge.html; path = docs/Structs/CotterResponseWithChallenge.html; sourceTree = ""; }; - 49EB298287B96C5C33D7E1B35D6C3376 /* Transaction.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = Transaction.storyboard; path = Source/Transaction.storyboard; sourceTree = ""; }; - 4A6A1C4DCD4C6682F4A8558829530E1D /* Indonesian.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Indonesian.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/Indonesian.html; sourceTree = ""; }; + 48259877962C47526F6AB38BE69CDE26 /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; name = search.json; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/search.json; sourceTree = ""; }; + 48FC6DE8F8B4D2FB309BA53A86807CC7 /* CotterClient.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterClient.html; path = docs/Classes/CotterClient.html; sourceTree = ""; }; + 49E92870F05513A63DB7F239B19C2EBF /* warning.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = warning.png; sourceTree = ""; }; + 4AE30054435A82F18B0CF4DB69DD41A6 /* ResetPIN.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ResetPIN.html; path = docs/Structs/ResetPIN.html; sourceTree = ""; }; + 4B0B53FDAC8E6AC9447457B8EABA3099 /* GetTrustedDeviceStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GetTrustedDeviceStatus.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/GetTrustedDeviceStatus.html; sourceTree = ""; }; + 4BA097A3B62606CA5B4FA2347F2DBB43 /* PINConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PINConfirmViewController.swift; path = Source/PINConfirmViewController.swift; sourceTree = ""; }; + 4BF47624EDA0D3E51C2A45FF67D7D3B1 /* CotterEventRequest.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterEventRequest.html; path = docs/Structs/CotterEventRequest.html; sourceTree = ""; }; + 4C048C9B47B8A19DD961FEF9579A0FC8 /* MockedAPIService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MockedAPIService.swift; path = Source/MockedAPIService.swift; sourceTree = ""; }; 4C1CCB8E93449EC91A4E27BFF082DB38 /* Nimble-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Nimble-Info.plist"; sourceTree = ""; }; - 4C4F5EE41F31C2631DBD6654D3BF7059 /* EnrollUserPIN.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EnrollUserPIN.swift; sourceTree = ""; }; - 4E687385E57AE8EE60990F5D98FADE4C /* RespondEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = RespondEvent.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/RespondEvent.html; sourceTree = ""; }; + 4D4683E7F606347ED3510B4775F33FBC /* NonTrustedKey.html */ = {isa = PBXFileReference; includeInIndex = 1; name = NonTrustedKey.html; path = docs/Classes/NonTrustedKey.html; sourceTree = ""; }; + 4DA485BB9C88B1F6F51291BED48387D8 /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jquery.min.js; path = docs/js/jquery.min.js; sourceTree = ""; }; + 4E827FD078CD2BC27935BAAEF89FA501 /* CryptoUtil.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CryptoUtil.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/CryptoUtil.html; sourceTree = ""; }; 4E8F24EE702D7D35AD02F3E9605E1FBD /* SatisfyAllOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SatisfyAllOf.swift; path = Sources/Nimble/Matchers/SatisfyAllOf.swift; sourceTree = ""; }; 4EB5F63602C2C258D91E9F4960B56AB6 /* Sourcery.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Sourcery.debug.xcconfig; sourceTree = ""; }; + 4EFF9FB9850DE3289C2BB208A4E7DD1E /* UIButton.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UIButton.html; path = docs/Extensions/UIButton.html; sourceTree = ""; }; 4F9B18484A397566677B09E6D498FFC4 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThanOrEqual.swift; path = Sources/Nimble/Matchers/BeLessThanOrEqual.swift; sourceTree = ""; }; 4FC474F79FD116E6583735B2716BA1E8 /* ThrowAssertion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThrowAssertion.swift; path = Sources/Nimble/Matchers/ThrowAssertion.swift; sourceTree = ""; }; - 5014CD006C6C13D3E570C3EDEE5C3A08 /* UserInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UserInfo.swift; sourceTree = ""; }; - 50B3E1C8CADA0CC8FE75700ED42656D5 /* cotter_logo.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = cotter_logo.png; sourceTree = ""; }; - 515C3B2F1152B1BDC6B9B3CE90F40D7F /* PINFinalViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PINFinalViewController.swift; path = Source/PINFinalViewController.swift; sourceTree = ""; }; - 548AF493F6257067947B1CBF4AC41221 /* Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Collection.swift; sourceTree = ""; }; + 50192664722E80E546C054C72FA679BF /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Image.swift; sourceTree = ""; }; + 5023276C195D24B4B8F03B8C444E1552 /* LanguageObject.html */ = {isa = PBXFileReference; includeInIndex = 1; name = LanguageObject.html; path = docs/Classes/LanguageObject.html; sourceTree = ""; }; + 506733759570C1F47CB730FD7597D302 /* RequestPINReset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RequestPINReset.swift; sourceTree = ""; }; + 5383F6A3BFF4B3A48236C096EDFCAF2E /* Passwordless.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Passwordless.html; path = docs/Classes/Passwordless.html; sourceTree = ""; }; 54A11E8A247E8DEBF1B0CD432B423DAD /* Pods-CotterIOS_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-CotterIOS_Tests.modulemap"; sourceTree = ""; }; - 54ADA578D0A9ACDA29D2B78B6E47F9DF /* PKCE.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PKCE.swift; sourceTree = ""; }; - 55F6A204BD0AEB2C390638135493C52B /* Cotter.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = Cotter.storyboard; path = Source/Cotter.storyboard; sourceTree = ""; }; + 560DD1DD68603916310A3D6D00C2A2E9 /* PinStepEnums.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PinStepEnums.swift; sourceTree = ""; }; 562032DD2CB9FE2615112BBB5AF66C38 /* Pods-CotterIOS_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CotterIOS_Example.debug.xcconfig"; sourceTree = ""; }; - 56912317F8D7C152B29C26FECE6440C1 /* CotterEvents.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CotterEvents.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterEvents.html; sourceTree = ""; }; - 56F1E65DBC6A3BC5211539F420EA7A5B /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = ""; }; - 57480C7725B8CD644B39ECB76744DA3D /* UpdateProfile.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = UpdateProfile.storyboard; path = Source/UpdateProfile.storyboard; sourceTree = ""; }; - 58D2067B843174C60AB2BCE8FDC3C3AF /* CotterIdentity.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CotterIdentity.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterIdentity.html; sourceTree = ""; }; + 56C096310678D7EA88CFA9D75F4D6075 /* UIImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIImageView.swift; sourceTree = ""; }; + 57C9438BBBBCAA2A3E379599FADBCCA8 /* EnrolledMethods.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EnrolledMethods.swift; sourceTree = ""; }; + 57FEAD6C73311CC6DBCF80E799CF042B /* tap_device.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = tap_device.png; sourceTree = ""; }; + 589CFD819256999A6FE147FE33AFD6E9 /* CotterBasicResponse.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterBasicResponse.html; path = docs/Structs/CotterBasicResponse.html; sourceTree = ""; }; + 58D6181096D626AFBA169FE36C70FCE3 /* ErrorMessages.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ErrorMessages.swift; sourceTree = ""; }; 5930F998C5827F023F74A2CCCF801526 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/Nimble/Utils/Errors.swift; sourceTree = ""; }; - 5AE61536C916DD9ADCAAB32902489347 /* RequestPINReset.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = RequestPINReset.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/RequestPINReset.html; sourceTree = ""; }; + 5A1010004C9F46654231A5E699FB5EBB /* NonTrusted.html */ = {isa = PBXFileReference; includeInIndex = 1; name = NonTrusted.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/NonTrusted.html; sourceTree = ""; }; + 5A69F0B987432D04BEE5BC6A781270BC /* Cotter-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Cotter-prefix.pch"; sourceTree = ""; }; + 5A88F47F6CC981686439DFBACE0F84E9 /* CotterAPIError.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterAPIError.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Enums/CotterAPIError.html; sourceTree = ""; }; 5B2954D7DBC4042CD97153C6D0716015 /* MatcherFunc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherFunc.swift; path = Sources/Nimble/Matchers/MatcherFunc.swift; sourceTree = ""; }; 5B6BE05276AB9D35CD09A927E095356D /* Pods-CotterIOS_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CotterIOS_Tests-umbrella.h"; sourceTree = ""; }; - 5B8A00768593F957EE294A707807FD19 /* CotterClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterClient.swift; sourceTree = ""; }; - 5B98DEBC6914CEAD538BB5E0B563F898 /* UpdateBiometricStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = UpdateBiometricStatus.html; path = docs/Structs/UpdateBiometricStatus.html; sourceTree = ""; }; - 5C712792085DD744A75C839CA9CDEEB5 /* AutoEquatable.generated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AutoEquatable.generated.swift; sourceTree = ""; }; - 5DC726CE1EBC2482B4826B80B37FFB92 /* FontObject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FontObject.swift; sourceTree = ""; }; - 5E2319938F4867419AC03FE509820468 /* CotterNotificationCredential.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CotterNotificationCredential.html; path = docs/Classes/CotterNotificationCredential.html; sourceTree = ""; }; - 5E84E44838221D7AA0B795F1132AB708 /* ResetNewPINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResetNewPINViewController.swift; path = Source/ResetNewPINViewController.swift; sourceTree = ""; }; + 5D402F6B3FBC38568E6019387C827A5D /* AlertImageKey.html */ = {isa = PBXFileReference; includeInIndex = 1; name = AlertImageKey.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/AlertImageKey.html; sourceTree = ""; }; + 5D6A16FDFE3548CD124D028E1BD26C66 /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; name = search.json; path = docs/search.json; sourceTree = ""; }; 5E915FECA513FB8072680784946D924A /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleXCTestHandler.swift; path = Sources/Nimble/Adapters/NimbleXCTestHandler.swift; sourceTree = ""; }; 5EBF64961C9BF69F5399251C030E9657 /* Nimble.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nimble.release.xcconfig; sourceTree = ""; }; 5ECF2F95BC584440A52DDD4B3FC8CF10 /* ThrowError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThrowError.swift; path = Sources/Nimble/Matchers/ThrowError.swift; sourceTree = ""; }; - 5ECFB6160DC305FA2348A3E0D5232E4B /* EnrolledMethods.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EnrolledMethods.swift; sourceTree = ""; }; - 5F31891D15AAB038FF8B9E6D8D9D008B /* GetEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetEvent.swift; sourceTree = ""; }; - 5FF89A95678303747DE46CDA2E5626FF /* Typealiases.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Typealiases.html; path = docs/Typealiases.html; sourceTree = ""; }; - 602C88EABE77A06B574FC630AA7903D3 /* CotterUser.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CotterUser.html; path = docs/Structs/CotterUser.html; sourceTree = ""; }; - 603ABA1F90D3C4B6B389C0F3EA8C1000 /* UIButton.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = UIButton.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Extensions/UIButton.html; sourceTree = ""; }; - 603C520AA12440D8AAEF3B14DD9BC47A /* LanguageObject.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = LanguageObject.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/LanguageObject.html; sourceTree = ""; }; + 5F338D8F4DF6FFBE80D7698744E9C8FB /* GetEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetEvent.swift; sourceTree = ""; }; + 5FCA320F4159EC3C59F53B0D4D6D3C83 /* Protocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Protocols.swift; sourceTree = ""; }; + 5FE6E6222F6D8DDD1ABCA04F864CDCD0 /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; name = highlight.css; path = docs/css/highlight.css; sourceTree = ""; }; + 6023416CA6CF58CB6BB6DFF00E9AC986 /* CotterAPIService.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterAPIService.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/CotterAPIService.html; sourceTree = ""; }; + 6038F5B25A013C31A7A28507B58B732A /* RegisterBiometric.html */ = {isa = PBXFileReference; includeInIndex = 1; name = RegisterBiometric.html; path = docs/Structs/RegisterBiometric.html; sourceTree = ""; }; 6058D6B2BFE138A977BDB3DC079A56E7 /* BeginWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeginWith.swift; path = Sources/Nimble/Matchers/BeginWith.swift; sourceTree = ""; }; - 60CFFB5704E690E6504E62A6BDB762EC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = docs/docsets/Cotter.docset/Contents/Info.plist; sourceTree = ""; }; 613FD4635119075BC14860C4E246ADCC /* Expectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expectation.swift; path = Sources/Nimble/Expectation.swift; sourceTree = ""; }; - 61EDF753B531B9D53F41D296659681F6 /* CreateAuthenticationEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreateAuthenticationEvent.swift; sourceTree = ""; }; - 62AB80EDDFA746D7CFD547CD3853B5A6 /* ColorSchemeObject.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = ColorSchemeObject.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/ColorSchemeObject.html; sourceTree = ""; }; - 62F0893ABA76B03589FE7135331FBAB6 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Response.swift; sourceTree = ""; }; - 640DE3F0D6420E6D4F6F13F62EB38AE5 /* APIRequest.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = APIRequest.html; path = docs/Protocols/APIRequest.html; sourceTree = ""; }; - 6434CFAC65AE1076B1E3FDE7D85DAF90 /* CotterBasicResponse.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CotterBasicResponse.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterBasicResponse.html; sourceTree = ""; }; - 643509475A97F365F847AEA4148C5285 /* CreatePendingEventRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatePendingEventRequest.swift; sourceTree = ""; }; - 6467E5D0E8B6EB9064F768DEDC261CE3 /* NonTrustedKey.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = NonTrustedKey.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/NonTrustedKey.html; sourceTree = ""; }; + 62DDE21D20C6638DE0AA8E34B6229E6A /* Passwordless.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Passwordless.swift; sourceTree = ""; }; + 63377EB310EEA6E1C3EEAD96E0DD8B56 /* CotterClient.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterClient.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/CotterClient.html; sourceTree = ""; }; + 640701A966D347E2B835CA394ACCDA91 /* Default.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Default.swift; sourceTree = ""; }; + 64101DC9565CABAE267581E270B40C60 /* cotter-success-check.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = "cotter-success-check.png"; sourceTree = ""; }; 647B2D5A3ECD8228F3A264A3D3971C32 /* TweeTextField-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TweeTextField-umbrella.h"; sourceTree = ""; }; 649798858940C1CDDBF9D058E71E927D /* ToSucceed.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToSucceed.swift; path = Sources/Nimble/Matchers/ToSucceed.swift; sourceTree = ""; }; - 6519F9009F625F071A818263CB5BBC02 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Request.swift; sourceTree = ""; }; - 652E3948FAA404DA07E3A9CAB5E364D6 /* LoadingScreen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LoadingScreen.swift; path = Source/LoadingScreen.swift; sourceTree = ""; }; - 6678D83A894CAFEA0CEEBDF0AA407EE6 /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = jazzy.js; path = docs/js/jazzy.js; sourceTree = ""; }; 676846DE63A41F35EA1310A087578F39 /* ExpectationMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpectationMessage.swift; path = Sources/Nimble/ExpectationMessage.swift; sourceTree = ""; }; - 67F5A43BFC6608789BA9A857E8A5C400 /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = jquery.min.js; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/js/jquery.min.js; sourceTree = ""; }; - 680C0148AA3AE130D448DEFB63CBB5BE /* OAuthToken.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = OAuthToken.swift; sourceTree = ""; }; + 676CC1BCD769192968D3FB81F53985C8 /* docSet.dsidx */ = {isa = PBXFileReference; includeInIndex = 1; name = docSet.dsidx; path = docs/docsets/Cotter.docset/Contents/Resources/docSet.dsidx; sourceTree = ""; }; + 67CBA230890B7BD4F7290B1593006B95 /* RegisterBiometric.html */ = {isa = PBXFileReference; includeInIndex = 1; name = RegisterBiometric.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/RegisterBiometric.html; sourceTree = ""; }; 686FAD317AF9D64AA1E020AF10BEC282 /* OneSignal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OneSignal.framework; path = iOS_SDK/OneSignalSDK/Framework/OneSignal.framework; sourceTree = ""; }; - 687B469B2DB151222B901F4BC81C4635 /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = badge.svg; path = docs/badge.svg; sourceTree = ""; }; - 68849811A4BBE969D40C4406789EA6FD /* CotterConstants.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CotterConstants.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterConstants.html; sourceTree = ""; }; - 69043C319A03D35C7491A4E3B25E5BE2 /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.json; name = undocumented.json; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/undocumented.json; sourceTree = ""; }; - 691170059E344F526468418DA95405CF /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = badge.svg; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/badge.svg; sourceTree = ""; }; + 6936E114402B25353B83FED37BEA5E8E /* RespondEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = RespondEvent.html; path = docs/Structs/RespondEvent.html; sourceTree = ""; }; 698AA8272C4814F312019F98CF367858 /* TTGSnackbar.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TTGSnackbar.release.xcconfig; sourceTree = ""; }; - 6AB09E6F30FD5AE9968EFECF1F6E0891 /* Callback.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Callback.swift; sourceTree = ""; }; + 6A304430F102D9C1614983AA4E9DEC7B /* cotter_logo.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = cotter_logo.png; sourceTree = ""; }; 6B9C32A3BCD59379572E25E46658A989 /* CwlMachBadInstructionHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlMachBadInstructionHandler.h; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/include/CwlMachBadInstructionHandler.h; sourceTree = ""; }; - 6BBCCBF5CC7D9BEEC387AC1BBD61EFB3 /* mach_excServer.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mach_excServer.c; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.c; sourceTree = ""; }; - 6C577DBB5585403980D3B57B6DA188A4 /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/img/gh.png; sourceTree = ""; }; - 6CD92171CFB03D0DFAC1BFF4F6C5D437 /* CotterJWT.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterJWT.swift; sourceTree = ""; }; - 6D4FF93D72A8A6C35B155DF81AD57258 /* InternalCallback.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = InternalCallback.html; path = docs/Protocols/InternalCallback.html; sourceTree = ""; }; + 6BBCCBF5CC7D9BEEC387AC1BBD61EFB3 /* mach_excServer.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mach_excServer.c; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.c; sourceTree = ""; }; + 6CD589E863E90EFCBDD2CC6DEEBF46D8 /* CotterClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterClient.swift; sourceTree = ""; }; + 6DBD351439A8EA6EF9C655B64BAE606C /* GetUser.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GetUser.html; path = docs/Structs/GetUser.html; sourceTree = ""; }; + 6E9CD5500BDD69B59064FFE756C59360 /* Structs.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Structs.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs.html; sourceTree = ""; }; + 6F0CBDB5FE39FA473B4E14221738DB27 /* KeyboardView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = KeyboardView.xib; sourceTree = ""; }; 6F376CDCF047BB4C2A9E16BE93CD8E9B /* TTGSnackbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TTGSnackbar.swift; path = TTGSnackbar/TTGSnackbar.swift; sourceTree = ""; }; - 711429425E73CCC04B11AB3711767DF8 /* APIServiceProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = APIServiceProtocol.swift; sourceTree = ""; }; - 718D25F87A93ED9E352CB2E366F8F5D4 /* ColorSchemeObject.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = ColorSchemeObject.html; path = docs/Classes/ColorSchemeObject.html; sourceTree = ""; }; - 73522986844CA97C0DA5727C89B6D20F /* String.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = String.swift; sourceTree = ""; }; - 73C6D575A0821153945EEFC447B99740 /* AlertService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AlertService.swift; sourceTree = ""; }; + 70762DB3C40ED9F2298431D629FEE569 /* Constants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; + 709538D2F61DD0358DC4F244F3C9F5A4 /* KeyStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeyStore.swift; sourceTree = ""; }; + 709BEF864E3F2B9F409A4EF776B53BA3 /* VerifyPINResetCode.html */ = {isa = PBXFileReference; includeInIndex = 1; name = VerifyPINResetCode.html; path = docs/Structs/VerifyPINResetCode.html; sourceTree = ""; }; + 70ABCBB964A5DD020846B8BDCA459042 /* MockedAPIClient.generated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MockedAPIClient.generated.swift; sourceTree = ""; }; + 7155B70D9E3AA0174023BC163F082E1A /* CotterUser.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterUser.html; path = docs/Structs/CotterUser.html; sourceTree = ""; }; + 72ADCA8854128BD80B80CB03EE5A7CA6 /* RemoveTrustedDeviceStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; name = RemoveTrustedDeviceStatus.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/RemoveTrustedDeviceStatus.html; sourceTree = ""; }; + 72DC720805276810E56C63BD08785BC5 /* UpdateCreateNewPINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UpdateCreateNewPINViewController.swift; path = Source/UpdateCreateNewPINViewController.swift; sourceTree = ""; }; 73EBE410D0EC6976265EBCAABFA3862E /* AllPass.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllPass.swift; path = Sources/Nimble/Matchers/AllPass.swift; sourceTree = ""; }; - 7483570A5A8A1CAD719896272CE0F752 /* RegisterUser.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = RegisterUser.html; path = docs/Structs/RegisterUser.html; sourceTree = ""; }; - 75997D4C44D7AF23EE6D6948959DD6F1 /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Enums.html; path = docs/Enums.html; sourceTree = ""; }; + 73FB130B4E8A1E7B2D3D867C39DA35C0 /* VCImageKey.html */ = {isa = PBXFileReference; includeInIndex = 1; name = VCImageKey.html; path = docs/Classes/VCImageKey.html; sourceTree = ""; }; + 7640279BE7883046D4B0309309AB7BA7 /* Typealiases.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Typealiases.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Typealiases.html; sourceTree = ""; }; 76817A3D8A5B3B7BA9224986E6987154 /* CwlMachBadInstructionHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CwlMachBadInstructionHandler.m; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/CwlMachBadInstructionHandler.m; sourceTree = ""; }; + 76F63F0B8B151B0AF53071F03643410F /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/img/dash.png; sourceTree = ""; }; + 7798BDEA339A6A5FB89EF5E6E47ECF2D /* EnrolledMethods.html */ = {isa = PBXFileReference; includeInIndex = 1; name = EnrolledMethods.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/EnrolledMethods.html; sourceTree = ""; }; + 77DF85BC242C42AD9591CC916CDECE7C /* OneTimeCodeTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = OneTimeCodeTextField.swift; sourceTree = ""; }; + 787652874641A387983E0866F8198407 /* TransactionPINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransactionPINViewController.swift; path = Source/TransactionPINViewController.swift; sourceTree = ""; }; + 789904FB9E597996A2429FDD89D1DFDD /* QRScannerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = QRScannerViewController.swift; sourceTree = ""; }; + 7938A9E7D6CBAD5101E5BD7D7641D594 /* Identifier.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Identifier.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/Identifier.html; sourceTree = ""; }; 7A552898FBB26301F58C6D3EE039608A /* TTGSnackbar-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TTGSnackbar-dummy.m"; sourceTree = ""; }; - 7B22D546519FD9193E463BAC8F83E908 /* NonTrusted.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = NonTrusted.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/NonTrusted.html; sourceTree = ""; }; - 7BDE0E2A12F8DDD1715169533933B100 /* English.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = English.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/English.html; sourceTree = ""; }; - 7C4C8BF42C4F26140B5AC4ACB51EA54D /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Protocols.html; path = docs/Protocols.html; sourceTree = ""; }; + 7A98EA11F2945B2174579AF3A3165861 /* UpdateConfirmNewPINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UpdateConfirmNewPINViewController.swift; path = Source/UpdateConfirmNewPINViewController.swift; sourceTree = ""; }; + 7C9B520330906CBB15DD00E8A69C4971 /* APIRequest.html */ = {isa = PBXFileReference; includeInIndex = 1; name = APIRequest.html; path = docs/Protocols/APIRequest.html; sourceTree = ""; }; 7D4F25396AA1E36145EED9F75BE1BAB0 /* FontAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FontAnimation.swift; path = Sources/FontAnimation.swift; sourceTree = ""; }; - 7D5735447E61EF09D41D693D93E4CD90 /* TTGSnackbar.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TTGSnackbar.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7D5735447E61EF09D41D693D93E4CD90 /* TTGSnackbar.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = TTGSnackbar.framework; path = TTGSnackbar.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7DB8CA5B4CFD4189E070E53E3724116B /* Nimble-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nimble-dummy.m"; sourceTree = ""; }; 7E07D44425A3E47626F765325DF95965 /* AdapterProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AdapterProtocols.swift; path = Sources/Nimble/Adapters/AdapterProtocols.swift; sourceTree = ""; }; - 7E0849958075B84A24AB77175A26A5F8 /* TweeTextField.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TweeTextField.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7EFE6D19235D816F7DB49134E10E7A12 /* Cotter-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Cotter-umbrella.h"; sourceTree = ""; }; + 7E0849958075B84A24AB77175A26A5F8 /* TweeTextField.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = TweeTextField.framework; path = TweeTextField.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7F437E80EE793EF011DD279F2B92FB10 /* BeCloseTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeCloseTo.swift; path = Sources/Nimble/Matchers/BeCloseTo.swift; sourceTree = ""; }; - 8017841EB9577EF8100825854E67CA05 /* AlertImageKey.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = AlertImageKey.html; path = docs/Classes/AlertImageKey.html; sourceTree = ""; }; - 8163D319D7826D220DA6A2877EBBC3BC /* UserKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UserKey.swift; sourceTree = ""; }; - 829F195DEA33CC21D5C285FA01F11E7B /* CotterOAuthToken.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CotterOAuthToken.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterOAuthToken.html; sourceTree = ""; }; - 8377C6851C1CFA6896B2C67A0877E3F8 /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.css; name = jazzy.css; path = docs/css/jazzy.css; sourceTree = ""; }; - 837EF716155D50C32CE218110CB304DD /* Cotter-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Cotter-prefix.pch"; sourceTree = ""; }; - 839BA615E722A5F99D3EC8AA926C608F /* RemoveTrustedDeviceStatus.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RemoveTrustedDeviceStatus.swift; sourceTree = ""; }; - 841CE1D36469C3770BB06E8044C695E7 /* AlertImageKey.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = AlertImageKey.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/AlertImageKey.html; sourceTree = ""; }; - 8463199914805360F3374B7232CDE9FD /* CotterAPIService.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CotterAPIService.html; path = docs/Classes/CotterAPIService.html; sourceTree = ""; }; - 851E326CED726EC3D849054969230154 /* CotterOAuthToken.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CotterOAuthToken.html; path = docs/Structs/CotterOAuthToken.html; sourceTree = ""; }; - 852813852565142100F407DE /* UIWindow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIWindow.swift; sourceTree = ""; }; + 7FB3A6512F155E53A15A117D7B683E56 /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jquery.min.js; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/js/jquery.min.js; sourceTree = ""; }; + 7FECBBCFB4D390D1CCE0CE1F18353B3A /* cotter-fingerprint.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = "cotter-fingerprint.png"; sourceTree = ""; }; + 80431B2A6601F6B04F0524A94DF0909C /* BottomPopupModal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BottomPopupModal.swift; sourceTree = ""; }; + 80507B6498F3E6A74AFAAF781A34F374 /* OAuthToken.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = OAuthToken.swift; sourceTree = ""; }; + 805B1D02B4657895948B1C143C868294 /* UpdateBiometricStatus.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UpdateBiometricStatus.swift; sourceTree = ""; }; + 80CDF9510AE00741C206CDEE57F46773 /* ImageObject.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ImageObject.html; path = docs/Classes/ImageObject.html; sourceTree = ""; }; + 82003EB76568628F0947239A51F8B449 /* User.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = ""; }; 852A77A8E7A6E27DBCD441181CC13C6F /* TweePlaceholderTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweePlaceholderTextField.swift; path = Sources/TweePlaceholderTextField.swift; sourceTree = ""; }; - 857E4CDDF190838DAA903EBA7DB73D9B /* MockedAPIService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MockedAPIService.swift; path = Source/MockedAPIService.swift; sourceTree = ""; }; - 85C66702255116C8005C4AE6 /* BiometricRegistrationFailPopup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BiometricRegistrationFailPopup.swift; sourceTree = ""; }; - 85E75624253535AE0053A186 /* UIImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIImage.swift; sourceTree = ""; }; - 85E7562F2535362A0053A186 /* cotter.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = cotter.xcassets; sourceTree = ""; }; 86078D088DAF73254275FE099AD94FB9 /* AssertionDispatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionDispatcher.swift; path = Sources/Nimble/Adapters/AssertionDispatcher.swift; sourceTree = ""; }; 861BF7F1A8B408F4B0FD13D3188F5CF6 /* Pods-CotterIOS_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-CotterIOS_Example-acknowledgements.markdown"; sourceTree = ""; }; 865CC4160632814C685D4A1FCFB5C31D /* TweeTextField-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TweeTextField-prefix.pch"; sourceTree = ""; }; - 867AB8F5B655A618BA59B6C114E41AF5 /* ImageKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ImageKey.swift; sourceTree = ""; }; 869E197BD1779C605972DDB63C341ADB /* Sourcery.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Sourcery.release.xcconfig; sourceTree = ""; }; - 86C4BFFFC2D2762CF974253E910845F2 /* BottomPopupModal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BottomPopupModal.swift; sourceTree = ""; }; - 87D3C1046999147677C1FE285004A0AD /* Identifier.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Identifier.html; path = docs/Structs/Identifier.html; sourceTree = ""; }; - 883990872A046821A2127DCAFABE48DF /* QRScannerViewControllerKey.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = QRScannerViewControllerKey.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/QRScannerViewControllerKey.html; sourceTree = ""; }; - 8854E7252810B8E53BA03C6188BDE4C3 /* EnrollUserPIN.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = EnrollUserPIN.html; path = docs/Structs/EnrollUserPIN.html; sourceTree = ""; }; + 872333C3D3F7B799DB2073C57E373C0D /* UpdateUserPIN.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UpdateUserPIN.html; path = docs/Structs/UpdateUserPIN.html; sourceTree = ""; }; + 8775B1E82651C33477D1DB6E1E5B9038 /* UpdateUserPIN.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UpdateUserPIN.swift; sourceTree = ""; }; 88B6C3DDA67FD9E407F126262E4773E8 /* Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Async.swift; path = Sources/Nimble/Matchers/Async.swift; sourceTree = ""; }; + 88C4BD0EF80D760C2D6E7708D109AE56 /* NotificationCredential.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NotificationCredential.swift; sourceTree = ""; }; + 8977B4D15E6048DA5DA1DC758655B02A /* ResetPIN.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ResetPIN.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/ResetPIN.html; sourceTree = ""; }; 89B0FF91229B20BDBC11C854A1A3D8D6 /* BeLogical.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLogical.swift; path = Sources/Nimble/Matchers/BeLogical.swift; sourceTree = ""; }; - 89D9434E3EBACD420B8E8BE050A8153E /* CotterAPIError.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CotterAPIError.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Enums/CotterAPIError.html; sourceTree = ""; }; - 8A3CA60E3CEBCF491FE69D115E9780B9 /* UILabel.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = UILabel.html; path = docs/Extensions/UILabel.html; sourceTree = ""; }; - 8A42F0A62348D85B7672D3C79E726324 /* CotterEventRequest.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CotterEventRequest.html; path = docs/Structs/CotterEventRequest.html; sourceTree = ""; }; - 8A6D0F2B19002D1052D10252B199F8EC /* APIRequest.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = APIRequest.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Protocols/APIRequest.html; sourceTree = ""; }; - 8ABDD977523A13AC54568881B02D3A1B /* APIClient.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = APIClient.html; path = docs/Protocols/APIClient.html; sourceTree = ""; }; - 8C4AF5AF7305793D361D4115A4C4BB3C /* VerifyPINResetCode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VerifyPINResetCode.swift; sourceTree = ""; }; + 89FBBCF978C96551ED433C6ED8934BA2 /* NonTrustedKey.html */ = {isa = PBXFileReference; includeInIndex = 1; name = NonTrustedKey.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/NonTrustedKey.html; sourceTree = ""; }; + 8B816388B5A800514CF7F2BE2BCFA01A /* UserInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UserInfo.swift; sourceTree = ""; }; 8C7D17E7EDD15576794A81F95EFBAA28 /* Nimble.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nimble.debug.xcconfig; sourceTree = ""; }; - 8CB21BE2E59FABA97C8FE830E79F0FEE /* ErrorMessages.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ErrorMessages.swift; sourceTree = ""; }; - 8D54449EA61C87E2B15382098258EC01 /* KeyboardView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = KeyboardView.xib; sourceTree = ""; }; + 8CB735E4C51299ABD7C747002BB54330 /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.js; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/js/jazzy.js; sourceTree = ""; }; + 8CD77D83BC50E9C01828423077045C7D /* LanguageObject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LanguageObject.swift; sourceTree = ""; }; + 8D55857B4813BE03D268BBF7862CB233 /* EnrollUserPIN.html */ = {isa = PBXFileReference; includeInIndex = 1; name = EnrollUserPIN.html; path = docs/Structs/EnrollUserPIN.html; sourceTree = ""; }; 8D89C88CF5162422B9BD76B152B06DED /* MatcherProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherProtocols.swift; path = Sources/Nimble/Matchers/MatcherProtocols.swift; sourceTree = ""; }; - 8E4CF80A22BA5786F1B20D3385B1AFAD /* EnrollTrustedDevice.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EnrollTrustedDevice.swift; sourceTree = ""; }; - 8E79E76F0DC62C5E5CA89B43F99850CC /* CotterError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterError.swift; sourceTree = ""; }; - 8F0E28301E098214E043B7678F85E3A5 /* Cotter.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; path = Cotter.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 90B7CEA9AABD0A7F177D1BB488756C95 /* BiometricFailPopup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BiometricFailPopup.swift; sourceTree = ""; }; - 90C3FB4B37D75A7C13D410180699D0B2 /* Passwordless.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Passwordless.swift; sourceTree = ""; }; + 8E44DAD072A942C78AF70E54E68AA07F /* BiometricSuccessPopup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BiometricSuccessPopup.swift; sourceTree = ""; }; + 8FA716D255D5C8A6A017654AABD3C1D9 /* Cotter.tgz */ = {isa = PBXFileReference; includeInIndex = 1; name = Cotter.tgz; path = docs/docsets/Cotter.tgz; sourceTree = ""; }; + 905225EE9484C66A28FE9AB9CF03C3C2 /* CotterResponseWithChallenge.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterResponseWithChallenge.html; path = docs/Structs/CotterResponseWithChallenge.html; sourceTree = ""; }; + 91FDD4B9F50517D26C4D93A35BC39462 /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; name = index.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/index.html; sourceTree = ""; }; + 9242CF9D9CA440D1A0CB5E57F98A8B13 /* CotterError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterError.swift; sourceTree = ""; }; 929F5721B8A1B108D88379988548673D /* TweeActiveTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweeActiveTextField.swift; path = Sources/TweeActiveTextField.swift; sourceTree = ""; }; - 94156FD18A1E9A89BF649DE37A900D32 /* NonTrusted.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = NonTrusted.html; path = docs/Classes/NonTrusted.html; sourceTree = ""; }; - 958D270DFAFCFE79BFCCDFD5D327BADE /* ResetCodeTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ResetCodeTextField.swift; sourceTree = ""; }; + 95193D109C5A8FF979F08025FC997C10 /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Protocols.html; path = docs/Protocols.html; sourceTree = ""; }; 95986473FC86E267CD415392EEA3E8C8 /* Pods-CotterIOS_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CotterIOS_Example-dummy.m"; sourceTree = ""; }; + 959FBA22E499FEAC2B2FE9D981D043C7 /* CotterConstants.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterConstants.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterConstants.html; sourceTree = ""; }; 96D3F7FEA2F50936151690C579297EDF /* TweeTextField-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "TweeTextField-Info.plist"; sourceTree = ""; }; 97B7B42250CF9B8BE835B64DE01D3063 /* TTGSnackbar-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TTGSnackbar-umbrella.h"; sourceTree = ""; }; - 9978FE6D04568F1CB4DC185C925A62F0 /* CotterCallback.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CotterCallback.html; path = docs/Classes/CotterCallback.html; sourceTree = ""; }; - 999C977F2D6141B165CF78289FCF750D /* Cotter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cotter.swift; path = Source/Cotter.swift; sourceTree = ""; }; + 97CDAE0D457B0D01772F6BED3AAB6AC9 /* Passwordless.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Passwordless.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/Passwordless.html; sourceTree = ""; }; + 98A0A5F167C0859C6EBC6875C4ACB256 /* Indonesian.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Indonesian.swift; sourceTree = ""; }; + 98DDB50F6931462BE7506ABD4615E9FD /* CreatePendingEventRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatePendingEventRequest.swift; sourceTree = ""; }; + 999112B3C45DC4764B6FE0B820803CF2 /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Protocols.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Protocols.html; sourceTree = ""; }; + 9A1F31090F24799E16B64220AAC6751C /* GetNotificationAppID.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetNotificationAppID.swift; sourceTree = ""; }; + 9A48344F731FE63AF131C01D1A6264F9 /* Cotter.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = Cotter.storyboard; path = Source/Cotter.storyboard; sourceTree = ""; }; 9ADE6D49B7FFBC85AAF68585204E60E4 /* WeakTargetProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WeakTargetProxy.swift; path = Sources/WeakTargetProxy.swift; sourceTree = ""; }; - 9B8EE7A5C34AF85AE530341E60313490 /* GetUser.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GetUser.html; path = docs/Structs/GetUser.html; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9AE3F57034ABA3AAE3944EE518EDA441 /* AuthMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthMethod.swift; sourceTree = ""; }; + 9B306EDD4689FB24D344EB69A2C48B21 /* Cotter-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Cotter-Info.plist"; sourceTree = ""; }; + 9C020CDAE8AEF41A44CD2429A3E27932 /* ImageObject.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ImageObject.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/ImageObject.html; 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; }; 9DA1387BBB10D0E80B9AE748C6A9850B /* Pods-CotterIOS_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-CotterIOS_Example.modulemap"; sourceTree = ""; }; - 9E7FDAF685AF04C8A387E8EE773A11A6 /* Indonesian.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Indonesian.swift; sourceTree = ""; }; - 9EF6D49D8458294413E5D7FE3F74FC93 /* RequestToken.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = RequestToken.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/RequestToken.html; sourceTree = ""; }; + 9ED8AF56CA42DA13A7170DBA84C249F6 /* UILabel.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UILabel.html; path = docs/Extensions/UILabel.html; sourceTree = ""; }; 9EFB31C9AAC03276BD094B91DEF7DF9B /* Match.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Match.swift; path = Sources/Nimble/Matchers/Match.swift; sourceTree = ""; }; - 9F4AF11A52A4BC68396935F562DC75A9 /* UIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIView.swift; sourceTree = ""; }; - 9FBF9D5DB281BF4741A1A7D1D4BED0B7 /* CotterUser.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CotterUser.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterUser.html; sourceTree = ""; }; - A05C8AB60573A4B5E9F7C2BECE35A23A /* UIButtonBorderSide.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = UIButtonBorderSide.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Enums/UIButtonBorderSide.html; sourceTree = ""; }; - A0C7B81A677E52037A79B93119DF5166 /* UpdatePinStep.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = UpdatePinStep.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Enums/UpdatePinStep.html; sourceTree = ""; }; - A102851D5137469CF31B7BF1FB6B4854 /* PinStepEnums.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PinStepEnums.swift; sourceTree = ""; }; - A2BA261E65D0E5536EE19258DFE42696 /* ViewControllerClassNames.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ViewControllerClassNames.swift; sourceTree = ""; }; - A3AC2320E8C79C414694B813EB60A75F /* Cotter-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Cotter-Info.plist"; sourceTree = ""; }; - A3AC613CE8E17AEB858A66BC7DFF0A5F /* UIButtonBorderSide.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = UIButtonBorderSide.html; path = docs/Enums/UIButtonBorderSide.html; sourceTree = ""; }; + 9F18C353CBCC7F640144A9F1429A739D /* Cotter.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Cotter.debug.xcconfig; sourceTree = ""; }; + A04C0B43A99373D4145E25E8468BF57C /* GetBiometricStatus.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetBiometricStatus.swift; sourceTree = ""; }; + A18082C4A2441D93DF713E986D385865 /* UILabel.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UILabel.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Extensions/UILabel.html; sourceTree = ""; }; + A182E12DED51F8BCEE11C0F231EA733D /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; + A24D239642AC4D0DD5FF25315F7F9592 /* CreatePendingEventRequest.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CreatePendingEventRequest.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CreatePendingEventRequest.html; sourceTree = ""; }; + A2BD009AE620AA4F4F3D7C8AC7F8563E /* ColorSchemeObject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ColorSchemeObject.swift; sourceTree = ""; }; + A2C1104B7DFA62D97C53934C25378959 /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/img/carat.png; sourceTree = ""; }; + A303A6E769C1BEE95A78AB857B413621 /* ViewControllerClassNames.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ViewControllerClassNames.swift; sourceTree = ""; }; + A3686DC4FEDB7E12661CF556141209ED /* CrossApp.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrossApp.swift; sourceTree = ""; }; A3B104281D84C76D2A6F7D1BF86E4591 /* PostNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PostNotification.swift; path = Sources/Nimble/Matchers/PostNotification.swift; sourceTree = ""; }; A3BB48CBDAED3FB54F38EE19A007106F /* Nimble.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Nimble.modulemap; sourceTree = ""; }; - A4FC1546FC62699FD054217A9B693BE2 /* GetNotificationAppID.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetNotificationAppID.swift; sourceTree = ""; }; + A52A849F5091994F9B294718ED688B46 /* PINViewControllerKey.html */ = {isa = PBXFileReference; includeInIndex = 1; name = PINViewControllerKey.html; path = docs/Classes/PINViewControllerKey.html; sourceTree = ""; }; + A632BC81AB6C0A5FD776950778938D77 /* CotterIdentity.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterIdentity.html; path = docs/Structs/CotterIdentity.html; sourceTree = ""; }; + A6788FA52BB7516CB76A003400E25ED7 /* UIButton.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UIButton.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Extensions/UIButton.html; sourceTree = ""; }; A76B2EC11055AA7921D7A995624D0073 /* Predicate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Predicate.swift; path = Sources/Nimble/Matchers/Predicate.swift; sourceTree = ""; }; - A7F5C80616D4C03D5F04F9F1532F934E /* Cotter.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Cotter.modulemap; sourceTree = ""; }; - A8252FF59C2D3F9605832848938C9EAC /* OneTimeCodeTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = OneTimeCodeTextField.swift; sourceTree = ""; }; + A8752461DEB946DC7686E538A8FC36D4 /* GetTrustedDeviceEnrolledAny.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GetTrustedDeviceEnrolledAny.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/GetTrustedDeviceEnrolledAny.html; sourceTree = ""; }; A8B1F2E5F44DB2989A6AD57C67A311B1 /* Equal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Equal.swift; path = Sources/Nimble/Matchers/Equal.swift; sourceTree = ""; }; + A8BA3BCEBE3D8781A8E53D5F00E84D14 /* BiometricFailPopup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BiometricFailPopup.swift; sourceTree = ""; }; A94680240C1DE27100ADD59F6D95F494 /* CwlBadInstructionException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlBadInstructionException.swift; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlBadInstructionException.swift; sourceTree = ""; }; - A9B3E17B31E23D8268939B7159F63258 /* Identifier.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Identifier.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/Identifier.html; sourceTree = ""; }; - A9B5DCFCC3AEB897E024FE1374A6EE82 /* GetBiometricStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GetBiometricStatus.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/GetBiometricStatus.html; sourceTree = ""; }; - AB03D1E1955742C54D56783B447D78FA /* warning.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = warning.png; sourceTree = ""; }; - ACCDE17559770F96CB6872D005E466D8 /* Cotter.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Cotter.release.xcconfig; sourceTree = ""; }; - AD426F1672AAACDAAEBE6FCF8C980AB5 /* Protocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Protocols.swift; sourceTree = ""; }; + A9B382DF456F8287E92BFF876D45AF8A /* UserKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UserKey.swift; sourceTree = ""; }; + AADF0180871D18B7E1E6CC36AB329B1F /* ResourceBundle-Assets-Cotter-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Assets-Cotter-Info.plist"; sourceTree = ""; }; + AAE9EDA9533912092D8061743125D6E2 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Response.swift; sourceTree = ""; }; + ABB090991DECE08F582F8332544ACD0D /* GetEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GetEvent.html; path = docs/Structs/GetEvent.html; sourceTree = ""; }; + AC0F171A3715BE4E3F35540AF92CAEDB /* CotterMethods.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterMethods.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterMethods.html; sourceTree = ""; }; ADDC3528BBBF5B0D8EFC6EAE04F97DE9 /* Pods-CotterIOS_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CotterIOS_Tests.debug.xcconfig"; sourceTree = ""; }; - AE11A4F6816F79C8DD5266F604DAE79A /* Passwordless.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Passwordless.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/Passwordless.html; sourceTree = ""; }; - AE40F13C6877F057ECC055E0B4918E1A /* CotterTokens.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterTokens.swift; sourceTree = ""; }; + ADF59D656BDC9F5074FEAAFF0A37E8BB /* GetUser.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GetUser.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/GetUser.html; sourceTree = ""; }; AE5409CDC2F7B42829D48F4C67D5F97A /* Nimble-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nimble-umbrella.h"; sourceTree = ""; }; + AED0B7D9123367BE0859180D65F2A764 /* RegisterBiometric.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RegisterBiometric.swift; sourceTree = ""; }; AEE59E879BA1C4D9D619503732911B9C /* TweeTextField-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TweeTextField-dummy.m"; sourceTree = ""; }; - B02B1A4203B4184D719D157C1BB9FFEA /* RequestToken.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = RequestToken.html; path = docs/Structs/RequestToken.html; sourceTree = ""; }; - B07B81543E9AE08162E1B84382F76791 /* Config.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; + AF445BCE317BEE9E30FFDE1FE73E76FC /* VCImageKey.html */ = {isa = PBXFileReference; includeInIndex = 1; name = VCImageKey.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/VCImageKey.html; sourceTree = ""; }; + AFC33D8943F0AA41EBE62CE95840DCF7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = docs/docsets/Cotter.docset/Contents/Info.plist; sourceTree = ""; }; + B014E239D201D421D870559E2EBCC4D7 /* UIColor.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UIColor.html; path = docs/Extensions/UIColor.html; sourceTree = ""; }; + B1154B15F42A4968CA223C5F76F6E36F /* English.html */ = {isa = PBXFileReference; includeInIndex = 1; name = English.html; path = docs/Classes/English.html; sourceTree = ""; }; B15896BF7266C88E0A555CDAC3ECD7C8 /* Pods-CotterIOS_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CotterIOS_Example-acknowledgements.plist"; sourceTree = ""; }; - B1C0C7EBA1ED5B641E76C4A90E4711AE /* EnrollTrustedDevice.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = EnrollTrustedDevice.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/EnrollTrustedDevice.html; sourceTree = ""; }; - B2DB44684E2788D8BDAECFD42134D465 /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/img/dash.png; sourceTree = ""; }; - B46A8EDEFCB2DED6C03ED8B2300EDB6A /* CotterAPIService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterAPIService.swift; sourceTree = ""; }; - B558706B13BC53731F7283A365F18113 /* GetTrustedDeviceEnrolledAny.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetTrustedDeviceEnrolledAny.swift; sourceTree = ""; }; - B6A3B5F5F1CE0F64ECDFF0CBD94F68DB /* CreatePendingEventRequest.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CreatePendingEventRequest.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CreatePendingEventRequest.html; sourceTree = ""; }; + B218D24806BBF16BFF46772D946BF2A9 /* UIImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIImage.swift; sourceTree = ""; }; + B22AD32ECB8EA35FDA6C539C4CBE4A0F /* Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Collection.swift; sourceTree = ""; }; + B2BFD91549602FFEAF588045B67D47FA /* BasicButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BasicButton.swift; sourceTree = ""; }; + B43899F1C2A6CDADC2A0D0917F3306D2 /* GetTrustedDeviceEnrolledAny.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GetTrustedDeviceEnrolledAny.html; path = docs/Structs/GetTrustedDeviceEnrolledAny.html; sourceTree = ""; }; + B699688F82F02C9FA278FC815142D70E /* UpdateProfile.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = UpdateProfile.storyboard; path = Source/UpdateProfile.storyboard; sourceTree = ""; }; B6EBE63F8DF66C9C9FAC80EBD9779AEC /* TweeTextField.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TweeTextField.modulemap; sourceTree = ""; }; B72668E5AF1C55CC7B688E26721E7757 /* Pods-CotterIOS_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CotterIOS_Tests-acknowledgements.plist"; sourceTree = ""; }; - B7AF3A87D447265768124E18151FAF8D /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Image.swift; sourceTree = ""; }; - B8392B0EC756086E2846E501FB5DA976 /* GetUser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetUser.swift; sourceTree = ""; }; - B8B3CDEF79E1E185D19C32744765A49D /* Structs.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Structs.html; path = docs/Structs.html; sourceTree = ""; }; - B8C6924A52F12D7C6EEC8A67E62CE3CA /* English.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = English.html; path = docs/Classes/English.html; sourceTree = ""; }; - B951E46DAE238B00D1C7DD6B8F4ED246 /* RegisterBiometric.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RegisterBiometric.swift; sourceTree = ""; }; - B97193DAE29DDB7A09400E6B8DD983D4 /* ResourceBundle-Cotter-Cotter-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Cotter-Cotter-Info.plist"; sourceTree = ""; }; - BAE263041362D074978BB3B577DF0A05 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BB06C684FD81A71538E72C46D7956A0B /* Cotter.tgz */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = Cotter.tgz; path = docs/docsets/Cotter.tgz; sourceTree = ""; }; - BC1B9D05543F27102AD6AFFD5F10C664 /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/img/carat.png; sourceTree = ""; }; + B8986D1E3FD769D22E027D679AC32A6D /* RegisterUser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RegisterUser.swift; sourceTree = ""; }; + B8AF16B6D2533C25956E175D5C1E6E10 /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; name = badge.svg; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/badge.svg; sourceTree = ""; }; + B8B4D450CE98775505715011A462EDA3 /* CotterAPIError.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterAPIError.html; path = docs/Enums/CotterAPIError.html; sourceTree = ""; }; + B8E8177FD07E94E099141389ED287CB3 /* Functions.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Functions.html; path = docs/Functions.html; sourceTree = ""; }; + B8F5865C68B146B5E986499AB5DAB237 /* NonTrusted.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NonTrusted.swift; sourceTree = ""; }; + B950E8391AADFF36F2C7FF7A0CDA4D42 /* CotterNavigationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterNavigationViewController.swift; sourceTree = ""; }; + BAE263041362D074978BB3B577DF0A05 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Nimble.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BB7836160A331E7FCAF13CD1745734CC /* UIButtonBorderSide.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UIButtonBorderSide.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Enums/UIButtonBorderSide.html; sourceTree = ""; }; BD5A7A14D43A613AA982B949F7A29C10 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAnInstanceOf.swift; path = Sources/Nimble/Matchers/BeAnInstanceOf.swift; sourceTree = ""; }; - BDF017A436FE1B8279AAA86B467BECDA /* RegisterTrustedViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RegisterTrustedViewController.swift; sourceTree = ""; }; - BE112714C5FEEE2880BBE68E0C5AAAF3 /* CotterEvents.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CotterEvents.html; path = docs/Structs/CotterEvents.html; sourceTree = ""; }; - BE15241446ED33A2C2B4D07D58C8339D /* NotificationCredential.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NotificationCredential.swift; sourceTree = ""; }; - BE55645002CBF6D6DBBA796FE00C73FC /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Classes.html; path = docs/Classes.html; sourceTree = ""; }; - BEAB37EEA081492DF6D2A33BAF6E4ED4 /* LocalAuthService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LocalAuthService.swift; sourceTree = ""; }; + BDA8FE2402479EEFF550BE3F258926A4 /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/img/gh.png; sourceTree = ""; }; + BDF4315F994F9013A9BBD7FF142105DA /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Enums.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Enums.html; sourceTree = ""; }; + BE107AE5D74F7F29D8FFFCB1B8C64217 /* LoadingScreen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LoadingScreen.swift; path = Source/LoadingScreen.swift; sourceTree = ""; }; + BE52624F2BC59135BE26705B0DAE74BD /* ImageObject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ImageObject.swift; sourceTree = ""; }; BF58D80FBA7F9D2E380C4C57B9B0C705 /* CwlCatchException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlCatchException.swift; path = Carthage/Checkouts/CwlPreconditionTesting/Dependencies/CwlCatchException/Sources/CwlCatchException/CwlCatchException.swift; sourceTree = ""; }; - BFDEBEBEE60A8B1B66B308BF11914B30 /* Functions.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Functions.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Functions.html; sourceTree = ""; }; - C180B9127A8A150055811C73EEB28AB5 /* Cotter-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Cotter-dummy.m"; sourceTree = ""; }; - C1B9C516A3E58FA8021C61F2D9E246BD /* UIColor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIColor.swift; sourceTree = ""; }; C1CEF9A23CD8C980D5FFAF0E6DC578A9 /* NMBStringify.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBStringify.m; path = Sources/NimbleObjectiveC/NMBStringify.m; sourceTree = ""; }; - C246641FE472F51255577CA7A6FE904C /* Extensions.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Extensions.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Extensions.html; sourceTree = ""; }; - C2F087E8AFA6C030A643CBEF42D67888 /* LanguageObject.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = LanguageObject.html; path = docs/Classes/LanguageObject.html; sourceTree = ""; }; - C2F0DD818C5A841C489C836960ED302A /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Enums.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Enums.html; sourceTree = ""; }; + C2C6834822D798DB3C33FC4BC7C05ACF /* CrossButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrossButton.swift; sourceTree = ""; }; C32779AE345D5D4A64299E2690976903 /* XCTestObservationCenter+Register.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "XCTestObservationCenter+Register.m"; path = "Sources/NimbleObjectiveC/XCTestObservationCenter+Register.m"; sourceTree = ""; }; - C36835D9867BBA4F9146E84FAF481456 /* GetUser.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GetUser.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/GetUser.html; sourceTree = ""; }; - C3B4AC8A200B840D2C219C92CA2E7CB4 /* CotterAPIError.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CotterAPIError.html; path = docs/Enums/CotterAPIError.html; sourceTree = ""; }; C3BF3568526A4210DF24F9FE8E9C9B2A /* CwlDarwinDefinitions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlDarwinDefinitions.swift; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlDarwinDefinitions.swift; sourceTree = ""; }; - C408697FCE35BDF0D36905B0F2518CB7 /* Cotter.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Cotter.debug.xcconfig; sourceTree = ""; }; - C664611C9D3EDB6B2B353B3FDAB49150 /* ResetPIN.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ResetPIN.swift; sourceTree = ""; }; + C6862DCFD70455DDB2A2F51534E1F426 /* TrustedDevice.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TrustedDevice.swift; sourceTree = ""; }; C6A68EAA716617257CF4BB2D2CC49DA3 /* TTGSnackbar.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TTGSnackbar.modulemap; sourceTree = ""; }; - C6B34F982DBD8D1F29B8B53E687F8B18 /* ResetConfirmPINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResetConfirmPINViewController.swift; path = Source/ResetConfirmPINViewController.swift; sourceTree = ""; }; + C746A4002549200758A5999C924119A0 /* UIColor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIColor.swift; sourceTree = ""; }; C81240BABA09EB5B8FC1447ECF008815 /* DSL+Wait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DSL+Wait.swift"; path = "Sources/Nimble/DSL+Wait.swift"; sourceTree = ""; }; - C84907DB536A9C1B87FBE0B8E415E381 /* Passwordless.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Passwordless.html; path = docs/Classes/Passwordless.html; sourceTree = ""; }; + C8155AD8980ED90E7DBEEC3D6CD2A821 /* GetTrustedDeviceEnrolledAny.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetTrustedDeviceEnrolledAny.swift; sourceTree = ""; }; + C827FB9BA9EBA972F0FDC1F03E021EF9 /* GetTrustedDeviceStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GetTrustedDeviceStatus.html; path = docs/Structs/GetTrustedDeviceStatus.html; sourceTree = ""; }; C8E04DBA72420CD9D70E211ADDD43A17 /* TweeBorderedTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweeBorderedTextField.swift; path = Sources/TweeBorderedTextField.swift; sourceTree = ""; }; - CA460BE6F6CD3EC5A7F730D3C3BBF36C /* RegisterUser.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = RegisterUser.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/RegisterUser.html; sourceTree = ""; }; + C8E0B4AE991BC4EA49FDDC2B7788FABF /* LocalAuthService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LocalAuthService.swift; sourceTree = ""; }; + C98B841179C30F96CDFC3D21283104E5 /* VerifyPINResetCode.html */ = {isa = PBXFileReference; includeInIndex = 1; name = VerifyPINResetCode.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/VerifyPINResetCode.html; sourceTree = ""; }; + C9A4DAECFFB4DE43E2E83608E7EFC793 /* EnrollTrustedDevice.html */ = {isa = PBXFileReference; includeInIndex = 1; name = EnrollTrustedDevice.html; path = docs/Structs/EnrollTrustedDevice.html; sourceTree = ""; }; CABA845E517D7CC3F2AEAB454A374766 /* NMBExpectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NMBExpectation.swift; path = Sources/Nimble/Adapters/NMBExpectation.swift; sourceTree = ""; }; + CAF1D96D08844073BBE91B9B3906FF30 /* UIColor.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UIColor.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Extensions/UIColor.html; sourceTree = ""; }; + CAF49E5BC54DCE45DDB1C4B3B955DCA4 /* Cotter.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Cotter.modulemap; sourceTree = ""; }; + CB112AAD255468830258E8554A43357C /* BiometricRegistrationService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BiometricRegistrationService.swift; sourceTree = ""; }; CB1CCACE7C065FC463B5B7988A22C288 /* Await.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Await.swift; path = Sources/Nimble/Utils/Await.swift; sourceTree = ""; }; CB24F74194E94BD6EA616A215732313E /* TweeAttributedTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweeAttributedTextField.swift; path = Sources/TweeAttributedTextField.swift; sourceTree = ""; }; CB4D9C42713FB7CE378B9A18757A7D84 /* TTGSnackbar-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "TTGSnackbar-Info.plist"; sourceTree = ""; }; - CBC465148FA63D571077FC5718C9DCBD /* GetEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GetEvent.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/GetEvent.html; sourceTree = ""; }; - CC2BB8B48D27A986F6BC47006123725B /* CotterBasicResponse.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CotterBasicResponse.html; path = docs/Structs/CotterBasicResponse.html; sourceTree = ""; }; - CC4CDC048DE36215D1BDD9F8BAF59FB1 /* EnrolledMethods.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = EnrolledMethods.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/EnrolledMethods.html; sourceTree = ""; }; - CCBA13B4BA2A62076365CCB747B00EAE /* QRScannerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = QRScannerViewController.swift; sourceTree = ""; }; - CD49C71AD7F7FF5D3D789E6CEE128DF2 /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = jazzy.js; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/js/jazzy.js; sourceTree = ""; }; + CBF6BC3D014A2F8941D2B0C48E88081A /* VerifyPINResetCode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VerifyPINResetCode.swift; sourceTree = ""; }; + CCFC7E92A87E378FFD42099FBBB16DDE /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Classes.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes.html; sourceTree = ""; }; + CDAFA1CC80418127CA335601C9D30F03 /* English.html */ = {isa = PBXFileReference; includeInIndex = 1; name = English.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/English.html; sourceTree = ""; }; CE0947D46AC171778E19E5495566001B /* Pods-CotterIOS_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-CotterIOS_Tests-acknowledgements.markdown"; sourceTree = ""; }; CE12D24FD3D002C469ACDB238907772E /* Pods-CotterIOS_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CotterIOS_Example-umbrella.h"; sourceTree = ""; }; - CE18C584BC3F2F9589D8ACD8E67762B8 /* RegisterTrustedViewControllerKey.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = RegisterTrustedViewControllerKey.html; path = docs/Classes/RegisterTrustedViewControllerKey.html; sourceTree = ""; }; - CEBD5704C9955A04C4677DEB8DE4FE0C /* ImageObject.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = ImageObject.html; path = docs/Classes/ImageObject.html; sourceTree = ""; }; + CE692A1448A11FA598709183E7F53E63 /* MockedCotterClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MockedCotterClient.swift; path = Source/MockedCotterClient.swift; sourceTree = ""; }; + CE850C833DE0AC1BAEB4CFF4092663C2 /* CotterEvents.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterEvents.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterEvents.html; sourceTree = ""; }; + CF259207E39C5829817A930DE4A16D76 /* BiometricRegistrationFailPopup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BiometricRegistrationFailPopup.swift; sourceTree = ""; }; CF61476DE7A2C99B33F4C0E767F2F674 /* CwlCatchBadInstruction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlCatchBadInstruction.swift; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlCatchBadInstruction.swift; sourceTree = ""; }; - CFF68CCBD0D64B155C7F6020E98BA541 /* PINViewControllerKey.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = PINViewControllerKey.html; path = docs/Classes/PINViewControllerKey.html; sourceTree = ""; }; + CFAB8A460A4B815A2A15AD5F28C0B0DA /* cotter-lapis-logo.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = "cotter-lapis-logo.png"; sourceTree = ""; }; D071CFB5DFB9D8ED6F52A239AA068111 /* NMBObjCMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NMBObjCMatcher.swift; path = Sources/Nimble/Adapters/NMBObjCMatcher.swift; sourceTree = ""; }; - D262431ED78D68A927A5FE19BC151334 /* GetTrustedDeviceStatus.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetTrustedDeviceStatus.swift; sourceTree = ""; }; - D26C952BC6D5AD0A13A1C8ADB0D10632 /* docSet.dsidx */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = docSet.dsidx; path = docs/docsets/Cotter.docset/Contents/Resources/docSet.dsidx; sourceTree = ""; }; - D34955418BAFAE40B6473BD0E6946705 /* RemoveTrustedDeviceStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = RemoveTrustedDeviceStatus.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/RemoveTrustedDeviceStatus.html; sourceTree = ""; }; - D387A062F8CA63CF2CA083DB68ADA8E1 /* GetTrustedDeviceStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GetTrustedDeviceStatus.html; path = docs/Structs/GetTrustedDeviceStatus.html; sourceTree = ""; }; + D1C6EE7061E5A4BF4566B2B482982E5B /* BiometricAuthenticationService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BiometricAuthenticationService.swift; sourceTree = ""; }; + D2490CEDCAC9BAF63C3FC4DBD23C0E94 /* Structs.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Structs.html; path = docs/Structs.html; sourceTree = ""; }; + D337D24D1F0369C61C736474FD64D55F /* UIExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIExtensions.swift; sourceTree = ""; }; + D37F32DD7E5FC95EE0C005098C44FC6F /* CotterResponseWithChallenge.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterResponseWithChallenge.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterResponseWithChallenge.html; sourceTree = ""; }; + D3851D17F6F0FBD4FD08AB12768604D6 /* cotter.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; path = cotter.xcassets; sourceTree = ""; }; D3BEB7448A9846DB6CD9AD89C375F949 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBExceptionCapture.h; path = Sources/NimbleObjectiveC/NMBExceptionCapture.h; sourceTree = ""; }; - D3E1392A0632DCC392CA02F56803A7EC /* GetBiometricStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GetBiometricStatus.html; path = docs/Structs/GetBiometricStatus.html; sourceTree = ""; }; + D41861F11BBA7C09DB10A67A963F7E9A /* Cotter.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Cotter.html; path = docs/Classes/Cotter.html; sourceTree = ""; }; + D4B8A408EE88210307782C67BBBA5F1A /* CreateAuthenticationEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CreateAuthenticationEvent.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CreateAuthenticationEvent.html; sourceTree = ""; }; + D51D56C7F6DAE1D628FE447B23C976D5 /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.js; path = docs/js/jazzy.js; sourceTree = ""; }; D5AE9A1D50A3BB2768EDC88AED944DFC /* DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DSL.h; path = Sources/NimbleObjectiveC/DSL.h; sourceTree = ""; }; - D71262338C054814C70F35FC8D0ED4C4 /* RequestPINReset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RequestPINReset.swift; sourceTree = ""; }; D78156B7E8B25EACF80F710100947A1C /* RaisesException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RaisesException.swift; path = Sources/Nimble/Matchers/RaisesException.swift; sourceTree = ""; }; D7CA5BC1BCDA239F94F27B49E7794638 /* Pods-CotterIOS_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CotterIOS_Tests-dummy.m"; sourceTree = ""; }; - D80D1592A6A5A78C695AF2C519F43292 /* APIClient.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = APIClient.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Protocols/APIClient.html; sourceTree = ""; }; + D7EA0186886AF13C4699840CDD2AE35F /* Cotter.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Cotter.release.xcconfig; sourceTree = ""; }; + D803E2DD524AE381FF94D28A5FF68185 /* GetEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GetEvent.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/GetEvent.html; sourceTree = ""; }; DA5EF47987819D05D149E9A27E4A721D /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThanOrEqualTo.swift; path = Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift; sourceTree = ""; }; - DB68CA0D1EF201B0913CF43E97C9960A /* CotterClient.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CotterClient.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/CotterClient.html; sourceTree = ""; }; - DB7E2D93DBA88BB9A6C74BB0F2383847 /* UIColor.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = UIColor.html; path = docs/Extensions/UIColor.html; sourceTree = ""; }; - DBBA2A2C69B15CCE234566A74E29E4F4 /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/img/gh.png; sourceTree = ""; }; - DC517FC36DF7E7551850193FCEF442F5 /* cotter-fingerprint-failed.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = "cotter-fingerprint-failed.png"; sourceTree = ""; }; + DA69BC7AE7C2B44C9033A27AAFF923B8 /* EnrollTrustedDevice.html */ = {isa = PBXFileReference; includeInIndex = 1; name = EnrollTrustedDevice.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/EnrollTrustedDevice.html; sourceTree = ""; }; + DC575A2DA9BF0CEB5B87ADB77A712028 /* cotter-fingerprint-failed.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = "cotter-fingerprint-failed.png"; sourceTree = ""; }; + DCA0C439F64A7916647B02E9F739360D /* RegisterUser.html */ = {isa = PBXFileReference; includeInIndex = 1; name = RegisterUser.html; path = docs/Structs/RegisterUser.html; sourceTree = ""; }; DCB123AC231A50B6A170937F04AE8F9F /* TTGSnackbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TTGSnackbar.h; path = TTGSnackbar/TTGSnackbar.h; sourceTree = ""; }; - DD1B4882932C3B709B14010EC96CE6DE /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = index.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/index.html; sourceTree = ""; }; + DD0D6501D0E62BFA620545DCF780B9B5 /* Token.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Token.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/Token.html; sourceTree = ""; }; DD29FA317EF583A43BD37E1620735375 /* Nimble-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nimble-prefix.pch"; sourceTree = ""; }; DD5B47DF01D3215E3D25DA281B431155 /* BeIdenticalTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeIdenticalTo.swift; path = Sources/Nimble/Matchers/BeIdenticalTo.swift; sourceTree = ""; }; - E0A16806A07D9D58C1FE56DBE445310A /* RequestToken.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RequestToken.swift; sourceTree = ""; }; + DD96E7F76C30E15A3E931D0544ACA06E /* RequestToken.html */ = {isa = PBXFileReference; includeInIndex = 1; name = RequestToken.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/RequestToken.html; sourceTree = ""; }; + DEA2B89BB58B8D5B57880E7360EA5628 /* CotterEvents.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterEvents.html; path = docs/Structs/CotterEvents.html; sourceTree = ""; }; + DF00FFA87F50E3C65507AD99635B456F /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Request.swift; sourceTree = ""; }; + DFAF95A6200220DDD6B9529925FA156A /* CotterConstants.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterConstants.html; path = docs/Structs/CotterConstants.html; sourceTree = ""; }; + DFE6F2DD82E0BD18694F0708E1F29EBC /* ResetNewPINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResetNewPINViewController.swift; path = Source/ResetNewPINViewController.swift; sourceTree = ""; }; + E0C90BD04A3F678CB7FDAE7FD096A9D8 /* Typealiases.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Typealiases.html; path = docs/Typealiases.html; sourceTree = ""; }; E0FF7496DDE1D7468B75539E53852770 /* ContainElementSatisfying.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContainElementSatisfying.swift; path = Sources/Nimble/Matchers/ContainElementSatisfying.swift; sourceTree = ""; }; - E11EB3A236DA2E5AE96333DC6D0ED0A1 /* UIButton.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = UIButton.html; path = docs/Extensions/UIButton.html; sourceTree = ""; }; + E17BAED846F95DE66683B357EAFDCC95 /* AlertService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AlertService.swift; sourceTree = ""; }; E1AC1AC524A0FAB58D2A1781781829AA /* OneSignal.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OneSignal.debug.xcconfig; sourceTree = ""; }; E1E208120DD0FF06E5C181BCF4ABFEE4 /* Stringers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stringers.swift; path = Sources/Nimble/Utils/Stringers.swift; sourceTree = ""; }; - E2119A5D567BEED3583CCCEDADF7A619 /* BasicButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BasicButton.swift; sourceTree = ""; }; - E31546D5931C27E37766DFE785EFB787 /* CotterNotificationCredential.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CotterNotificationCredential.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/CotterNotificationCredential.html; sourceTree = ""; }; - E41FA14ADBE3BEF637781FBA4A16B507 /* KeyboardView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeyboardView.swift; sourceTree = ""; }; - E476B4C2176C94653CB7CEAE643FF7FD /* CreateAuthenticationEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CreateAuthenticationEvent.html; path = docs/Structs/CreateAuthenticationEvent.html; sourceTree = ""; }; - E52ACB3B762FDF90611DE01CD547FAE7 /* CotterNavigationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterNavigationViewController.swift; sourceTree = ""; }; - E5FD1BE50353E38C49E312C73781224E /* CotterStrings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterStrings.swift; sourceTree = ""; }; - E649BD21610D005BE645AB3473C23C62 /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/img/dash.png; sourceTree = ""; }; - E68BF3E14B4D0C4AC827252A0197C144 /* GetBiometricStatus.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetBiometricStatus.swift; sourceTree = ""; }; - E6C8C8776683377F0F107C9758F32C1A /* GetTrustedDeviceStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GetTrustedDeviceStatus.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/GetTrustedDeviceStatus.html; sourceTree = ""; }; - E742A114AC1944CEE49CC1DFCF385CDC /* CryptoUtil.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CryptoUtil.html; path = docs/Classes/CryptoUtil.html; sourceTree = ""; }; - E7EA38890904507C2BC7B0444D7C8CD2 /* UpdateBiometricStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = UpdateBiometricStatus.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/UpdateBiometricStatus.html; sourceTree = ""; }; + E2681F688220B1EE3A91E5F0449974E7 /* Token.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Token.swift; sourceTree = ""; }; + E270AFC2E154157BE3BC711D5C0A0CE6 /* Functions.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Functions.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Functions.html; sourceTree = ""; }; + E2DC783981130DA978F94F02FD843D4C /* TrustedViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TrustedViewController.swift; sourceTree = ""; }; + E34E7D814B0B527CB555CEF8110EFA8D /* KeyboardView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeyboardView.swift; sourceTree = ""; }; + E3CAF116582B54C9889CD70F456B06F3 /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; name = highlight.css; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/css/highlight.css; sourceTree = ""; }; + E56555D409D9438817B04DFC9FC1DD27 /* UIButtonBorderSide.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UIButtonBorderSide.html; path = docs/Enums/UIButtonBorderSide.html; sourceTree = ""; }; + E5EFA0DD12DE2222408A8A61FD651797 /* APIClient.html */ = {isa = PBXFileReference; includeInIndex = 1; name = APIClient.html; path = docs/Protocols/APIClient.html; sourceTree = ""; }; + E64FC6C34653E821D7E444C806F3697C /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/img/dash.png; sourceTree = ""; }; + E672C4497E07330EED754DAC658DB6A4 /* CotterJWT.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CotterJWT.swift; sourceTree = ""; }; E9D425DD344B8B28482264BEF6629ACC /* Pods-CotterIOS_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CotterIOS_Tests-Info.plist"; sourceTree = ""; }; - EA3E8CF4A265E931265AFADF18144B42 /* GetNewEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GetNewEvent.html; path = docs/Structs/GetNewEvent.html; sourceTree = ""; }; - EA7F9CCA1B788A4A0CF43F838639A025 /* EnrollTrustedDevice.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = EnrollTrustedDevice.html; path = docs/Structs/EnrollTrustedDevice.html; sourceTree = ""; }; - EB09F62AB8B50FFDE97BD6E79CBC3E4C /* VerifyPINResetCode.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = VerifyPINResetCode.html; path = docs/Structs/VerifyPINResetCode.html; sourceTree = ""; }; + EA055956A087836389AD821C21E4685E /* Config.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; EB5D460349AC3D552E63194BFC2FD0D2 /* MatchError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatchError.swift; path = Sources/Nimble/Matchers/MatchError.swift; sourceTree = ""; }; - EBE3B9C9C6A732F07CD3C599FEAF1C81 /* AuthAlertMessages.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthAlertMessages.swift; sourceTree = ""; }; - EC748646DC9AE911CA65C9DD7F947AC8 /* InternalCallback.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = InternalCallback.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Protocols/InternalCallback.html; sourceTree = ""; }; - EDBF4FA63A3DBEF7C0A58BC9AE41C3E5 /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Protocols.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Protocols.html; sourceTree = ""; }; - EE1B40FF31B92BAF9D01F6C2958C6DD9 /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.css; name = highlight.css; path = docs/css/highlight.css; sourceTree = ""; }; - EE372A462BCD33767FA0B5286D312B26 /* Structs.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Structs.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs.html; sourceTree = ""; }; + EBC8CCE11E0DC3FCF1522F2282A94236 /* NonTrusted.html */ = {isa = PBXFileReference; includeInIndex = 1; name = NonTrusted.html; path = docs/Classes/NonTrusted.html; sourceTree = ""; }; + EC1559236E6459EF19621A183AE76297 /* cotter-failure-x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = "cotter-failure-x.png"; sourceTree = ""; }; + EC82EFECF35C66DA5FDE4FAE2CC6FAC8 /* CotterOAuthToken.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterOAuthToken.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterOAuthToken.html; sourceTree = ""; }; + EE5C76D8CA64075ED745BB24289F8E0A /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; name = undocumented.json; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/undocumented.json; sourceTree = ""; }; EE7A4675A6E35BA142101F5A197E0FA2 /* Pods-CotterIOS_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CotterIOS_Example-Info.plist"; sourceTree = ""; }; - EE98947216A039A953A7DBB19292125F /* ImageObject.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = ImageObject.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/ImageObject.html; sourceTree = ""; }; - EF18AA5AB687C13DB3527C5B67CBA095 /* UpdateCreateNewPINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UpdateCreateNewPINViewController.swift; path = Source/UpdateCreateNewPINViewController.swift; sourceTree = ""; }; - EF31983242D074562EEB52CE1E037111 /* CreateAuthenticationEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CreateAuthenticationEvent.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CreateAuthenticationEvent.html; sourceTree = ""; }; - EF6D9E342497144CBB5C0949C9F6F43E /* TransactionPINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransactionPINViewController.swift; path = Source/TransactionPINViewController.swift; sourceTree = ""; }; - EFA501F23A049B54CAF9BE3119A5BA1E /* UpdateConfirmNewPINViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UpdateConfirmNewPINViewController.swift; path = Source/UpdateConfirmNewPINViewController.swift; sourceTree = ""; }; F08F715BC27686DEA15A316D4221B244 /* TweeTextField.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TweeTextField.release.xcconfig; sourceTree = ""; }; - F1471A6B9EC3DD56A96B7E4198CCAE89 /* Extensions.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Extensions.html; path = docs/Extensions.html; sourceTree = ""; }; - F1B1BC1B06E0C22A4436C523468072BE /* GetTrustedDeviceEnrolledAny.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GetTrustedDeviceEnrolledAny.html; path = docs/Structs/GetTrustedDeviceEnrolledAny.html; sourceTree = ""; }; + F10B8AA3D75EBCFECB2863DC3BA81402 /* APIRequest.html */ = {isa = PBXFileReference; includeInIndex = 1; name = APIRequest.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Protocols/APIRequest.html; sourceTree = ""; }; + F196E4478A5A781F24B6BF0725867811 /* InternalCallback.html */ = {isa = PBXFileReference; includeInIndex = 1; name = InternalCallback.html; path = docs/Protocols/InternalCallback.html; sourceTree = ""; }; F21F937F9E8D6B0448AF81566FBB57E0 /* NimbleEnvironment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleEnvironment.swift; path = Sources/Nimble/Adapters/NimbleEnvironment.swift; sourceTree = ""; }; - F31F6EB4C4C3A7B36BD0D281F27DFB06 /* GetNewEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GetNewEvent.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/GetNewEvent.html; sourceTree = ""; }; - F3747D80200B98679E581C6398C6E249 /* Identity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Identity.swift; sourceTree = ""; }; - F3DE5F8D9D826FFA2B6F06764BFC73E3 /* ResetPIN.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = ResetPIN.html; path = docs/Structs/ResetPIN.html; sourceTree = ""; }; - F5219768F4625F014180D9716E3168F8 /* UILabel.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = UILabel.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Extensions/UILabel.html; sourceTree = ""; }; + F2596C8D0025227CA6318A00BD5E28D0 /* Identifier.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Identifier.html; path = docs/Structs/Identifier.html; sourceTree = ""; }; + F298395C5D486DE92331F03AF9C033FC /* GetTrustedDeviceStatus.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetTrustedDeviceStatus.swift; sourceTree = ""; }; + F2ED55FE9D1F84654C2F23B0CD55A4D5 /* UpdatePinStep.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UpdatePinStep.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Enums/UpdatePinStep.html; sourceTree = ""; }; + F2F5952409D424F34FE5630F9FDA5C06 /* CotterCallback.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterCallback.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/CotterCallback.html; sourceTree = ""; }; + F3DFB50536666DC4F0A5A3AFC462FD47 /* GetNewEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetNewEvent.swift; sourceTree = ""; }; + F40E41F5D5BE465DEBCCCC60D2D60DA2 /* UpdateBiometricStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UpdateBiometricStatus.html; path = docs/Structs/UpdateBiometricStatus.html; sourceTree = ""; }; F537A18934107248B7A447CC5704329C /* EndWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EndWith.swift; path = Sources/Nimble/Matchers/EndWith.swift; sourceTree = ""; }; - F58816E6283180EA78C73EC9843C8AF3 /* Default.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Default.swift; sourceTree = ""; }; - F5A1D652CB780262E64C19E3BD5F1A10 /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.json; name = undocumented.json; path = docs/undocumented.json; sourceTree = ""; }; - F655C4892C02A9F4DB0AA26C5D8990D9 /* Token.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Token.html; path = docs/Structs/Token.html; sourceTree = ""; }; - F66AE16473FCBCF369BFE116CCD998B9 /* cotter-fingerprint.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = "cotter-fingerprint.png"; sourceTree = ""; }; + F5E208904DD9EBB1B082A61C4E5BCB3C /* Indonesian.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Indonesian.html; path = docs/Classes/Indonesian.html; sourceTree = ""; }; F69BCC769985CCFCA41852F10DCD5322 /* Pods-CotterIOS_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CotterIOS_Tests-frameworks.sh"; sourceTree = ""; }; - F6FD5CD2EA5C15E68B254D2062B77A47 /* RefreshToken.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RefreshToken.swift; sourceTree = ""; }; - F7F2D49975727203052BFBDFF09A7B52 /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Classes.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes.html; sourceTree = ""; }; - F7F9DC07965496DFB37C85531A269CC2 /* RequestPINReset.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = RequestPINReset.html; path = docs/Structs/RequestPINReset.html; sourceTree = ""; }; - F96B6FE42BADF68CEDD38A675D9B5B6D /* User.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = ""; }; - F96CD1BD0F1462CD17B26515AC55CEA8 /* Pods_CotterIOS_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CotterIOS_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F9BF8B5C073050136B4238B06D469867 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - FA342A48FFA01373FCE5021A42FD2A44 /* VCImageKey.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = VCImageKey.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/VCImageKey.html; sourceTree = ""; }; + F6BF2FD7E052CD6735DE1779E94AED48 /* Cotter.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = Cotter.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + F899392A6DE6D85F37AB777624DCD3A5 /* RemoveTrustedDeviceStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; name = RemoveTrustedDeviceStatus.html; path = docs/Structs/RemoveTrustedDeviceStatus.html; sourceTree = ""; }; + F96CD1BD0F1462CD17B26515AC55CEA8 /* Pods_CotterIOS_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_CotterIOS_Tests.framework; path = "Pods-CotterIOS_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + F99622DB8A92EFA774473026E5264A2C /* CryptoUtil.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CryptoUtil.html; path = docs/Classes/CryptoUtil.html; sourceTree = ""; }; + F9A2119C9C30D753C97D92ADCBFBB43D /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; name = index.html; path = docs/index.html; sourceTree = ""; }; FA376A9FBF6976E679026F612559772F /* BeVoid.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeVoid.swift; path = Sources/Nimble/Matchers/BeVoid.swift; sourceTree = ""; }; - FA5D993F6DB5426FADCF3B5644C82385 /* ColorSchemeObject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ColorSchemeObject.swift; sourceTree = ""; }; - FA9998AEEBCF47864C0A91DE48E115C9 /* RemoveTrustedDeviceStatus.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = RemoveTrustedDeviceStatus.html; path = docs/Structs/RemoveTrustedDeviceStatus.html; sourceTree = ""; }; - FB5455819B215830267835ABF9A740A7 /* ImageObject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ImageObject.swift; sourceTree = ""; }; - FB681B6D77ADB23073C91701B19CC719 /* UpdateUserPIN.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UpdateUserPIN.swift; sourceTree = ""; }; - FC80103637CE38CD4FDE4CE7BAE617AA /* UpdateBiometricStatus.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UpdateBiometricStatus.swift; sourceTree = ""; }; - FC9D94A00EE43821AA79023703E71EA3 /* Functions.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Functions.html; path = docs/Functions.html; sourceTree = ""; }; - FD1C21456CC23FDF21C62641063122D4 /* BiometricRegistrationService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BiometricRegistrationService.swift; sourceTree = ""; }; - FD8E9DD053809F59EFEDCFB4B8C3DB04 /* NonTrusted.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NonTrusted.swift; sourceTree = ""; }; - FDE58F9604C018B6367F9E6FA8341A7C /* GetEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GetEvent.html; path = docs/Structs/GetEvent.html; sourceTree = ""; }; - FE32D94ED0280CFDC71CC681ECB7BD28 /* RespondEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = RespondEvent.html; path = docs/Structs/RespondEvent.html; sourceTree = ""; }; - FECC04DBF88536587F2CA5A2E9BA6086 /* CotterCallback.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CotterCallback.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/CotterCallback.html; sourceTree = ""; }; - FEF3A21C1DA0AEAC0FF5ECC8D6916B30 /* UpdateUserPIN.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = UpdateUserPIN.html; path = docs/Structs/UpdateUserPIN.html; sourceTree = ""; }; + FA682EA90C21A566806A7F43AFBA0D80 /* EnrollTrustedDevice.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EnrollTrustedDevice.swift; sourceTree = ""; }; + FA85A0795B6474141AFD1DB1060BC920 /* AutoEquatable.generated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AutoEquatable.generated.swift; sourceTree = ""; }; + FB73BD23AE6902EE974669064A2EFD8A /* ColorSchemeObject.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ColorSchemeObject.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/ColorSchemeObject.html; sourceTree = ""; }; + FCA6C7AF48280A98C51955A1D390FB69 /* LanguageObject.html */ = {isa = PBXFileReference; includeInIndex = 1; name = LanguageObject.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Classes/LanguageObject.html; sourceTree = ""; }; + FCCD9D7C49D7AE7A574156E608D2CCAC /* CotterBasicResponse.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterBasicResponse.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterBasicResponse.html; sourceTree = ""; }; + FD3ACEE8367ED3736B057157369BF4BB /* RequestPINReset.html */ = {isa = PBXFileReference; includeInIndex = 1; name = RequestPINReset.html; path = docs/Structs/RequestPINReset.html; sourceTree = ""; }; + FDCD81E7871106106F9EA4C9D425DDF1 /* FontObject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FontObject.swift; sourceTree = ""; }; + FE2211D83ECD70074A7D4D0108302684 /* Transaction.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = Transaction.storyboard; path = Source/Transaction.storyboard; sourceTree = ""; }; + FE364B51FD880D80697701FEF29AD964 /* UIWindow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIWindow.swift; sourceTree = ""; }; + FE5D9CBF02B23D535665012EDA2CE2F3 /* RegisterTrustedViewControllerKey.html */ = {isa = PBXFileReference; includeInIndex = 1; name = RegisterTrustedViewControllerKey.html; path = docs/Classes/RegisterTrustedViewControllerKey.html; sourceTree = ""; }; + FE9796A8A548333A9174CD02EBFDB0A8 /* APIServiceProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = APIServiceProtocol.swift; sourceTree = ""; }; + FEA58955001BFB44D18850F2D2D1D10B /* CotterIdentity.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterIdentity.html; path = docs/docsets/Cotter.docset/Contents/Resources/Documents/Structs/CotterIdentity.html; sourceTree = ""; }; FF35FBC7409C7C14CEE1E164CEB46F74 /* TweeTextField.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TweeTextField.debug.xcconfig; sourceTree = ""; }; + FF72A39F57A3006BBA8B4396EE68EC89 /* CotterOAuthToken.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CotterOAuthToken.html; path = docs/Structs/CotterOAuthToken.html; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -773,49 +771,68 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4DA9FAA7FADA03546DC848CD4741571A /* Frameworks */ = { + 53D8B91D4215E5A9B46AE887BA5BB789 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 54C170C415AC538799C295A89B3F1716 /* Foundation.framework in Frameworks */, + 3752D5BC0E14222D9963CEC475246972 /* Foundation.framework in Frameworks */, + 1D2BF0EF7336651B7CB7E2BC7B83F9CB /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 53D8B91D4215E5A9B46AE887BA5BB789 /* Frameworks */ = { + 55C81EE76C6A69F1F69792A679310C68 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3752D5BC0E14222D9963CEC475246972 /* Foundation.framework in Frameworks */, - 1D2BF0EF7336651B7CB7E2BC7B83F9CB /* UIKit.framework in Frameworks */, + EFB9CC9267297D8104141A4046AAD14E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 55C81EE76C6A69F1F69792A679310C68 /* Frameworks */ = { + 6A3ABA7F18899EAF058B5BFFA2627A63 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EFB9CC9267297D8104141A4046AAD14E /* Foundation.framework in Frameworks */, + 8C684E20D58BB293FD22F4EAB5EB45AA /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7CA687F37081FB687FC430CEAFB93B49 /* Frameworks */ = { + 7D2135E588517FE639133AE05DFF057E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 8D0C1F333EC8D477DAE51C6FE3D4A0C2 /* Frameworks */ = { + 925FED1D86C3AF1BC1572F0A84239B76 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EC235F5ABF65B18DE759CD153007F37A /* Foundation.framework in Frameworks */, + 8BC51374B260FBA1171BC3040B626636 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 0488ED4F2E4A8AB048F0FB6F78A2B2AE /* Mocks */ = { + isa = PBXGroup; + children = ( + 5FCA320F4159EC3C59F53B0D4D6D3C83 /* Protocols.swift */, + ); + name = Mocks; + path = Source/Mocks; + sourceTree = ""; + }; + 0904F15FA31107EE0E88CAAEEBC499EB /* Util */ = { + isa = PBXGroup; + children = ( + 50192664722E80E546C054C72FA679BF /* Image.swift */, + E2681F688220B1EE3A91E5F0449974E7 /* Token.swift */, + ); + name = Util; + path = Source/Util; + sourceTree = ""; + }; 0CCF5417A92EE8BED3258659F49DBD06 /* Support Files */ = { isa = PBXGroup; children = ( @@ -906,6 +923,7 @@ C32779AE345D5D4A64299E2690976903 /* XCTestObservationCenter+Register.m */, 6BAC03468F6D8F06246A513EB65421F0 /* Support Files */, ); + name = Nimble; path = Nimble; sourceTree = ""; }; @@ -917,27 +935,6 @@ name = Frameworks; sourceTree = ""; }; - 1EEF4A850309AB3E8F9695F1EE6F5278 /* Crypto */ = { - isa = PBXGroup; - children = ( - 33D920D16D40DE5ABE9456B818B5F18E /* KeyStore.swift */, - 54ADA578D0A9ACDA29D2B78B6E47F9DF /* PKCE.swift */, - 56F1E65DBC6A3BC5211539F420EA7A5B /* Utils.swift */, - ); - name = Crypto; - path = Source/Crypto; - sourceTree = ""; - }; - 2625232FB94F4194A90639A1E095F3B8 /* LanguageObject */ = { - isa = PBXGroup; - children = ( - 3A02568D6F5D3CC64A5C172CD9E1A688 /* English.swift */, - 9E7FDAF685AF04C8A387E8EE773A11A6 /* Indonesian.swift */, - 3577C1E1D15ECD49F8A7133C6DD9EB5D /* LanguageObject.swift */, - ); - path = LanguageObject; - sourceTree = ""; - }; 264E1386EF753301CCA57DC939A43FF7 /* Support Files */ = { isa = PBXGroup; children = ( @@ -953,121 +950,112 @@ path = "../Target Support Files/TTGSnackbar"; sourceTree = ""; }; - 26F8AD224E362CF5FD3FAD35C61FA61B /* Resources */ = { + 2C30F1C5D3E104163AB8CFA733A61328 /* Models */ = { isa = PBXGroup; children = ( - 55F6A204BD0AEB2C390638135493C52B /* Cotter.storyboard */, - 49EB298287B96C5C33D7E1B35D6C3376 /* Transaction.storyboard */, - 57480C7725B8CD644B39ECB76744DA3D /* UpdateProfile.storyboard */, - 2B7E1EA00C8DB282A75D604DFF0A9E5C /* Base */, - 81B574D2D290ABB0A6D73779D65C480B /* Custom UI Fields */, + 57C9438BBBBCAA2A3E379599FADBCCA8 /* EnrolledMethods.swift */, + 32DFE347BD5D3C43A34119A056E89DB7 /* Event.swift */, + 337DF6BA2C8C2779146E8A3729FAF1E0 /* Identity.swift */, + 88C4BD0EF80D760C2D6E7708D109AE56 /* NotificationCredential.swift */, + 80507B6498F3E6A74AFAAF781A34F374 /* OAuthToken.swift */, + DF00FFA87F50E3C65507AD99635B456F /* Request.swift */, + AAE9EDA9533912092D8061743125D6E2 /* Response.swift */, + 82003EB76568628F0947239A51F8B449 /* User.swift */, ); - name = Resources; - sourceTree = ""; - }; - 2B7E1EA00C8DB282A75D604DFF0A9E5C /* Base */ = { - isa = PBXGroup; - children = ( - 85E7562F2535362A0053A186 /* cotter.xcassets */, - E398B782553D9DE1557FC0850EE879C9 /* Assets */, - ); - name = Base; - path = Source/Base; + name = Models; + path = Models; sourceTree = ""; }; - 3474FD310DBE2182042AC6F04795C25A /* Models */ = { + 2D97C58A3F0C4FD224CDEA17C9DC871C /* ColorSchemeObject */ = { isa = PBXGroup; children = ( - 6AB09E6F30FD5AE9968EFECF1F6E0891 /* Callback.swift */, - 1293ADAAE32FE1C2FAB48A1D25FAC988 /* Constants.swift */, - 6CD92171CFB03D0DFAC1BFF4F6C5D437 /* CotterJWT.swift */, + A2BD009AE620AA4F4F3D7C8AC7F8563E /* ColorSchemeObject.swift */, ); - name = Models; - path = Source/Models; + name = ColorSchemeObject; + path = ColorSchemeObject; sourceTree = ""; }; - 3BD45C218AC36130216DF0BC7E40958B /* Custom UI Fields */ = { + 3767B790999B4AD7547B623CDA4D58AB /* Support Files */ = { isa = PBXGroup; children = ( - A8252FF59C2D3F9605832848938C9EAC /* OneTimeCodeTextField.swift */, - 958D270DFAFCFE79BFCCDFD5D327BADE /* ResetCodeTextField.swift */, - 0A344D7867E754B240664FD4E7A2B89A /* UIExtensions.swift */, - EB1AD71FD3D74291CCC60AB6BC9DF135 /* Keyboard */, + CAF49E5BC54DCE45DDB1C4B3B955DCA4 /* Cotter.modulemap */, + 0C24D82BE4E6243C6C28BD4ED9587ED3 /* Cotter-dummy.m */, + 9B306EDD4689FB24D344EB69A2C48B21 /* Cotter-Info.plist */, + 5A69F0B987432D04BEE5BC6A781270BC /* Cotter-prefix.pch */, + 00AAFC1E2FD9886378CDC96F3ED039F4 /* Cotter-umbrella.h */, + 9F18C353CBCC7F640144A9F1429A739D /* Cotter.debug.xcconfig */, + D7EA0186886AF13C4699840CDD2AE35F /* Cotter.release.xcconfig */, + AADF0180871D18B7E1E6CC36AB329B1F /* ResourceBundle-Assets-Cotter-Info.plist */, ); - name = "Custom UI Fields"; - path = "Source/Custom UI Fields"; + name = "Support Files"; + path = "Example/Pods/Target Support Files/Cotter"; sourceTree = ""; }; - 3FA99B7BFBD033121BF227D7764AC560 /* Mocks */ = { + 3BA32D84485AD02FF45A1CF0E3F6FF0D /* Base */ = { isa = PBXGroup; children = ( - AD426F1672AAACDAAEBE6FCF8C980AB5 /* Protocols.swift */, + 08C92CC5DA6BBB74775D8280AE753782 /* PINBaseController.swift */, ); - name = Mocks; - path = Source/Mocks; + name = Base; + path = Source/Base; sourceTree = ""; }; - 46FD318C9CF3205920FC5C717EBF2346 /* ImageObject */ = { + 4C8B0662683D33C40C810B80F5E6E6AD /* Enum */ = { isa = PBXGroup; children = ( - 867AB8F5B655A618BA59B6C114E41AF5 /* ImageKey.swift */, - FB5455819B215830267835ABF9A740A7 /* ImageObject.swift */, + 9AE3F57034ABA3AAE3944EE518EDA441 /* AuthMethod.swift */, + 093FBAF63056F133C0C49650BD92C1DF /* CotterTokens.swift */, + A9B382DF456F8287E92BFF876D45AF8A /* UserKey.swift */, + A303A6E769C1BEE95A78AB857B413621 /* ViewControllerClassNames.swift */, ); - path = ImageObject; + name = Enum; + path = Source/Enum; sourceTree = ""; }; - 4CD58C5697B20CA2693FE463526B5679 /* Config */ = { + 4E8B0CB64B9D0323B8CF23F21DD1AF4F /* Custom UI Fields */ = { isa = PBXGroup; children = ( - B07B81543E9AE08162E1B84382F76791 /* Config.swift */, - 8E79E76F0DC62C5E5CA89B43F99850CC /* CotterError.swift */, - 1EC35B71203E6CB36ABA33AE20F9B49C /* CotterImages.swift */, - E5FD1BE50353E38C49E312C73781224E /* CotterStrings.swift */, - 8CB21BE2E59FABA97C8FE830E79F0FEE /* ErrorMessages.swift */, - A102851D5137469CF31B7BF1FB6B4854 /* PinStepEnums.swift */, - F0E7DE53A13F8992B03CED45DEAF7D3C /* ColorSchemeObject */, - ACB9011822BE1AD5AA0F3BC41A420368 /* FontObject */, - 46FD318C9CF3205920FC5C717EBF2346 /* ImageObject */, - 2625232FB94F4194A90639A1E095F3B8 /* LanguageObject */, - F7486473A6F6CA7A8AF925F0091216D0 /* Models */, + 77B1AC3F735E148B6894D4D4C9934ADF /* Keyboard */, ); - name = Config; - path = Source/Config; + name = "Custom UI Fields"; + path = "Source/Custom UI Fields"; sourceTree = ""; }; - 582CCA3CA9205E377F052D29221DCABE /* Base */ = { + 5C4692D401371DB99AB761FC568B2FE2 /* Service */ = { isa = PBXGroup; children = ( - 2A62013CC4131F0EBEC109837D1D71D3 /* PINBaseController.swift */, + FE9796A8A548333A9174CD02EBFDB0A8 /* APIServiceProtocol.swift */, + 3EBD97F86BC5475B474CF47A4563429F /* CotterAPIService.swift */, + 6CD589E863E90EFCBDD2CC6DEEBF46D8 /* CotterClient.swift */, + 33B18843F4F545B528299DF320C3E35D /* HTTPCallback.swift */, + 2C30F1C5D3E104163AB8CFA733A61328 /* Models */, + C6A513ADA656BFCE51297C4296101378 /* Requests */, ); - name = Base; - path = Source/Base; + name = Service; + path = Source/Service; sourceTree = ""; }; - 61186C5D3096A0991E547A728299E43A /* Service */ = { + 5F95BF1B7AAEF2171FA25406C5CB163A /* Alert */ = { isa = PBXGroup; children = ( - 711429425E73CCC04B11AB3711767DF8 /* APIServiceProtocol.swift */, - B46A8EDEFCB2DED6C03ED8B2300EDB6A /* CotterAPIService.swift */, - 5B8A00768593F957EE294A707807FD19 /* CotterClient.swift */, - 0FD868FB807B81277CFABFED91612AE0 /* HTTPCallback.swift */, - CF00504DE854D67D85A4C1D9E5BE6F16 /* Models */, - D7F6E81AF649B5FB2094514B74F65A95 /* Requests */, + E17BAED846F95DE66683B357EAFDCC95 /* AlertService.swift */, + A8BA3BCEBE3D8781A8E53D5F00E84D14 /* BiometricFailPopup.swift */, + CF259207E39C5829817A930DE4A16D76 /* BiometricRegistrationFailPopup.swift */, + 8E44DAD072A942C78AF70E54E68AA07F /* BiometricSuccessPopup.swift */, ); - name = Service; - path = Source/Service; + name = Alert; + path = Source/Alert; sourceTree = ""; }; - 670CB39F7C7369BBCA175FBFFE328A77 /* Components */ = { + 611DAE1B258B24118F2F44F014E9293C /* Passwordless */ = { isa = PBXGroup; children = ( - E2119A5D567BEED3583CCCEDADF7A619 /* BasicButton.swift */, - 86C4BFFFC2D2762CF974253E910845F2 /* BottomPopupModal.swift */, - E52ACB3B762FDF90611DE01CD547FAE7 /* CotterNavigationViewController.swift */, - 1E1277E6E4950601601EAB84FE591500 /* CrossButton.swift */, + A3686DC4FEDB7E12661CF556141209ED /* CrossApp.swift */, + 62DDE21D20C6638DE0AA8E34B6229E6A /* Passwordless.swift */, + A61B53E87279493DA735996F7D5A2742 /* View */, ); - name = Components; - path = Source/Components; + name = Passwordless; + path = Source/Passwordless; sourceTree = ""; }; 67EA6F774C61F2503C446D20CB6C10DC /* Pods-CotterIOS_Example */ = { @@ -1088,6 +1076,18 @@ path = "Target Support Files/Pods-CotterIOS_Example"; sourceTree = ""; }; + 699792C4755BF1829A4D717222BCA3E7 /* Local Auth */ = { + isa = PBXGroup; + children = ( + 094903CF0F7AC0CD4164EAD2A0111333 /* AuthAlertMessages.swift */, + D1C6EE7061E5A4BF4566B2B482982E5B /* BiometricAuthenticationService.swift */, + CB112AAD255468830258E8554A43357C /* BiometricRegistrationService.swift */, + C8E0B4AE991BC4EA49FDDC2B7788FABF /* LocalAuthService.swift */, + ); + name = "Local Auth"; + path = "Source/Local Auth"; + sourceTree = ""; + }; 6BAC03468F6D8F06246A513EB65421F0 /* Support Files */ = { isa = PBXGroup; children = ( @@ -1103,187 +1103,70 @@ path = "../Target Support Files/Nimble"; sourceTree = ""; }; - 715F5F347CB3B839329958E9C643A812 /* Pod */ = { + 76A9B4E5C2710AC2C917588BB2D10F9B /* Cotter */ = { isa = PBXGroup; children = ( - 8017841EB9577EF8100825854E67CA05 /* AlertImageKey.html */, - 841CE1D36469C3770BB06E8044C695E7 /* AlertImageKey.html */, - 8ABDD977523A13AC54568881B02D3A1B /* APIClient.html */, - D80D1592A6A5A78C695AF2C519F43292 /* APIClient.html */, - 640DE3F0D6420E6D4F6F13F62EB38AE5 /* APIRequest.html */, - 8A6D0F2B19002D1052D10252B199F8EC /* APIRequest.html */, - 687B469B2DB151222B901F4BC81C4635 /* badge.svg */, - 691170059E344F526468418DA95405CF /* badge.svg */, - 16E8FEBC0DA30B264383EF71A77ABD81 /* carat.png */, - BC1B9D05543F27102AD6AFFD5F10C664 /* carat.png */, - BE55645002CBF6D6DBBA796FE00C73FC /* Classes.html */, - F7F2D49975727203052BFBDFF09A7B52 /* Classes.html */, - 62AB80EDDFA746D7CFD547CD3853B5A6 /* ColorSchemeObject.html */, - 718D25F87A93ED9E352CB2E366F8F5D4 /* ColorSchemeObject.html */, - 2D69B5F9175B5C58CD7A1EC533FEFA31 /* Cotter.html */, - 1C76311B3C904E0D1B239153FC58F17B /* Cotter.html */, - 8F0E28301E098214E043B7678F85E3A5 /* Cotter.podspec */, - BB06C684FD81A71538E72C46D7956A0B /* Cotter.tgz */, - C3B4AC8A200B840D2C219C92CA2E7CB4 /* CotterAPIError.html */, - 89D9434E3EBACD420B8E8BE050A8153E /* CotterAPIError.html */, - 8463199914805360F3374B7232CDE9FD /* CotterAPIService.html */, - 3DC4A534C4AD016CB0ACD344E3D3E038 /* CotterAPIService.html */, - 6434CFAC65AE1076B1E3FDE7D85DAF90 /* CotterBasicResponse.html */, - CC2BB8B48D27A986F6BC47006123725B /* CotterBasicResponse.html */, - FECC04DBF88536587F2CA5A2E9BA6086 /* CotterCallback.html */, - 9978FE6D04568F1CB4DC185C925A62F0 /* CotterCallback.html */, - 17E6B6274382013ED1A088D1050B7948 /* CotterClient.html */, - DB68CA0D1EF201B0913CF43E97C9960A /* CotterClient.html */, - 12C7254376CCB4266FD6E4EE07F0CF60 /* CotterConstants.html */, - 68849811A4BBE969D40C4406789EA6FD /* CotterConstants.html */, - 0B5852DDBD0C9C3F47496AAF519A6DF1 /* CotterEventRequest.html */, - 8A42F0A62348D85B7672D3C79E726324 /* CotterEventRequest.html */, - 56912317F8D7C152B29C26FECE6440C1 /* CotterEvents.html */, - BE112714C5FEEE2880BBE68E0C5AAAF3 /* CotterEvents.html */, - 58D2067B843174C60AB2BCE8FDC3C3AF /* CotterIdentity.html */, - 27327FE412B1C0645CE7F4B6853907F0 /* CotterIdentity.html */, - 2E1B9CE647D5EE5A3B093DCDE77283C5 /* CotterMethods.html */, - 1A78EA5637719157569197443E15774D /* CotterMethods.html */, - 5E2319938F4867419AC03FE509820468 /* CotterNotificationCredential.html */, - E31546D5931C27E37766DFE785EFB787 /* CotterNotificationCredential.html */, - 851E326CED726EC3D849054969230154 /* CotterOAuthToken.html */, - 829F195DEA33CC21D5C285FA01F11E7B /* CotterOAuthToken.html */, - 2419091C3A85D5B6DA832FDD67A63A3A /* CotterResponseWithChallenge.html */, - 46DDD546496A377E7F47F2699EEE2006 /* CotterResponseWithChallenge.html */, - 602C88EABE77A06B574FC630AA7903D3 /* CotterUser.html */, - 9FBF9D5DB281BF4741A1A7D1D4BED0B7 /* CotterUser.html */, - E476B4C2176C94653CB7CEAE643FF7FD /* CreateAuthenticationEvent.html */, - EF31983242D074562EEB52CE1E037111 /* CreateAuthenticationEvent.html */, - 3B3E06327FFEB02F20C43F1004B90C2F /* CreatePendingEventRequest.html */, - B6A3B5F5F1CE0F64ECDFF0CBD94F68DB /* CreatePendingEventRequest.html */, - E742A114AC1944CEE49CC1DFCF385CDC /* CryptoUtil.html */, - 2289DB3C598DA062F48FABABC40FD2C8 /* CryptoUtil.html */, - E649BD21610D005BE645AB3473C23C62 /* dash.png */, - B2DB44684E2788D8BDAECFD42134D465 /* dash.png */, - D26C952BC6D5AD0A13A1C8ADB0D10632 /* docSet.dsidx */, - 7BDE0E2A12F8DDD1715169533933B100 /* English.html */, - B8C6924A52F12D7C6EEC8A67E62CE3CA /* English.html */, - 176295CB6F99F067DD36CE36B792E5C3 /* EnrolledMethods.html */, - CC4CDC048DE36215D1BDD9F8BAF59FB1 /* EnrolledMethods.html */, - B1C0C7EBA1ED5B641E76C4A90E4711AE /* EnrollTrustedDevice.html */, - EA7F9CCA1B788A4A0CF43F838639A025 /* EnrollTrustedDevice.html */, - 8854E7252810B8E53BA03C6188BDE4C3 /* EnrollUserPIN.html */, - 1BDB2FAF621E87A2B7E384C21F72090D /* EnrollUserPIN.html */, - C2F0DD818C5A841C489C836960ED302A /* Enums.html */, - 75997D4C44D7AF23EE6D6948959DD6F1 /* Enums.html */, - C246641FE472F51255577CA7A6FE904C /* Extensions.html */, - F1471A6B9EC3DD56A96B7E4198CCAE89 /* Extensions.html */, - BFDEBEBEE60A8B1B66B308BF11914B30 /* Functions.html */, - FC9D94A00EE43821AA79023703E71EA3 /* Functions.html */, - D3E1392A0632DCC392CA02F56803A7EC /* GetBiometricStatus.html */, - A9B5DCFCC3AEB897E024FE1374A6EE82 /* GetBiometricStatus.html */, - CBC465148FA63D571077FC5718C9DCBD /* GetEvent.html */, - FDE58F9604C018B6367F9E6FA8341A7C /* GetEvent.html */, - F31F6EB4C4C3A7B36BD0D281F27DFB06 /* GetNewEvent.html */, - EA3E8CF4A265E931265AFADF18144B42 /* GetNewEvent.html */, - F1B1BC1B06E0C22A4436C523468072BE /* GetTrustedDeviceEnrolledAny.html */, - 2180909ED9FA3976B893F9D742FB2E02 /* GetTrustedDeviceEnrolledAny.html */, - E6C8C8776683377F0F107C9758F32C1A /* GetTrustedDeviceStatus.html */, - D387A062F8CA63CF2CA083DB68ADA8E1 /* GetTrustedDeviceStatus.html */, - C36835D9867BBA4F9146E84FAF481456 /* GetUser.html */, - 9B8EE7A5C34AF85AE530341E60313490 /* GetUser.html */, - 6C577DBB5585403980D3B57B6DA188A4 /* gh.png */, - DBBA2A2C69B15CCE234566A74E29E4F4 /* gh.png */, - EE1B40FF31B92BAF9D01F6C2958C6DD9 /* highlight.css */, - 12839DD27962FF236ABE64A10859FE7C /* highlight.css */, - A9B3E17B31E23D8268939B7159F63258 /* Identifier.html */, - 87D3C1046999147677C1FE285004A0AD /* Identifier.html */, - EE98947216A039A953A7DBB19292125F /* ImageObject.html */, - CEBD5704C9955A04C4677DEB8DE4FE0C /* ImageObject.html */, - 0085DF565D94F492A7A8EA90DB728389 /* index.html */, - DD1B4882932C3B709B14010EC96CE6DE /* index.html */, - 4A6A1C4DCD4C6682F4A8558829530E1D /* Indonesian.html */, - 2ED1A57F70D8AF659C5BC586667EF419 /* Indonesian.html */, - 60CFFB5704E690E6504E62A6BDB762EC /* Info.plist */, - 6D4FF93D72A8A6C35B155DF81AD57258 /* InternalCallback.html */, - EC748646DC9AE911CA65C9DD7F947AC8 /* InternalCallback.html */, - 0633797D1FD4379F8009F4ED9E54CE88 /* jazzy.css */, - 8377C6851C1CFA6896B2C67A0877E3F8 /* jazzy.css */, - CD49C71AD7F7FF5D3D789E6CEE128DF2 /* jazzy.js */, - 6678D83A894CAFEA0CEEBDF0AA407EE6 /* jazzy.js */, - 67F5A43BFC6608789BA9A857E8A5C400 /* jquery.min.js */, - 12607B791F56B42787372A6B9ADA0F07 /* jquery.min.js */, - C2F087E8AFA6C030A643CBEF42D67888 /* LanguageObject.html */, - 603C520AA12440D8AAEF3B14DD9BC47A /* LanguageObject.html */, - 3D4F039A27B73AC470C34C9B3DCFBFB2 /* LICENSE */, - 7B22D546519FD9193E463BAC8F83E908 /* NonTrusted.html */, - 94156FD18A1E9A89BF649DE37A900D32 /* NonTrusted.html */, - 29DD9347572ED3BDC353B76EE3C14738 /* NonTrustedKey.html */, - 6467E5D0E8B6EB9064F768DEDC261CE3 /* NonTrustedKey.html */, - C84907DB536A9C1B87FBE0B8E415E381 /* Passwordless.html */, - AE11A4F6816F79C8DD5266F604DAE79A /* Passwordless.html */, - 26E53076BF8AA5FB59133CAE4CD82D01 /* PINViewControllerKey.html */, - CFF68CCBD0D64B155C7F6020E98BA541 /* PINViewControllerKey.html */, - 7C4C8BF42C4F26140B5AC4ACB51EA54D /* Protocols.html */, - EDBF4FA63A3DBEF7C0A58BC9AE41C3E5 /* Protocols.html */, - 41B9C35632C09E19BC92417E142047D1 /* QRScannerViewControllerKey.html */, - 883990872A046821A2127DCAFABE48DF /* QRScannerViewControllerKey.html */, - F9BF8B5C073050136B4238B06D469867 /* README.md */, - 34CC0D5E0F72E1199E05E5EAC1DB65D0 /* RegisterBiometric.html */, - 43CAA12E8592A1770E30F1D584AF5031 /* RegisterBiometric.html */, - 146438955AE290915C2611CB8FAD5FBD /* RegisterTrustedViewControllerKey.html */, - CE18C584BC3F2F9589D8ACD8E67762B8 /* RegisterTrustedViewControllerKey.html */, - CA460BE6F6CD3EC5A7F730D3C3BBF36C /* RegisterUser.html */, - 7483570A5A8A1CAD719896272CE0F752 /* RegisterUser.html */, - D34955418BAFAE40B6473BD0E6946705 /* RemoveTrustedDeviceStatus.html */, - FA9998AEEBCF47864C0A91DE48E115C9 /* RemoveTrustedDeviceStatus.html */, - F7F9DC07965496DFB37C85531A269CC2 /* RequestPINReset.html */, - 5AE61536C916DD9ADCAAB32902489347 /* RequestPINReset.html */, - B02B1A4203B4184D719D157C1BB9FFEA /* RequestToken.html */, - 9EF6D49D8458294413E5D7FE3F74FC93 /* RequestToken.html */, - 33CFCD89394CDCA7528A0C9D03E3D715 /* ResetPIN.html */, - F3DE5F8D9D826FFA2B6F06764BFC73E3 /* ResetPIN.html */, - 4E687385E57AE8EE60990F5D98FADE4C /* RespondEvent.html */, - FE32D94ED0280CFDC71CC681ECB7BD28 /* RespondEvent.html */, - 195F8E97D8DF36C11295ED8F52631B26 /* search.json */, - 1B1FF51DFF76D5201D9A6194C494460A /* search.json */, - EE372A462BCD33767FA0B5286D312B26 /* Structs.html */, - B8B3CDEF79E1E185D19C32744765A49D /* Structs.html */, - F655C4892C02A9F4DB0AA26C5D8990D9 /* Token.html */, - 25F44F1FB3D711BB05E2419B80BE8C45 /* Token.html */, - 0A83323C0E28831D609F21C3246F47F4 /* Typealiases.html */, - 5FF89A95678303747DE46CDA2E5626FF /* Typealiases.html */, - E11EB3A236DA2E5AE96333DC6D0ED0A1 /* UIButton.html */, - 603ABA1F90D3C4B6B389C0F3EA8C1000 /* UIButton.html */, - A3AC613CE8E17AEB858A66BC7DFF0A5F /* UIButtonBorderSide.html */, - A05C8AB60573A4B5E9F7C2BECE35A23A /* UIButtonBorderSide.html */, - DB7E2D93DBA88BB9A6C74BB0F2383847 /* UIColor.html */, - 080E362694B98CDDEBBD04B774CEA85E /* UIColor.html */, - F5219768F4625F014180D9716E3168F8 /* UILabel.html */, - 8A3CA60E3CEBCF491FE69D115E9780B9 /* UILabel.html */, - 69043C319A03D35C7491A4E3B25E5BE2 /* undocumented.json */, - F5A1D652CB780262E64C19E3BD5F1A10 /* undocumented.json */, - 5B98DEBC6914CEAD538BB5E0B563F898 /* UpdateBiometricStatus.html */, - E7EA38890904507C2BC7B0444D7C8CD2 /* UpdateBiometricStatus.html */, - A0C7B81A677E52037A79B93119DF5166 /* UpdatePinStep.html */, - 05695EF23FA90CA1ED43838C92598750 /* UpdatePinStep.html */, - FEF3A21C1DA0AEAC0FF5ECC8D6916B30 /* UpdateUserPIN.html */, - 43B84430B27105435A9CF3FB5FA2F9F2 /* UpdateUserPIN.html */, - 02765C0554DB36C7631C0B39E78396EB /* VCImageKey.html */, - FA342A48FFA01373FCE5021A42FD2A44 /* VCImageKey.html */, - 252E7D1A8D0B3C894C21E326EB4DC20F /* VerifyPINResetCode.html */, - EB09F62AB8B50FFDE97BD6E79CBC3E4C /* VerifyPINResetCode.html */, + 2AFA2C2369E66748BFE3603448247509 /* Cotter.swift */, + BE107AE5D74F7F29D8FFFCB1B8C64217 /* LoadingScreen.swift */, + 4C048C9B47B8A19DD961FEF9579A0FC8 /* MockedAPIService.swift */, + CE692A1448A11FA598709183E7F53E63 /* MockedCotterClient.swift */, + 4BA097A3B62606CA5B4FA2347F2DBB43 /* PINConfirmViewController.swift */, + 10B71F7D83A3587DDAA9E29C55C259B2 /* PINFinalViewController.swift */, + 348A9197B52B60F119BC012A71B37A81 /* PINViewController.swift */, + 3A0AFB4BADC41F8B4B8E51009EE39B07 /* ResetConfirmPINViewController.swift */, + DFE6F2DD82E0BD18694F0708E1F29EBC /* ResetNewPINViewController.swift */, + 16408158C0595A4CACAB4FF371145432 /* ResetPINViewController.swift */, + 787652874641A387983E0866F8198407 /* TransactionPINViewController.swift */, + 7A98EA11F2945B2174579AF3A3165861 /* UpdateConfirmNewPINViewController.swift */, + 72DC720805276810E56C63BD08785BC5 /* UpdateCreateNewPINViewController.swift */, + 3245B237EA7F541BDC44B2D72C402EC3 /* UpdatePINViewController.swift */, + 5F95BF1B7AAEF2171FA25406C5CB163A /* Alert */, + 3BA32D84485AD02FF45A1CF0E3F6FF0D /* Base */, + 9EF227E2878CD5324182FA8374793113 /* Components */, + B573A46BD83809EBE3E01159EE33A876 /* Config */, + CD997690898F18B0A1BA6DE8A2D749F4 /* Crypto */, + A915560CBA1EB70CDF0B77B5DE47ABBB /* Custom UI Fields */, + 4C8B0662683D33C40C810B80F5E6E6AD /* Enum */, + 7B4383F34F42D78D247F7BE4740A26C9 /* Extensions */, + AD3FFABC74166BA7DDED7AC0C1003377 /* GeneratedCode */, + 699792C4755BF1829A4D717222BCA3E7 /* Local Auth */, + 0488ED4F2E4A8AB048F0FB6F78A2B2AE /* Mocks */, + C7FA7DCAF9834AE3A319DCBD83E300CC /* Models */, + 611DAE1B258B24118F2F44F014E9293C /* Passwordless */, + DD5B7D4A693F1AF85863D4C16E597CC0 /* Pod */, + BED343473524E8A85464AA2CBC7D7BED /* Resources */, + 5C4692D401371DB99AB761FC568B2FE2 /* Service */, + 3767B790999B4AD7547B623CDA4D58AB /* Support Files */, + 8F5C7F3FC17B96E104FF349C492B050A /* TrustedDevice */, + 0904F15FA31107EE0E88CAAEEBC499EB /* Util */, ); - name = Pod; + name = Cotter; + path = ../..; sourceTree = ""; }; - 768EDB0CA27DD4B1E781D875214B65F6 /* Products */ = { + 76B84B0F5F949B8D38067EAFF20A4EDF /* Assets */ = { isa = PBXGroup; children = ( - 207EBBB645DB56C874845DD1B5362DB3 /* Cotter.bundle */, - 093A10918520E26EE055209CB5543A28 /* Cotter.framework */, - BAE263041362D074978BB3B577DF0A05 /* Nimble.framework */, - 186C962BB0FA0079ED68B7C9D6664B84 /* Pods_CotterIOS_Example.framework */, - F96CD1BD0F1462CD17B26515AC55CEA8 /* Pods_CotterIOS_Tests.framework */, - 7D5735447E61EF09D41D693D93E4CD90 /* TTGSnackbar.framework */, - 7E0849958075B84A24AB77175A26A5F8 /* TweeTextField.framework */, + EC1559236E6459EF19621A183AE76297 /* cotter-failure-x.png */, + 7FECBBCFB4D390D1CCE0CE1F18353B3A /* cotter-fingerprint.png */, + DC575A2DA9BF0CEB5B87ADB77A712028 /* cotter-fingerprint-failed.png */, + CFAB8A460A4B815A2A15AD5F28C0B0DA /* cotter-lapis-logo.png */, + 64101DC9565CABAE267581E270B40C60 /* cotter-success-check.png */, + 6A304430F102D9C1614983AA4E9DEC7B /* cotter_logo.png */, + 57FEAD6C73311CC6DBCF80E799CF042B /* tap_device.png */, + 49E92870F05513A63DB7F239B19C2EBF /* warning.png */, + ); + name = Assets; + path = Assets; + sourceTree = ""; + }; + 77B1AC3F735E148B6894D4D4C9934ADF /* Keyboard */ = { + isa = PBXGroup; + children = ( + 6F0CBDB5FE39FA473B4E14221738DB27 /* KeyboardView.xib */, ); - name = Products; + name = Keyboard; + path = Keyboard; sourceTree = ""; }; 7A551574F46719D3B9DD94984887D744 /* Sourcery */ = { @@ -1291,48 +1174,52 @@ children = ( CDF860937422C570FFE0085C275BC822 /* Support Files */, ); + name = Sourcery; path = Sourcery; sourceTree = ""; }; - 7C0B86260F09CB8EDBFB435BBCFC151D /* Development Pods */ = { + 7B4383F34F42D78D247F7BE4740A26C9 /* Extensions */ = { isa = PBXGroup; children = ( - D1E7D9BAA5F3A7EEF0C4B8FE3BEC9B3D /* Cotter */, + B22AD32ECB8EA35FDA6C539C4CBE4A0F /* Collection.swift */, + 0F84616AA27DDC69808DEDBCA2BECFC4 /* String.swift */, + C746A4002549200758A5999C924119A0 /* UIColor.swift */, + B218D24806BBF16BFF46772D946BF2A9 /* UIImage.swift */, + 56C096310678D7EA88CFA9D75F4D6075 /* UIImageView.swift */, + 129588B184DB58487123017907B6A72F /* UINavigationController.swift */, + 02C371006F5D777385A944944BD107FC /* UIView.swift */, + 10F85EE5BF88ADEBB2CE625885B27100 /* UIViewController.swift */, + FE364B51FD880D80697701FEF29AD964 /* UIWindow.swift */, ); - name = "Development Pods"; + name = Extensions; + path = Source/Extensions; sourceTree = ""; }; - 81B574D2D290ABB0A6D73779D65C480B /* Custom UI Fields */ = { + 7C0B86260F09CB8EDBFB435BBCFC151D /* Development Pods */ = { isa = PBXGroup; children = ( - BB1D7050B066B53519121E141010402A /* Keyboard */, + 76A9B4E5C2710AC2C917588BB2D10F9B /* Cotter */, ); - name = "Custom UI Fields"; - path = "Source/Custom UI Fields"; + name = "Development Pods"; sourceTree = ""; }; - 8562DF840D71CDBCFFFAC2899A5B6FEC /* Enum */ = { + 88980AE5766ADCE21925C24B71AFE3E9 /* ImageObject */ = { isa = PBXGroup; children = ( - 2D19082F5E1CC2078708D7413E4018F2 /* AuthMethod.swift */, - AE40F13C6877F057ECC055E0B4918E1A /* CotterTokens.swift */, - 8163D319D7826D220DA6A2877EBBC3BC /* UserKey.swift */, - A2BA261E65D0E5536EE19258DFE42696 /* ViewControllerClassNames.swift */, + 0665161AFB03DB0CD4F8B6B24C142E28 /* ImageKey.swift */, + BE52624F2BC59135BE26705B0DAE74BD /* ImageObject.swift */, ); - name = Enum; - path = Source/Enum; + name = ImageObject; + path = ImageObject; sourceTree = ""; }; - 86FB5A6A00108BC7DF69B7C56FB84868 /* Local Auth */ = { + 8F5C7F3FC17B96E104FF349C492B050A /* TrustedDevice */ = { isa = PBXGroup; children = ( - EBE3B9C9C6A732F07CD3C599FEAF1C81 /* AuthAlertMessages.swift */, - 25BAA4B7F4E618B46207A3C286E4C94A /* BiometricAuthenticationService.swift */, - FD1C21456CC23FDF21C62641063122D4 /* BiometricRegistrationService.swift */, - BEAB37EEA081492DF6D2A33BAF6E4ED4 /* LocalAuthService.swift */, + C6862DCFD70455DDB2A2F51534E1F426 /* TrustedDevice.swift */, ); - name = "Local Auth"; - path = "Source/Local Auth"; + name = TrustedDevice; + path = Source/TrustedDevice; sourceTree = ""; }; 9251126BAE587413F051A8E4AB5A5C03 /* Frameworks */ = { @@ -1343,6 +1230,18 @@ name = Frameworks; sourceTree = ""; }; + 9EF227E2878CD5324182FA8374793113 /* Components */ = { + isa = PBXGroup; + children = ( + B2BFD91549602FFEAF588045B67D47FA /* BasicButton.swift */, + 80431B2A6601F6B04F0524A94DF0909C /* BottomPopupModal.swift */, + B950E8391AADFF36F2C7FF7A0CDA4D42 /* CotterNavigationViewController.swift */, + C2C6834822D798DB3C33FC4BC7C05ACF /* CrossButton.swift */, + ); + name = Components; + path = Source/Components; + sourceTree = ""; + }; A17D52B7A04785290FE74D91A6B0613B /* Support Files */ = { isa = PBXGroup; children = ( @@ -1370,25 +1269,48 @@ path = "Target Support Files/Pods-CotterIOS_Tests"; sourceTree = ""; }; - A2E9B95D91A3BCFD07F3B5741702AC89 /* Alert */ = { + A38B01CD9505EFDE4468664005273EDD /* Base */ = { isa = PBXGroup; children = ( - 73C6D575A0821153945EEFC447B99740 /* AlertService.swift */, - 90B7CEA9AABD0A7F177D1BB488756C95 /* BiometricFailPopup.swift */, - 014E386AE1A5CE8A7472C1A521B87371 /* BiometricSuccessPopup.swift */, - 85C66702255116C8005C4AE6 /* BiometricRegistrationFailPopup.swift */, + D3851D17F6F0FBD4FD08AB12768604D6 /* cotter.xcassets */, + 76B84B0F5F949B8D38067EAFF20A4EDF /* Assets */, ); - name = Alert; - path = Source/Alert; + name = Base; + path = Source/Base; sourceTree = ""; }; - ACB9011822BE1AD5AA0F3BC41A420368 /* FontObject */ = { + A61B53E87279493DA735996F7D5A2742 /* View */ = { isa = PBXGroup; children = ( - F58816E6283180EA78C73EC9843C8AF3 /* Default.swift */, - 5DC726CE1EBC2482B4826B80B37FFB92 /* FontObject.swift */, + B8F5865C68B146B5E986499AB5DAB237 /* NonTrusted.swift */, + 789904FB9E597996A2429FDD89D1DFDD /* QRScannerViewController.swift */, + 37156249E9193C7BB9452DACA79EA2B8 /* RegisterTrustedViewController.swift */, + E2DC783981130DA978F94F02FD843D4C /* TrustedViewController.swift */, ); - path = FontObject; + name = View; + path = View; + sourceTree = ""; + }; + A915560CBA1EB70CDF0B77B5DE47ABBB /* Custom UI Fields */ = { + isa = PBXGroup; + children = ( + 77DF85BC242C42AD9591CC916CDECE7C /* OneTimeCodeTextField.swift */, + 02B00AD9B524ABB9359D19E1A6AD5781 /* ResetCodeTextField.swift */, + D337D24D1F0369C61C736474FD64D55F /* UIExtensions.swift */, + C07F1C5569AF52897BCCB14244E90A0A /* Keyboard */, + ); + name = "Custom UI Fields"; + path = "Source/Custom UI Fields"; + sourceTree = ""; + }; + AD3FFABC74166BA7DDED7AC0C1003377 /* GeneratedCode */ = { + isa = PBXGroup; + children = ( + FA85A0795B6474141AFD1DB1060BC920 /* AutoEquatable.generated.swift */, + 70ABCBB964A5DD020846B8BDCA459042 /* MockedAPIClient.generated.swift */, + ); + name = GeneratedCode; + path = Source/GeneratedCode; sourceTree = ""; }; AD8E5DA2479CD67DB0AC43FE585C87E9 /* Targets Support Files */ = { @@ -1407,47 +1329,103 @@ 6F376CDCF047BB4C2A9E16BE93CD8E9B /* TTGSnackbar.swift */, 264E1386EF753301CCA57DC939A43FF7 /* Support Files */, ); + name = TTGSnackbar; path = TTGSnackbar; sourceTree = ""; }; - AF867447EEF1A1B693BC67EEF0AEBB73 /* GeneratedCode */ = { + B3AF23A4ABB2D493F5FE9F59D0428A41 /* Products */ = { isa = PBXGroup; children = ( - 5C712792085DD744A75C839CA9CDEEB5 /* AutoEquatable.generated.swift */, - 22A32ACEDB52E7162DDD9840E6D9865A /* MockedAPIClient.generated.swift */, + 1E099368098DAE1150AADA943782B938 /* Assets.bundle */, + 093A10918520E26EE055209CB5543A28 /* Cotter.framework */, + BAE263041362D074978BB3B577DF0A05 /* Nimble.framework */, + 186C962BB0FA0079ED68B7C9D6664B84 /* Pods_CotterIOS_Example.framework */, + F96CD1BD0F1462CD17B26515AC55CEA8 /* Pods_CotterIOS_Tests.framework */, + 7D5735447E61EF09D41D693D93E4CD90 /* TTGSnackbar.framework */, + 7E0849958075B84A24AB77175A26A5F8 /* TweeTextField.framework */, ); - name = GeneratedCode; - path = Source/GeneratedCode; + name = Products; sourceTree = ""; }; - BB1D7050B066B53519121E141010402A /* Keyboard */ = { + B573A46BD83809EBE3E01159EE33A876 /* Config */ = { isa = PBXGroup; children = ( - 8D54449EA61C87E2B15382098258EC01 /* KeyboardView.xib */, + EA055956A087836389AD821C21E4685E /* Config.swift */, + 9242CF9D9CA440D1A0CB5E57F98A8B13 /* CotterError.swift */, + 3C413AEFF474B0D36666218DC73C2B49 /* CotterImages.swift */, + 325A844935D6C093DF18D114EA074E85 /* CotterStrings.swift */, + 58D6181096D626AFBA169FE36C70FCE3 /* ErrorMessages.swift */, + 560DD1DD68603916310A3D6D00C2A2E9 /* PinStepEnums.swift */, + 2D97C58A3F0C4FD224CDEA17C9DC871C /* ColorSchemeObject */, + EE390F6E1308EF9194D2B02A54D5271D /* FontObject */, + 88980AE5766ADCE21925C24B71AFE3E9 /* ImageObject */, + E5A7B7FD1071518F53A4454602156E60 /* LanguageObject */, + FA02AF84F20A7766ECC78AB2B7DAD60B /* Models */, ); - path = Keyboard; + name = Config; + path = Source/Config; sourceTree = ""; }; - C3A82425719B3C47371F8C1EB7FE84C6 /* View */ = { + BED343473524E8A85464AA2CBC7D7BED /* Resources */ = { isa = PBXGroup; children = ( - FD8E9DD053809F59EFEDCFB4B8C3DB04 /* NonTrusted.swift */, - CCBA13B4BA2A62076365CCB747B00EAE /* QRScannerViewController.swift */, - BDF017A436FE1B8279AAA86B467BECDA /* RegisterTrustedViewController.swift */, - 0471DAE276ED80E2DA6CEF7DA906E584 /* TrustedViewController.swift */, + 9A48344F731FE63AF131C01D1A6264F9 /* Cotter.storyboard */, + FE2211D83ECD70074A7D4D0108302684 /* Transaction.storyboard */, + B699688F82F02C9FA278FC815142D70E /* UpdateProfile.storyboard */, + A38B01CD9505EFDE4468664005273EDD /* Base */, + 4E8B0CB64B9D0323B8CF23F21DD1AF4F /* Custom UI Fields */, ); - path = View; + name = Resources; sourceTree = ""; }; - C3F96FAEC531C2B2DA4D0FD588E28718 /* Passwordless */ = { + C07F1C5569AF52897BCCB14244E90A0A /* Keyboard */ = { isa = PBXGroup; children = ( - 0833A618E80B842D6A25800B3395BAD4 /* CrossApp.swift */, - 90C3FB4B37D75A7C13D410180699D0B2 /* Passwordless.swift */, - C3A82425719B3C47371F8C1EB7FE84C6 /* View */, + E34E7D814B0B527CB555CEF8110EFA8D /* KeyboardView.swift */, ); - name = Passwordless; - path = Source/Passwordless; + name = Keyboard; + path = Keyboard; + sourceTree = ""; + }; + C6A513ADA656BFCE51297C4296101378 /* Requests */ = { + isa = PBXGroup; + children = ( + 21168608E06726321FD40BE36C44A027 /* CreateAuthenticationEvent.swift */, + 98DDB50F6931462BE7506ABD4615E9FD /* CreatePendingEventRequest.swift */, + FA682EA90C21A566806A7F43AFBA0D80 /* EnrollTrustedDevice.swift */, + 2981A68AB7615367CD87CC98B10761E1 /* EnrollUserPIN.swift */, + A04C0B43A99373D4145E25E8468BF57C /* GetBiometricStatus.swift */, + 5F338D8F4DF6FFBE80D7698744E9C8FB /* GetEvent.swift */, + F3DFB50536666DC4F0A5A3AFC462FD47 /* GetNewEvent.swift */, + 9A1F31090F24799E16B64220AAC6751C /* GetNotificationAppID.swift */, + C8155AD8980ED90E7DBEEC3D6CD2A821 /* GetTrustedDeviceEnrolledAny.swift */, + F298395C5D486DE92331F03AF9C033FC /* GetTrustedDeviceStatus.swift */, + 37433606BD1CC3D8F8BA5252C04381E0 /* GetUser.swift */, + 346C435023992C857703A60DA3DECA31 /* RefreshToken.swift */, + AED0B7D9123367BE0859180D65F2A764 /* RegisterBiometric.swift */, + B8986D1E3FD769D22E027D679AC32A6D /* RegisterUser.swift */, + 1D2C5D108BD75FED8ABC7462CE909B6D /* RemoveTrustedDeviceStatus.swift */, + 506733759570C1F47CB730FD7597D302 /* RequestPINReset.swift */, + 388B5CEF26E02093063CB7A24D15C35D /* RequestToken.swift */, + 38FFC575F80891FDD21C66EB2EC40D17 /* ResetPIN.swift */, + 01B16D95BEA339F24EBB7751C0720EC5 /* RespondEvent.swift */, + 805B1D02B4657895948B1C143C868294 /* UpdateBiometricStatus.swift */, + 8775B1E82651C33477D1DB6E1E5B9038 /* UpdateUserPIN.swift */, + CBF6BC3D014A2F8941D2B0C48E88081A /* VerifyPINResetCode.swift */, + ); + name = Requests; + path = Requests; + sourceTree = ""; + }; + C7FA7DCAF9834AE3A319DCBD83E300CC /* Models */ = { + isa = PBXGroup; + children = ( + 28E9AF88C7E2E363ACBA391C36B0C286 /* Callback.swift */, + 70762DB3C40ED9F2298431D629FEE569 /* Constants.swift */, + E672C4497E07330EED754DAC658DB6A4 /* CotterJWT.swift */, + ); + name = Models; + path = Source/Models; sourceTree = ""; }; CB623A5AB6B400C3CD08D266F684838C /* TweeTextField */ = { @@ -1461,9 +1439,21 @@ 9ADE6D49B7FFBC85AAF68585204E60E4 /* WeakTargetProxy.swift */, 0CCF5417A92EE8BED3258659F49DBD06 /* Support Files */, ); + name = TweeTextField; path = TweeTextField; sourceTree = ""; }; + CD997690898F18B0A1BA6DE8A2D749F4 /* Crypto */ = { + isa = PBXGroup; + children = ( + 709538D2F61DD0358DC4F244F3C9F5A4 /* KeyStore.swift */, + 1771EA68E7DF3E3B9A017AA3DE93E7C2 /* PKCE.swift */, + 26F100CD0C3AFD0AD4519A112E4F3859 /* Utils.swift */, + ); + name = Crypto; + path = Source/Crypto; + sourceTree = ""; + }; CDF860937422C570FFE0085C275BC822 /* Support Files */ = { isa = PBXGroup; children = ( @@ -1486,21 +1476,6 @@ name = Pods; sourceTree = ""; }; - CF00504DE854D67D85A4C1D9E5BE6F16 /* Models */ = { - isa = PBXGroup; - children = ( - 5ECFB6160DC305FA2348A3E0D5232E4B /* EnrolledMethods.swift */, - 08178A27D173D7A61EF27B0154A0BA39 /* Event.swift */, - F3747D80200B98679E581C6398C6E249 /* Identity.swift */, - BE15241446ED33A2C2B4D07D58C8339D /* NotificationCredential.swift */, - 680C0148AA3AE130D448DEFB63CBB5BE /* OAuthToken.swift */, - 6519F9009F625F071A818263CB5BBC02 /* Request.swift */, - 62F0893ABA76B03589FE7135331FBAB6 /* Response.swift */, - F96B6FE42BADF68CEDD38A675D9B5B6D /* User.swift */, - ); - path = Models; - sourceTree = ""; - }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( @@ -1508,88 +1483,178 @@ 7C0B86260F09CB8EDBFB435BBCFC151D /* Development Pods */, 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */, CE01A060067465FD7812C4BC40CFEE8F /* Pods */, - 768EDB0CA27DD4B1E781D875214B65F6 /* Products */, + B3AF23A4ABB2D493F5FE9F59D0428A41 /* Products */, AD8E5DA2479CD67DB0AC43FE585C87E9 /* Targets Support Files */, ); sourceTree = ""; }; - D1E7D9BAA5F3A7EEF0C4B8FE3BEC9B3D /* Cotter */ = { + DD5B7D4A693F1AF85863D4C16E597CC0 /* Pod */ = { isa = PBXGroup; children = ( - 999C977F2D6141B165CF78289FCF750D /* Cotter.swift */, - 652E3948FAA404DA07E3A9CAB5E364D6 /* LoadingScreen.swift */, - 857E4CDDF190838DAA903EBA7DB73D9B /* MockedAPIService.swift */, - 3BFCC5EB8A1A0590BF8B562AA83DBBF2 /* MockedCotterClient.swift */, - 21DA5BDF01575F01F97173A7878B78FC /* PINConfirmViewController.swift */, - 515C3B2F1152B1BDC6B9B3CE90F40D7F /* PINFinalViewController.swift */, - 212BD8447C358C37A0948B8C51CCDB36 /* PINViewController.swift */, - C6B34F982DBD8D1F29B8B53E687F8B18 /* ResetConfirmPINViewController.swift */, - 5E84E44838221D7AA0B795F1132AB708 /* ResetNewPINViewController.swift */, - 1198E001FB14505CB3D4A4E60967E35A /* ResetPINViewController.swift */, - EF6D9E342497144CBB5C0949C9F6F43E /* TransactionPINViewController.swift */, - EFA501F23A049B54CAF9BE3119A5BA1E /* UpdateConfirmNewPINViewController.swift */, - EF18AA5AB687C13DB3527C5B67CBA095 /* UpdateCreateNewPINViewController.swift */, - 149010F74B97096F436477728FC84FB8 /* UpdatePINViewController.swift */, - A2E9B95D91A3BCFD07F3B5741702AC89 /* Alert */, - 582CCA3CA9205E377F052D29221DCABE /* Base */, - 670CB39F7C7369BBCA175FBFFE328A77 /* Components */, - 4CD58C5697B20CA2693FE463526B5679 /* Config */, - 1EEF4A850309AB3E8F9695F1EE6F5278 /* Crypto */, - 3BD45C218AC36130216DF0BC7E40958B /* Custom UI Fields */, - 8562DF840D71CDBCFFFAC2899A5B6FEC /* Enum */, - EECA17D187D2EC97ABFFE4F236B3551C /* Extensions */, - AF867447EEF1A1B693BC67EEF0AEBB73 /* GeneratedCode */, - 86FB5A6A00108BC7DF69B7C56FB84868 /* Local Auth */, - 3FA99B7BFBD033121BF227D7764AC560 /* Mocks */, - 3474FD310DBE2182042AC6F04795C25A /* Models */, - C3F96FAEC531C2B2DA4D0FD588E28718 /* Passwordless */, - 715F5F347CB3B839329958E9C643A812 /* Pod */, - 26F8AD224E362CF5FD3FAD35C61FA61B /* Resources */, - 61186C5D3096A0991E547A728299E43A /* Service */, - EF17C993AF19C396AF3E7CB9D73BAA17 /* Support Files */, - D8DD36BC19E88743CFB2B62E03CAD8D5 /* TrustedDevice */, - E97FB36D48180829CB945F5DE00585A2 /* Util */, + 1607D62B9B430CFF01DAF0DB6EC58955 /* AlertImageKey.html */, + 5D402F6B3FBC38568E6019387C827A5D /* AlertImageKey.html */, + E5EFA0DD12DE2222408A8A61FD651797 /* APIClient.html */, + 0D949794B74AD26675F8E97487D38C24 /* APIClient.html */, + 7C9B520330906CBB15DD00E8A69C4971 /* APIRequest.html */, + F10B8AA3D75EBCFECB2863DC3BA81402 /* APIRequest.html */, + 259DC896FAF260E2C0808A2E86D20F91 /* badge.svg */, + B8AF16B6D2533C25956E175D5C1E6E10 /* badge.svg */, + 44B34C9DDA330269DF467FBBFF09C7F5 /* carat.png */, + A2C1104B7DFA62D97C53934C25378959 /* carat.png */, + 400998401D914C7A70750A38813F2DFA /* Classes.html */, + CCFC7E92A87E378FFD42099FBBB16DDE /* Classes.html */, + FB73BD23AE6902EE974669064A2EFD8A /* ColorSchemeObject.html */, + 2B96F7B8F96F171CA89A379935F3FB95 /* ColorSchemeObject.html */, + 43CF448BC4DAADBC2AA0E2F53A3590E3 /* Cotter.html */, + D41861F11BBA7C09DB10A67A963F7E9A /* Cotter.html */, + F6BF2FD7E052CD6735DE1779E94AED48 /* Cotter.podspec */, + 8FA716D255D5C8A6A017654AABD3C1D9 /* Cotter.tgz */, + B8B4D450CE98775505715011A462EDA3 /* CotterAPIError.html */, + 5A88F47F6CC981686439DFBACE0F84E9 /* CotterAPIError.html */, + 2A06B28921FFCDA3B3F22DD749657648 /* CotterAPIService.html */, + 6023416CA6CF58CB6BB6DFF00E9AC986 /* CotterAPIService.html */, + FCCD9D7C49D7AE7A574156E608D2CCAC /* CotterBasicResponse.html */, + 589CFD819256999A6FE147FE33AFD6E9 /* CotterBasicResponse.html */, + F2F5952409D424F34FE5630F9FDA5C06 /* CotterCallback.html */, + 26AEF1BCE4D54B73AA138A422041DDF9 /* CotterCallback.html */, + 48FC6DE8F8B4D2FB309BA53A86807CC7 /* CotterClient.html */, + 63377EB310EEA6E1C3EEAD96E0DD8B56 /* CotterClient.html */, + DFAF95A6200220DDD6B9529925FA156A /* CotterConstants.html */, + 959FBA22E499FEAC2B2FE9D981D043C7 /* CotterConstants.html */, + 05AA6B3283BB9F81DB7E448A1B860432 /* CotterEventRequest.html */, + 4BF47624EDA0D3E51C2A45FF67D7D3B1 /* CotterEventRequest.html */, + CE850C833DE0AC1BAEB4CFF4092663C2 /* CotterEvents.html */, + DEA2B89BB58B8D5B57880E7360EA5628 /* CotterEvents.html */, + FEA58955001BFB44D18850F2D2D1D10B /* CotterIdentity.html */, + A632BC81AB6C0A5FD776950778938D77 /* CotterIdentity.html */, + AC0F171A3715BE4E3F35540AF92CAEDB /* CotterMethods.html */, + 202A6BD927FFD1E6BAE8F220319ADC8E /* CotterMethods.html */, + 028F11EB3C6FB9981381576ACB722380 /* CotterNotificationCredential.html */, + 27259E476CFE6F01928F93E8B91327F5 /* CotterNotificationCredential.html */, + FF72A39F57A3006BBA8B4396EE68EC89 /* CotterOAuthToken.html */, + EC82EFECF35C66DA5FDE4FAE2CC6FAC8 /* CotterOAuthToken.html */, + D37F32DD7E5FC95EE0C005098C44FC6F /* CotterResponseWithChallenge.html */, + 905225EE9484C66A28FE9AB9CF03C3C2 /* CotterResponseWithChallenge.html */, + 7155B70D9E3AA0174023BC163F082E1A /* CotterUser.html */, + 1B383F1050C646D519AC5BE763430DFE /* CotterUser.html */, + 298664FFD7EE481C278A9FFEA8CB0C91 /* CreateAuthenticationEvent.html */, + D4B8A408EE88210307782C67BBBA5F1A /* CreateAuthenticationEvent.html */, + 0EE6862C5A2466A39E6AD428A083F26F /* CreatePendingEventRequest.html */, + A24D239642AC4D0DD5FF25315F7F9592 /* CreatePendingEventRequest.html */, + F99622DB8A92EFA774473026E5264A2C /* CryptoUtil.html */, + 4E827FD078CD2BC27935BAAEF89FA501 /* CryptoUtil.html */, + E64FC6C34653E821D7E444C806F3697C /* dash.png */, + 76F63F0B8B151B0AF53071F03643410F /* dash.png */, + 676CC1BCD769192968D3FB81F53985C8 /* docSet.dsidx */, + CDAFA1CC80418127CA335601C9D30F03 /* English.html */, + B1154B15F42A4968CA223C5F76F6E36F /* English.html */, + 28D6DFF2FE2E66CC5D9E10D06B6B5D39 /* EnrolledMethods.html */, + 7798BDEA339A6A5FB89EF5E6E47ECF2D /* EnrolledMethods.html */, + DA69BC7AE7C2B44C9033A27AAFF923B8 /* EnrollTrustedDevice.html */, + C9A4DAECFFB4DE43E2E83608E7EFC793 /* EnrollTrustedDevice.html */, + 8D55857B4813BE03D268BBF7862CB233 /* EnrollUserPIN.html */, + 25F23B258793CECCC3B051EA48AD6A20 /* EnrollUserPIN.html */, + BDF4315F994F9013A9BBD7FF142105DA /* Enums.html */, + 35AE20A2F384310EC66229CD6AE1FAE0 /* Enums.html */, + 0A69DECF5235CA8ADE8D9F9FD66A038D /* Extensions.html */, + 1FF25DF26AD7F4EC79E0ED6D262A9636 /* Extensions.html */, + E270AFC2E154157BE3BC711D5C0A0CE6 /* Functions.html */, + B8E8177FD07E94E099141389ED287CB3 /* Functions.html */, + 3401C8430BA490890564A736A41CD8A2 /* GetBiometricStatus.html */, + 11A5E780C5A519AB6FB8805677FEFC17 /* GetBiometricStatus.html */, + D803E2DD524AE381FF94D28A5FF68185 /* GetEvent.html */, + ABB090991DECE08F582F8332544ACD0D /* GetEvent.html */, + 3D4428D60504538E9289643082B9B9B4 /* GetNewEvent.html */, + 1608614DDF3442E9A4299887F6A8C40B /* GetNewEvent.html */, + B43899F1C2A6CDADC2A0D0917F3306D2 /* GetTrustedDeviceEnrolledAny.html */, + A8752461DEB946DC7686E538A8FC36D4 /* GetTrustedDeviceEnrolledAny.html */, + 4B0B53FDAC8E6AC9447457B8EABA3099 /* GetTrustedDeviceStatus.html */, + C827FB9BA9EBA972F0FDC1F03E021EF9 /* GetTrustedDeviceStatus.html */, + ADF59D656BDC9F5074FEAAFF0A37E8BB /* GetUser.html */, + 6DBD351439A8EA6EF9C655B64BAE606C /* GetUser.html */, + BDA8FE2402479EEFF550BE3F258926A4 /* gh.png */, + 160EFDEC61F9A530E093A1666B5A3680 /* gh.png */, + 5FE6E6222F6D8DDD1ABCA04F864CDCD0 /* highlight.css */, + E3CAF116582B54C9889CD70F456B06F3 /* highlight.css */, + 7938A9E7D6CBAD5101E5BD7D7641D594 /* Identifier.html */, + F2596C8D0025227CA6318A00BD5E28D0 /* Identifier.html */, + 9C020CDAE8AEF41A44CD2429A3E27932 /* ImageObject.html */, + 80CDF9510AE00741C206CDEE57F46773 /* ImageObject.html */, + F9A2119C9C30D753C97D92ADCBFBB43D /* index.html */, + 91FDD4B9F50517D26C4D93A35BC39462 /* index.html */, + 42580C9AAF7D2546C2B99FEC78765C9E /* Indonesian.html */, + F5E208904DD9EBB1B082A61C4E5BCB3C /* Indonesian.html */, + AFC33D8943F0AA41EBE62CE95840DCF7 /* Info.plist */, + F196E4478A5A781F24B6BF0725867811 /* InternalCallback.html */, + 3089AEFF59C2C03EC2B6708C59E7E681 /* InternalCallback.html */, + 3DF34BCB9150DF6B47EA3576ED8A19C6 /* jazzy.css */, + 3298E7E82C8700EEE34843C1510D8C31 /* jazzy.css */, + 8CB735E4C51299ABD7C747002BB54330 /* jazzy.js */, + D51D56C7F6DAE1D628FE447B23C976D5 /* jazzy.js */, + 7FB3A6512F155E53A15A117D7B683E56 /* jquery.min.js */, + 4DA485BB9C88B1F6F51291BED48387D8 /* jquery.min.js */, + 5023276C195D24B4B8F03B8C444E1552 /* LanguageObject.html */, + FCA6C7AF48280A98C51955A1D390FB69 /* LanguageObject.html */, + A182E12DED51F8BCEE11C0F231EA733D /* LICENSE */, + 5A1010004C9F46654231A5E699FB5EBB /* NonTrusted.html */, + EBC8CCE11E0DC3FCF1522F2282A94236 /* NonTrusted.html */, + 4D4683E7F606347ED3510B4775F33FBC /* NonTrustedKey.html */, + 89FBBCF978C96551ED433C6ED8934BA2 /* NonTrustedKey.html */, + 5383F6A3BFF4B3A48236C096EDFCAF2E /* Passwordless.html */, + 97CDAE0D457B0D01772F6BED3AAB6AC9 /* Passwordless.html */, + 265E07EC7E173B325AA5152559BB92CA /* PINViewControllerKey.html */, + A52A849F5091994F9B294718ED688B46 /* PINViewControllerKey.html */, + 95193D109C5A8FF979F08025FC997C10 /* Protocols.html */, + 999112B3C45DC4764B6FE0B820803CF2 /* Protocols.html */, + 24D5F057E8DE026FDB204BEEFB6938F2 /* QRScannerViewControllerKey.html */, + 45D4AC5AE41B2BBF4532F92D94C30818 /* QRScannerViewControllerKey.html */, + 1522DD5DCDD68C74BFCFBD6B67D03498 /* README.md */, + 67CBA230890B7BD4F7290B1593006B95 /* RegisterBiometric.html */, + 6038F5B25A013C31A7A28507B58B732A /* RegisterBiometric.html */, + 17DFE7658652C4E86E09A8964CC9B5B0 /* RegisterTrustedViewControllerKey.html */, + FE5D9CBF02B23D535665012EDA2CE2F3 /* RegisterTrustedViewControllerKey.html */, + 051D709A2E32592EB0C018D1615DC333 /* RegisterUser.html */, + DCA0C439F64A7916647B02E9F739360D /* RegisterUser.html */, + 72ADCA8854128BD80B80CB03EE5A7CA6 /* RemoveTrustedDeviceStatus.html */, + F899392A6DE6D85F37AB777624DCD3A5 /* RemoveTrustedDeviceStatus.html */, + FD3ACEE8367ED3736B057157369BF4BB /* RequestPINReset.html */, + 2DABB1F5B3B9FEA57E67C6D359621D3F /* RequestPINReset.html */, + 25F715E59A05CEA82601C70AE8A03B42 /* RequestToken.html */, + DD96E7F76C30E15A3E931D0544ACA06E /* RequestToken.html */, + 8977B4D15E6048DA5DA1DC758655B02A /* ResetPIN.html */, + 4AE30054435A82F18B0CF4DB69DD41A6 /* ResetPIN.html */, + 3821FE28178C7497DE563E9463940094 /* RespondEvent.html */, + 6936E114402B25353B83FED37BEA5E8E /* RespondEvent.html */, + 5D6A16FDFE3548CD124D028E1BD26C66 /* search.json */, + 48259877962C47526F6AB38BE69CDE26 /* search.json */, + 6E9CD5500BDD69B59064FFE756C59360 /* Structs.html */, + D2490CEDCAC9BAF63C3FC4DBD23C0E94 /* Structs.html */, + 1C4C0D85E2F2DF23E780FDC7FFE365E2 /* Token.html */, + DD0D6501D0E62BFA620545DCF780B9B5 /* Token.html */, + 7640279BE7883046D4B0309309AB7BA7 /* Typealiases.html */, + E0C90BD04A3F678CB7FDAE7FD096A9D8 /* Typealiases.html */, + 4EFF9FB9850DE3289C2BB208A4E7DD1E /* UIButton.html */, + A6788FA52BB7516CB76A003400E25ED7 /* UIButton.html */, + E56555D409D9438817B04DFC9FC1DD27 /* UIButtonBorderSide.html */, + BB7836160A331E7FCAF13CD1745734CC /* UIButtonBorderSide.html */, + B014E239D201D421D870559E2EBCC4D7 /* UIColor.html */, + CAF1D96D08844073BBE91B9B3906FF30 /* UIColor.html */, + A18082C4A2441D93DF713E986D385865 /* UILabel.html */, + 9ED8AF56CA42DA13A7170DBA84C249F6 /* UILabel.html */, + EE5C76D8CA64075ED745BB24289F8E0A /* undocumented.json */, + 3368102FB50B0F541AB4C9859B38E4AB /* undocumented.json */, + F40E41F5D5BE465DEBCCCC60D2D60DA2 /* UpdateBiometricStatus.html */, + 1E2F7783BF4B7E2E0B423B9423650F68 /* UpdateBiometricStatus.html */, + F2ED55FE9D1F84654C2F23B0CD55A4D5 /* UpdatePinStep.html */, + 243984DA1C49027AF8C333965C794AAB /* UpdatePinStep.html */, + 872333C3D3F7B799DB2073C57E373C0D /* UpdateUserPIN.html */, + 0A6CF95284A5A3E0D5AAF254FB6FE895 /* UpdateUserPIN.html */, + 73FB130B4E8A1E7B2D3D867C39DA35C0 /* VCImageKey.html */, + AF445BCE317BEE9E30FFDE1FE73E76FC /* VCImageKey.html */, + C98B841179C30F96CDFC3D21283104E5 /* VerifyPINResetCode.html */, + 709BEF864E3F2B9F409A4EF776B53BA3 /* VerifyPINResetCode.html */, ); - name = Cotter; - path = ../..; - sourceTree = ""; - }; - D7F6E81AF649B5FB2094514B74F65A95 /* Requests */ = { - isa = PBXGroup; - children = ( - 61EDF753B531B9D53F41D296659681F6 /* CreateAuthenticationEvent.swift */, - 643509475A97F365F847AEA4148C5285 /* CreatePendingEventRequest.swift */, - 8E4CF80A22BA5786F1B20D3385B1AFAD /* EnrollTrustedDevice.swift */, - 4C4F5EE41F31C2631DBD6654D3BF7059 /* EnrollUserPIN.swift */, - E68BF3E14B4D0C4AC827252A0197C144 /* GetBiometricStatus.swift */, - 5F31891D15AAB038FF8B9E6D8D9D008B /* GetEvent.swift */, - 01FB95A1337E573402B9D61E8ADC0DA8 /* GetNewEvent.swift */, - A4FC1546FC62699FD054217A9B693BE2 /* GetNotificationAppID.swift */, - B558706B13BC53731F7283A365F18113 /* GetTrustedDeviceEnrolledAny.swift */, - D262431ED78D68A927A5FE19BC151334 /* GetTrustedDeviceStatus.swift */, - B8392B0EC756086E2846E501FB5DA976 /* GetUser.swift */, - F6FD5CD2EA5C15E68B254D2062B77A47 /* RefreshToken.swift */, - B951E46DAE238B00D1C7DD6B8F4ED246 /* RegisterBiometric.swift */, - 1D9ACC081C81E48E1ACDBBB23F3DC026 /* RegisterUser.swift */, - 839BA615E722A5F99D3EC8AA926C608F /* RemoveTrustedDeviceStatus.swift */, - D71262338C054814C70F35FC8D0ED4C4 /* RequestPINReset.swift */, - E0A16806A07D9D58C1FE56DBE445310A /* RequestToken.swift */, - C664611C9D3EDB6B2B353B3FDAB49150 /* ResetPIN.swift */, - 32F986652B48D288538301F5CE75A6EC /* RespondEvent.swift */, - FC80103637CE38CD4FDE4CE7BAE617AA /* UpdateBiometricStatus.swift */, - FB681B6D77ADB23073C91701B19CC719 /* UpdateUserPIN.swift */, - 8C4AF5AF7305793D361D4115A4C4BB3C /* VerifyPINResetCode.swift */, - ); - path = Requests; - sourceTree = ""; - }; - D8DD36BC19E88743CFB2B62E03CAD8D5 /* TrustedDevice */ = { - isa = PBXGroup; - children = ( - 17CCC10B79D3E54167E93F6AE78E67AE /* TrustedDevice.swift */, - ); - name = TrustedDevice; - path = Source/TrustedDevice; + name = Pod; sourceTree = ""; }; E2983683FD097A93297E2F5D4E382B36 /* iOS */ = { @@ -1607,88 +1672,37 @@ 9251126BAE587413F051A8E4AB5A5C03 /* Frameworks */, A17D52B7A04785290FE74D91A6B0613B /* Support Files */, ); + name = OneSignal; path = OneSignal; sourceTree = ""; }; - E398B782553D9DE1557FC0850EE879C9 /* Assets */ = { - isa = PBXGroup; - children = ( - 25BE2570CD457BD3C44447F17ADD36A8 /* cotter-failure-x.png */, - F66AE16473FCBCF369BFE116CCD998B9 /* cotter-fingerprint.png */, - DC517FC36DF7E7551850193FCEF442F5 /* cotter-fingerprint-failed.png */, - 041916CEE73B9E1B2B870C8978A7A985 /* cotter-lapis-logo.png */, - 40DC0F66A11EA0C5E9828A7B5356ED9E /* cotter-success-check.png */, - 50B3E1C8CADA0CC8FE75700ED42656D5 /* cotter_logo.png */, - 2EB0C384CC9E399493D73E9FC789C7AB /* tap_device.png */, - AB03D1E1955742C54D56783B447D78FA /* warning.png */, - ); - path = Assets; - sourceTree = ""; - }; - E97FB36D48180829CB945F5DE00585A2 /* Util */ = { - isa = PBXGroup; - children = ( - B7AF3A87D447265768124E18151FAF8D /* Image.swift */, - 2D7819A300CE5E09BA9FB6DDF036BBD8 /* Token.swift */, - ); - name = Util; - path = Source/Util; - sourceTree = ""; - }; - EB1AD71FD3D74291CCC60AB6BC9DF135 /* Keyboard */ = { - isa = PBXGroup; - children = ( - E41FA14ADBE3BEF637781FBA4A16B507 /* KeyboardView.swift */, - ); - path = Keyboard; - sourceTree = ""; - }; - EECA17D187D2EC97ABFFE4F236B3551C /* Extensions */ = { - isa = PBXGroup; - children = ( - 852813852565142100F407DE /* UIWindow.swift */, - 548AF493F6257067947B1CBF4AC41221 /* Collection.swift */, - 73522986844CA97C0DA5727C89B6D20F /* String.swift */, - C1B9C516A3E58FA8021C61F2D9E246BD /* UIColor.swift */, - 33371B50CFA84A7E8F7AEC547D48E4C4 /* UIImageView.swift */, - 2DC54EF53D0A8B11BD1227885EF8DD4D /* UINavigationController.swift */, - 9F4AF11A52A4BC68396935F562DC75A9 /* UIView.swift */, - 3AB5B5F331DC3DDFC81C8D6923F9C1C8 /* UIViewController.swift */, - 85E75624253535AE0053A186 /* UIImage.swift */, - ); - name = Extensions; - path = Source/Extensions; - sourceTree = ""; - }; - EF17C993AF19C396AF3E7CB9D73BAA17 /* Support Files */ = { + E5A7B7FD1071518F53A4454602156E60 /* LanguageObject */ = { isa = PBXGroup; children = ( - A7F5C80616D4C03D5F04F9F1532F934E /* Cotter.modulemap */, - C180B9127A8A150055811C73EEB28AB5 /* Cotter-dummy.m */, - A3AC2320E8C79C414694B813EB60A75F /* Cotter-Info.plist */, - 837EF716155D50C32CE218110CB304DD /* Cotter-prefix.pch */, - 7EFE6D19235D816F7DB49134E10E7A12 /* Cotter-umbrella.h */, - C408697FCE35BDF0D36905B0F2518CB7 /* Cotter.debug.xcconfig */, - ACCDE17559770F96CB6872D005E466D8 /* Cotter.release.xcconfig */, - B97193DAE29DDB7A09400E6B8DD983D4 /* ResourceBundle-Cotter-Cotter-Info.plist */, + 137A6C46ADD23967EA485198186843A5 /* English.swift */, + 98A0A5F167C0859C6EBC6875C4ACB256 /* Indonesian.swift */, + 8CD77D83BC50E9C01828423077045C7D /* LanguageObject.swift */, ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/Cotter"; + name = LanguageObject; + path = LanguageObject; sourceTree = ""; }; - F0E7DE53A13F8992B03CED45DEAF7D3C /* ColorSchemeObject */ = { + EE390F6E1308EF9194D2B02A54D5271D /* FontObject */ = { isa = PBXGroup; children = ( - FA5D993F6DB5426FADCF3B5644C82385 /* ColorSchemeObject.swift */, + 640701A966D347E2B835CA394ACCDA91 /* Default.swift */, + FDCD81E7871106106F9EA4C9D425DDF1 /* FontObject.swift */, ); - path = ColorSchemeObject; + name = FontObject; + path = FontObject; sourceTree = ""; }; - F7486473A6F6CA7A8AF925F0091216D0 /* Models */ = { + FA02AF84F20A7766ECC78AB2B7DAD60B /* Models */ = { isa = PBXGroup; children = ( - 5014CD006C6C13D3E570C3EDEE5C3A08 /* UserInfo.swift */, + 8B816388B5A800514CF7F2BE2BCFA01A /* UserInfo.swift */, ); + name = Models; path = Models; sourceTree = ""; }; @@ -1703,6 +1717,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2EB12A01B2C5D17E58B16641AE2F7E70 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3FB8CE623ADB1E6D0525C6CDD06D0128 /* Cotter-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 51A00ABBA2BEF3913A4628399CEBD45B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1719,12 +1741,12 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 792A6AA35F9342CAE235A2FBE6EA7DCA /* Headers */ = { + A61DA8C61EAFD83C4B8BF0877AF5AF72 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - CA77704114A4120D4F5F5509E544F41F /* TTGSnackbar-umbrella.h in Headers */, - 239092650F8E028B97A33424422F2059 /* TTGSnackbar.h in Headers */, + 909DAACB3565C684E2995381AF6E1AA1 /* TTGSnackbar-umbrella.h in Headers */, + F510B2EE7CE988840A477A7F59C2CBFB /* TTGSnackbar.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1736,14 +1758,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C75632C0C8CB55C9DB56E7566BF06ECA /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 18488BFC4A3852E61C1A86208C5C9B7A /* Cotter-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; EA320FC7BE911DEDD0307C22980DA360 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1757,12 +1771,12 @@ /* Begin PBXNativeTarget section */ 1CB35B409B95E585BFA946F3A465F9A1 /* TTGSnackbar */ = { isa = PBXNativeTarget; - buildConfigurationList = 6104F6A2BF19981AE2C11B9AA7E25511 /* Build configuration list for PBXNativeTarget "TTGSnackbar" */; + buildConfigurationList = 6FD78FC79D14C8FDF7526DB6EF16E6D0 /* Build configuration list for PBXNativeTarget "TTGSnackbar" */; buildPhases = ( - 792A6AA35F9342CAE235A2FBE6EA7DCA /* Headers */, - 954F18AD8118AD1392F0D0DDCCCBEED6 /* Sources */, - 4DA9FAA7FADA03546DC848CD4741571A /* Frameworks */, - 73966EC443B1FABDD0574A7B6E9AC39F /* Resources */, + A61DA8C61EAFD83C4B8BF0877AF5AF72 /* Headers */, + AB50CE0247E8C020E042EDB04645C31D /* Sources */, + 6A3ABA7F18899EAF058B5BFFA2627A63 /* Frameworks */, + CA8446DE81D13C108C1AAAC4258C59D9 /* Resources */, ); buildRules = ( ); @@ -1834,38 +1848,38 @@ productReference = 186C962BB0FA0079ED68B7C9D6664B84 /* Pods_CotterIOS_Example.framework */; productType = "com.apple.product-type.framework"; }; - 73D2AD3718E111E4FD58AD933268EE14 /* Cotter-Cotter */ = { + 72725BFB38D9E265FF037056E19AF71B /* Cotter-Assets */ = { isa = PBXNativeTarget; - buildConfigurationList = 9DA0F6F75D7CDE2A52C8AB280B102818 /* Build configuration list for PBXNativeTarget "Cotter-Cotter" */; + buildConfigurationList = 14F4728C102D2724925F85BC64174134 /* Build configuration list for PBXNativeTarget "Cotter-Assets" */; buildPhases = ( - FB34E831B8BCC8FD241FABC2028A896A /* Sources */, - 7CA687F37081FB687FC430CEAFB93B49 /* Frameworks */, - 2CEB02FF289210E337FFD0248C0B054C /* Resources */, + 73EA4A23B4DA683FA67D04A43BF26811 /* Sources */, + 7D2135E588517FE639133AE05DFF057E /* Frameworks */, + 824F5C5FDC19AA744E180D5E41FEFE4C /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = "Cotter-Cotter"; - productName = "Cotter-Cotter"; - productReference = 207EBBB645DB56C874845DD1B5362DB3 /* Cotter.bundle */; + name = "Cotter-Assets"; + productName = "Cotter-Assets"; + productReference = 1E099368098DAE1150AADA943782B938 /* Assets.bundle */; productType = "com.apple.product-type.bundle"; }; 99AEC7CA061D4C26C3F42AFA026FE402 /* Cotter */ = { isa = PBXNativeTarget; - buildConfigurationList = B2BD3B34F2E62E75C3902461586BBBB8 /* Build configuration list for PBXNativeTarget "Cotter" */; + buildConfigurationList = A9386DB22435081AE659E575A3168DD4 /* Build configuration list for PBXNativeTarget "Cotter" */; buildPhases = ( - C75632C0C8CB55C9DB56E7566BF06ECA /* Headers */, - 336C578DAA2BE219E146BA8420EBC509 /* Sources */, - 8D0C1F333EC8D477DAE51C6FE3D4A0C2 /* Frameworks */, - 8301F1F5BE091D322D37709C25B1692B /* Resources */, + 2EB12A01B2C5D17E58B16641AE2F7E70 /* Headers */, + 45AEB21A078F16321F664A7E92697584 /* Sources */, + 925FED1D86C3AF1BC1572F0A84239B76 /* Frameworks */, + 3E942097B588150A4BD70E4947DD2FF3 /* Resources */, ); buildRules = ( ); dependencies = ( - CA766D44AD2009F11E62307F1DD330B1 /* PBXTargetDependency */, - C3856005848D88F562BABD975BD794CB /* PBXTargetDependency */, - 26DB2FD678E992253DF628FD525B7BFD /* PBXTargetDependency */, + C7F1C1705373F656430B495BC22D8E95 /* PBXTargetDependency */, + 060381E17850DAE25544709474283D4A /* PBXTargetDependency */, + D04D666FBD695E2FB125C5035832FFD5 /* PBXTargetDependency */, ); name = Cotter; productName = Cotter; @@ -1908,12 +1922,12 @@ Base, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 768EDB0CA27DD4B1E781D875214B65F6 /* Products */; + productRefGroup = B3AF23A4ABB2D493F5FE9F59D0428A41 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 99AEC7CA061D4C26C3F42AFA026FE402 /* Cotter */, - 73D2AD3718E111E4FD58AD933268EE14 /* Cotter-Cotter */, + 72725BFB38D9E265FF037056E19AF71B /* Cotter-Assets */, 6F13695E06195A78EA8A95F8C7ED0D2F /* Nimble */, 210EB05CEC7AD9C148F90F752DE74C48 /* OneSignal */, 6F7853FE0141DC68336C4306610A0FD7 /* Pods-CotterIOS_Example */, @@ -1933,48 +1947,48 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2CEB02FF289210E337FFD0248C0B054C /* Resources */ = { + 3E942097B588150A4BD70E4947DD2FF3 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - C03947A801676A8EADA85CD6D657AB51 /* cotter-failure-x.png in Resources */, - 3CB69091A029DDA4D2D74852A964C916 /* cotter-fingerprint-failed.png in Resources */, - BDC8F36464FDFEA10FA16BE2BAF50119 /* cotter-fingerprint.png in Resources */, - 9E57BF2107E09BC7F2D0291F2C378295 /* cotter-lapis-logo.png in Resources */, - F8C7BC4668BAB0C4E92FCA9B64CAFAC4 /* cotter-success-check.png in Resources */, - 90E85B255F70B0A4950CD149985F3C8D /* Cotter.storyboard in Resources */, - DBD2EEE32DDC451B55F9F4A632FAF7D4 /* cotter_logo.png in Resources */, - 85E75645253536910053A186 /* cotter.xcassets in Resources */, - C99F4CC60C7F7F7772F835C803A7ADAE /* KeyboardView.xib in Resources */, - 7AB1AA6C6A5061311951BEFEC94CB09D /* tap_device.png in Resources */, - 4AC31D7241B423D0BE92E1E5A52F54BB /* Transaction.storyboard in Resources */, - 9BB1EE62E8EAA63D965F22CDD5825834 /* UpdateProfile.storyboard in Resources */, - 2BD0EDB3F326D6CB664A7C2543A67A02 /* warning.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 73966EC443B1FABDD0574A7B6E9AC39F /* Resources */ = { + 824F5C5FDC19AA744E180D5E41FEFE4C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + D876104EFC3803F79DA702ABC8DDAD67 /* cotter-failure-x.png in Resources */, + F4B93C42466C3DA707D1E78D17F30914 /* cotter-fingerprint-failed.png in Resources */, + ED88B5127BA0BD08D805DC0072E7C5C5 /* cotter-fingerprint.png in Resources */, + 08F7E3A84735F767E09B173B05122495 /* cotter-lapis-logo.png in Resources */, + 1E2F1B28F6F8EEE0F13F308E45E4D69F /* cotter-success-check.png in Resources */, + D73DC6221C70BCF2FA3BA716124CE941 /* Cotter.storyboard in Resources */, + 163073622ACDB67C373AF807C95F9FFC /* cotter.xcassets in Resources */, + A0CA77E5A0F34AC3DE4D4F7D457D4101 /* cotter_logo.png in Resources */, + BD4EA3AF1A49344485E254DEEB53B53D /* KeyboardView.xib in Resources */, + F44FBCB1D592C0DCA56C40A3BA47D0E3 /* tap_device.png in Resources */, + 686829D0AF2F4AB2A58DDDC174D85FC7 /* Transaction.storyboard in Resources */, + 94952B087B0984D369703C1B240DB0AD /* UpdateProfile.storyboard in Resources */, + 56CC7A1C74BA21736A3A96A7D871ECD3 /* warning.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8301F1F5BE091D322D37709C25B1692B /* Resources */ = { + 861566474E3C609EC64086A36D6B230A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 861566474E3C609EC64086A36D6B230A /* Resources */ = { + AE4CC38914E3DCC516ACCFE069ABE62E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - AE4CC38914E3DCC516ACCFE069ABE62E /* Resources */ = { + CA8446DE81D13C108C1AAAC4258C59D9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -1991,122 +2005,122 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 336C578DAA2BE219E146BA8420EBC509 /* Sources */ = { + 45AEB21A078F16321F664A7E92697584 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C530678E70BC84E5A64F880709082819 /* AlertService.swift in Sources */, - 85E75625253535AE0053A186 /* UIImage.swift in Sources */, - FE343E790F5E670159F451B601D3B774 /* APIServiceProtocol.swift in Sources */, - C1A01ED5357136AFDF632FE87FF770BC /* AuthAlertMessages.swift in Sources */, - 6BA720A7F6E527880B6DB5C3067D464D /* AuthMethod.swift in Sources */, - 140438420B87358766C88E41FEBAFD95 /* AutoEquatable.generated.swift in Sources */, - F86315360CDC7EB7F8E1229AEAE5A65E /* BasicButton.swift in Sources */, - 35C80C06B2826AE13F2AD0DD453F72F4 /* BiometricAuthenticationService.swift in Sources */, - A3E918AA50FECF60BF8D1600E45B8366 /* BiometricFailPopup.swift in Sources */, - CC19B1C3F8D96E8B6355B72BD9EB7D91 /* BiometricRegistrationService.swift in Sources */, - 40A2ABF5DDC566BE71CBB5C2CADA5587 /* BiometricSuccessPopup.swift in Sources */, - F750FCC8DE29F5FD18F1C109534CDC34 /* BottomPopupModal.swift in Sources */, - 0CEC901A613300A717BCE9FBB4CA9C21 /* Callback.swift in Sources */, - 958C0CE8EDB5DA5DC56C0D53C2EF4028 /* Collection.swift in Sources */, - F5B2874DA47286FFC3243BDDD9DDF329 /* ColorSchemeObject.swift in Sources */, - 951C32C0477AA68596C2DEA1C41C9C9C /* Config.swift in Sources */, - 8EF5D98966D3CB86E02ECD812D731BA8 /* Constants.swift in Sources */, - 1A88419585C48820BD50E584BA714B95 /* Cotter-dummy.m in Sources */, - FFEE9D1EC0294F2C981E81CCF256D54C /* Cotter.swift in Sources */, - E4858A063A5AAFD5A5A253F744FA17D7 /* CotterAPIService.swift in Sources */, - 4D79E5596121129F1533FC84B3C77AF2 /* CotterClient.swift in Sources */, - BBD24BD9A872CC42FADD6F5DA8EBFF71 /* CotterError.swift in Sources */, - FB61B169F5A61898CB849B50E5C55200 /* CotterImages.swift in Sources */, - 56D9714B05EBE2506170952B76E6DE90 /* CotterJWT.swift in Sources */, - B5B90DBFA0ACADC11051ECA86BB75D76 /* CotterNavigationViewController.swift in Sources */, - F0CAF424DC3AB96B76D92FF93A112757 /* CotterStrings.swift in Sources */, - 918D9A47F511F9DD0FA130067E0870BE /* CotterTokens.swift in Sources */, - C1E307E20A79F853B09C96D61F4BAEEB /* CreateAuthenticationEvent.swift in Sources */, - 01626F85D0E0A1772AA9963EB3609446 /* CreatePendingEventRequest.swift in Sources */, - 30CD4300B366FAEFCE0EAE1CC25C9B83 /* CrossApp.swift in Sources */, - 043E05E350F907CB46F007EC0D279058 /* CrossButton.swift in Sources */, - 179CA1F1539E84B1632D546D3E57C6C0 /* Default.swift in Sources */, - F2AEB06CD0DB0B91A78D74B48F1AEA3C /* English.swift in Sources */, - D882EC9DF2F5C328A4F75DC48C5F716B /* EnrolledMethods.swift in Sources */, - D27DC5CD31DE6BB2142E0ED9D16BDF80 /* EnrollTrustedDevice.swift in Sources */, - 602800B1FF749FDFAE5C181255367B18 /* EnrollUserPIN.swift in Sources */, - 7AF8A7BFCAA8BB4EB43DB4F8C8AACD31 /* ErrorMessages.swift in Sources */, - ADF73974DE50268DC61F8AB0DDBF5AAE /* Event.swift in Sources */, - 354B14FD3BB78069E127EE4E79CD8248 /* FontObject.swift in Sources */, - 82A1B61342F0966055C677A256C045CE /* GetBiometricStatus.swift in Sources */, - F712F4C0CA834990D217D5DE6138EE35 /* GetEvent.swift in Sources */, - B9C7EA97BA3447E6F48582F6D0C28B31 /* GetNewEvent.swift in Sources */, - 3B64A52065909B3BC931819BD8913360 /* GetNotificationAppID.swift in Sources */, - B26C922EB70FE2ADA30F4E8630169ABB /* GetTrustedDeviceEnrolledAny.swift in Sources */, - F4FFE895891703FE26243B8EF157CA55 /* GetTrustedDeviceStatus.swift in Sources */, - 85A1C6898CF5E8F2D1A4A6DEAADBF90B /* GetUser.swift in Sources */, - 555DF923E896731106913C97A6C487C5 /* HTTPCallback.swift in Sources */, - 604394930D457F7ECF056787E44E9E2F /* Identity.swift in Sources */, - 4ECB8519F166C240ABF2C0225F6879BD /* Image.swift in Sources */, - 7AABE94431E241E86D11069C120243F6 /* ImageKey.swift in Sources */, - 15E3EC06E352C9683BB82626DB707F3C /* ImageObject.swift in Sources */, - B171C84DB4534E8137C2F15F5F8F7254 /* Indonesian.swift in Sources */, - B831C74028710ABE8E242EE5C9C93419 /* KeyboardView.swift in Sources */, - E3DC54D950BDFC2C6FC89233FFDE9604 /* KeyStore.swift in Sources */, - 9540D59AAF1CDC6659045E268071C324 /* LanguageObject.swift in Sources */, - 0B327C6E80884DBD5BCCAD5AC735BDD8 /* LoadingScreen.swift in Sources */, - 226859A913F378D1B37860FBF9D1F1BD /* LocalAuthService.swift in Sources */, - 91058AF7B026BF83F41ABD0469F879B6 /* MockedAPIClient.generated.swift in Sources */, - D5708C2C8641F6A88CD172D8A23D7709 /* MockedAPIService.swift in Sources */, - 5C36A027D8A41B50849B5F40D7E2248A /* MockedCotterClient.swift in Sources */, - CA00CBD82A9C1AF205AFE7CFD3C9604A /* NonTrusted.swift in Sources */, - 697DD1F8FFF481A2C01F6ABBA5015A9A /* NotificationCredential.swift in Sources */, - 011411C60CFBBCA4382D141E7B1C0AA8 /* OAuthToken.swift in Sources */, - 852813862565142100F407DE /* UIWindow.swift in Sources */, - 26550585B12AB8BAEF3AF380DA252736 /* OneTimeCodeTextField.swift in Sources */, - 97E2337485FFADFEB5442999CA48FEAF /* Passwordless.swift in Sources */, - 7DC356E1F06685C9417C814904E89D84 /* PINBaseController.swift in Sources */, - 821E09EB75EF532C7C097D6B9837B3DF /* PINConfirmViewController.swift in Sources */, - 3736FB48EDA08CD98F56B1E736EBBF27 /* PINFinalViewController.swift in Sources */, - 27DEE044021A5670B9DCDB3B32A42DDA /* PinStepEnums.swift in Sources */, - D0943C11A3DD419DAA0D29D5808F9B61 /* PINViewController.swift in Sources */, - 8B593E98FCFBE553F2AA93D212C82543 /* PKCE.swift in Sources */, - 4636BD7FD767BAE6226C5CC68D3B80D6 /* Protocols.swift in Sources */, - EE203091827227C3A11C99DD9A9F3404 /* QRScannerViewController.swift in Sources */, - A57E4C7870419C221F9593601D7476BE /* RefreshToken.swift in Sources */, - 85C66703255116C8005C4AE6 /* BiometricRegistrationFailPopup.swift in Sources */, - 0A8719F18AADFBA156F0782E57CB11F6 /* RegisterBiometric.swift in Sources */, - 5CE37DF1DFDF06D166CF0F41A4302961 /* RegisterTrustedViewController.swift in Sources */, - B58B86B2152B837F3DBAA7B2EF3DD1D4 /* RegisterUser.swift in Sources */, - 6F444AF1CB3EC9DA48E4FD08CC7A234F /* RemoveTrustedDeviceStatus.swift in Sources */, - 39CBF7688BBAB5B4060F7EDFC5BCE51B /* Request.swift in Sources */, - 54073CBE39AB64CBBC550F868BD42E48 /* RequestPINReset.swift in Sources */, - 45B1D4370DF8163EF774F5FE75CCC053 /* RequestToken.swift in Sources */, - BAED2B2F96E1F01B5E254197612D2F7E /* ResetCodeTextField.swift in Sources */, - 6285F85361D04A62D328B153F83A935F /* ResetConfirmPINViewController.swift in Sources */, - 5A466D6354DAE13B17C581F29A04AF67 /* ResetNewPINViewController.swift in Sources */, - FD5E6DED3282F69574AD6750C220DDB1 /* ResetPIN.swift in Sources */, - CC84095281010A0A2077447E46FB56CB /* ResetPINViewController.swift in Sources */, - F2A3EB73E9490AF76E5E9AB259D0F21B /* RespondEvent.swift in Sources */, - AEDB4C3DF376D2C156970E4268A37403 /* Response.swift in Sources */, - 323CA2C1414AC710F8A0751938178FC8 /* String.swift in Sources */, - CF42ED059DCB1B1295559A353F4585B6 /* Token.swift in Sources */, - 826AD5DD50B4ABB7EAF2045E9692541F /* TransactionPINViewController.swift in Sources */, - 674AF03FE32446527E76DF0593F5EEDD /* TrustedDevice.swift in Sources */, - 4CA535C07A87974CD61532A5352F057B /* TrustedViewController.swift in Sources */, - F4780C321E4B1C273E036D202C6DB484 /* UIColor.swift in Sources */, - B1729AF7E8004738820793ADC40451A3 /* UIExtensions.swift in Sources */, - BB57E55117DC5145C777F2713CC46E88 /* UIImageView.swift in Sources */, - 11261108BB8F9D5E81D3D4EF1667B597 /* UINavigationController.swift in Sources */, - DE7543DF220015DE53701E1528C4229F /* UIView.swift in Sources */, - 273A76AB05855AE158DD8509CF97F342 /* UIViewController.swift in Sources */, - 1626FCEA906E5AC0835C28C0AFBF5F1F /* UpdateBiometricStatus.swift in Sources */, - 074156582B8258F37C8D65109607EA50 /* UpdateConfirmNewPINViewController.swift in Sources */, - DEE5AA719FA388CAF2E91D227894C015 /* UpdateCreateNewPINViewController.swift in Sources */, - 7CC65587ADA0056188A03DBA0EBA37EB /* UpdatePINViewController.swift in Sources */, - 87D2CE559F5D9822C0FEB123D190B293 /* UpdateUserPIN.swift in Sources */, - 93AABA337FF2DAD360EF428943124359 /* User.swift in Sources */, - 03D141D44DF252C62F5C924E7C41A503 /* UserInfo.swift in Sources */, - 5EEB04A94B9E28D2D7F70941024F4258 /* UserKey.swift in Sources */, - 335728582F704DCE227F7F6C6C4F667F /* Utils.swift in Sources */, - 6FE5D4F51F019C7711072D8658A5095B /* VerifyPINResetCode.swift in Sources */, - 3E94318BFC647D7175B96D64797D7F3D /* ViewControllerClassNames.swift in Sources */, + F55249F43DC591337B68934F29309772 /* AlertService.swift in Sources */, + 07BC42E1FEA2694A2D64B1447D73A135 /* APIServiceProtocol.swift in Sources */, + 198D590072D4209935F6312BE5D04717 /* AuthAlertMessages.swift in Sources */, + 7D22BCE55408904E6EE26A56914692CB /* AuthMethod.swift in Sources */, + 7B1E3AE9C968215DA3188CCDF002A1C0 /* AutoEquatable.generated.swift in Sources */, + 882FFD022038E6C8A8817B8D8E23EA20 /* BasicButton.swift in Sources */, + 27090A2823C943DB023BAE5920BC4C8D /* BiometricAuthenticationService.swift in Sources */, + 1B8D1994F6D7CE4A1307449946072A87 /* BiometricFailPopup.swift in Sources */, + C73A924EB24B85FCC2E722C6CB7F6489 /* BiometricRegistrationFailPopup.swift in Sources */, + 7C0DED0384ABA06FF0A4A4D00E60C42F /* BiometricRegistrationService.swift in Sources */, + 5ABB0D4512F9A18DFE6B7473F7744578 /* BiometricSuccessPopup.swift in Sources */, + 9A0F9BCADC79292CD6508259F87BD814 /* BottomPopupModal.swift in Sources */, + CE17AE024BAE88457F41783982DB99A6 /* Callback.swift in Sources */, + 4B4BA3CA6382DCCE40A2432EA5FB0799 /* Collection.swift in Sources */, + A583BCF7BE7FF1EC94BDA0A24149D5A5 /* ColorSchemeObject.swift in Sources */, + 8269EAAFF58E28580D22764E9AE3CAE2 /* Config.swift in Sources */, + 3C66995AD253B3058CB94D0615AB728D /* Constants.swift in Sources */, + 8B71646650F074DF1639B82AE8B061BC /* Cotter-dummy.m in Sources */, + 8E3A9CE073B780C69BED699F6012E262 /* Cotter.swift in Sources */, + 447B1E554AAC41B518A75FE325903502 /* CotterAPIService.swift in Sources */, + C00C2218807E8D99BF1C4C184AD99B2D /* CotterClient.swift in Sources */, + B898692798BEC4DA18E95DFDFE599625 /* CotterError.swift in Sources */, + 462903A129B72BBEA603D4E0AFCA90BF /* CotterImages.swift in Sources */, + 2BACC36F65A5D6CEDC271C0AFFDA571D /* CotterJWT.swift in Sources */, + 81D38361731A13A7B627D6130879B6E3 /* CotterNavigationViewController.swift in Sources */, + C0DB8B1691463AF56ACCA012473ECA8C /* CotterStrings.swift in Sources */, + E908B8DBDA65B236A1B23C2034FFA39E /* CotterTokens.swift in Sources */, + DC83C1EF119A956AE6D206298D5E88CD /* CreateAuthenticationEvent.swift in Sources */, + 706556B69623E2529E4A6E517308947F /* CreatePendingEventRequest.swift in Sources */, + 341A4D54B75342CBF14EE40755C44A9F /* CrossApp.swift in Sources */, + 95F5979DB2B387C1AB2A88B4383EE696 /* CrossButton.swift in Sources */, + B59F80DCE02BFF9602654153C05056C8 /* Default.swift in Sources */, + E61A11D6E78E67A61B682CF611E465F4 /* English.swift in Sources */, + 203F926603DD18A1F0560E28C6EA2293 /* EnrolledMethods.swift in Sources */, + 1F9F04A740559C2802FD47AC0B6D0CD5 /* EnrollTrustedDevice.swift in Sources */, + D7AA38E6F0A66ACDD3FBCFE959004620 /* EnrollUserPIN.swift in Sources */, + 7ABD8749D7A552858013A6F135662377 /* ErrorMessages.swift in Sources */, + 319A0ABB7F579AF9D5FF4A708B7146AC /* Event.swift in Sources */, + FF256ED0E4DA022B049851E330C088FE /* FontObject.swift in Sources */, + AFF96158849C3AD97660094221937562 /* GetBiometricStatus.swift in Sources */, + 6A5491BD888E27AD47AA4A553E34B532 /* GetEvent.swift in Sources */, + B6B068EF11ED2F285E7445B671C0DC51 /* GetNewEvent.swift in Sources */, + D61239855AD97E68E515B2F012276817 /* GetNotificationAppID.swift in Sources */, + 0FEF64E6B3966A2B873FD65FD19D9452 /* GetTrustedDeviceEnrolledAny.swift in Sources */, + 48D30D78F49F9108C635B68862354A9F /* GetTrustedDeviceStatus.swift in Sources */, + 02C647F40D1FEC59FBE3641838BDD71F /* GetUser.swift in Sources */, + D60F7FADD3D11059EF5DFF4F45EC50AD /* HTTPCallback.swift in Sources */, + DE7DDE9FFC6086FE1A746299B828E650 /* Identity.swift in Sources */, + 0F61BBE229DC32A794D67EC813C8342B /* Image.swift in Sources */, + 1D6B090E92226F882E43A8C93D99AAA0 /* ImageKey.swift in Sources */, + 6E6B8D5A195422F90B591094C9E6CBEB /* ImageObject.swift in Sources */, + A478A7D954555C38660C91BEC56B5BCA /* Indonesian.swift in Sources */, + CB0F15AF50B18DB77DA8BCAFAF914708 /* KeyboardView.swift in Sources */, + F29420DB5FA80C166A169C108EC9D89E /* KeyStore.swift in Sources */, + 2A3BA13377C662789E433DEA7973F864 /* LanguageObject.swift in Sources */, + 45246F6CD732F41E83F0B630D3129CB1 /* LoadingScreen.swift in Sources */, + 0CA0920A1FF4799648CB748447E94AD5 /* LocalAuthService.swift in Sources */, + 1E18B7CA6517B5D6B02F7A153473AD98 /* MockedAPIClient.generated.swift in Sources */, + 7C7E963762C6D9E7C5C662D25B812CF6 /* MockedAPIService.swift in Sources */, + 849355CB8A5056D104C45F49160A172F /* MockedCotterClient.swift in Sources */, + 59814608DE851BCB82A10E1098DBBA6B /* NonTrusted.swift in Sources */, + 59E3AD153A90F11073AF5C5313E417A4 /* NotificationCredential.swift in Sources */, + E0233D6FEEC972D312F4783AAE10CF52 /* OAuthToken.swift in Sources */, + 76E021C40399BDD88044A5D3A613CB44 /* OneTimeCodeTextField.swift in Sources */, + 4847F76AF7CD5336FCF96982DF919CA6 /* Passwordless.swift in Sources */, + 9FEC5E44570BEC108345852FD12DDED4 /* PINBaseController.swift in Sources */, + 2C8C323E9D1C8BD6E5325ADAE2BFEEFF /* PINConfirmViewController.swift in Sources */, + 9268CFCB745C8508BD8C3F6BD3747158 /* PINFinalViewController.swift in Sources */, + D608A66918C5E0389EA45E0D88A081E0 /* PinStepEnums.swift in Sources */, + 642347AEC44468399987426D7943A171 /* PINViewController.swift in Sources */, + 6E4513369CF1193CA92D50ECC78349E1 /* PKCE.swift in Sources */, + ECE8586A3CF0665791F7F9B000E92904 /* Protocols.swift in Sources */, + F1319FCC223BC044DA932B548E38467A /* QRScannerViewController.swift in Sources */, + EA35D305FC4F1C1B37BC2DA3BE6211FC /* RefreshToken.swift in Sources */, + 3CC6A702230C16D21E9529F957F19D82 /* RegisterBiometric.swift in Sources */, + 00964DB21AEA03F7622E89BCED8805AE /* RegisterTrustedViewController.swift in Sources */, + B977A02C3FFFF50D47F0D70682FD2FFF /* RegisterUser.swift in Sources */, + 5A02895756F1F5D3D029A8D8E1107D6B /* RemoveTrustedDeviceStatus.swift in Sources */, + CDD1CFBD2E987E84641ADB5CFB12537F /* Request.swift in Sources */, + 3DAC481CC10E924AC261A836A12A8653 /* RequestPINReset.swift in Sources */, + 2A710C34CDB136C83ABF36B1611FEA18 /* RequestToken.swift in Sources */, + 70473DC5694726A2B052401944614EB0 /* ResetCodeTextField.swift in Sources */, + D77F19AD19B690B9D087E293A6A85589 /* ResetConfirmPINViewController.swift in Sources */, + 565A931161EDB667BD589856FC116FCD /* ResetNewPINViewController.swift in Sources */, + BC6664B7B471FB79376596BFACD7A78D /* ResetPIN.swift in Sources */, + DC57C3837942ED3D556606F07CBC853D /* ResetPINViewController.swift in Sources */, + AAF6588DF8A483EF01B2033C35E42247 /* RespondEvent.swift in Sources */, + 0F7338915ABDDC30ABBDE5CE865AAA10 /* Response.swift in Sources */, + BD970BDE9C622D05F3E29872C0432FC8 /* String.swift in Sources */, + 8BDA3413D868A5D6A682424B57E5FA2F /* Token.swift in Sources */, + 16CA6D9C330CE41107AD16D787301E7D /* TransactionPINViewController.swift in Sources */, + 325426197B3D8E95E66241C413F7EACF /* TrustedDevice.swift in Sources */, + 76F02C88066222A24191DA4D82726A8D /* TrustedViewController.swift in Sources */, + A6933CA0FF54B17B1206593F20B5A3BA /* UIColor.swift in Sources */, + 4C88F2F3268166E1526C248FD03A5F60 /* UIExtensions.swift in Sources */, + 2D87EE1141C4B31EDD4AF25EAE7E3639 /* UIImage.swift in Sources */, + 2C67EE118173BB0B8A5E4DE60C9850AE /* UIImageView.swift in Sources */, + 3A125BD6966ADA056E5B2F9671990605 /* UINavigationController.swift in Sources */, + F396704DEE7A820C33BB5AB97C6A331A /* UIView.swift in Sources */, + F03FB23892B610A4BE9984956DE290FC /* UIViewController.swift in Sources */, + A6577C478185790B1201D1947222CCF6 /* UIWindow.swift in Sources */, + FF13A3E8516C52E1C1EC6A17E40ED047 /* UpdateBiometricStatus.swift in Sources */, + D84854BAE2B12084AF4BAA0A257238DA /* UpdateConfirmNewPINViewController.swift in Sources */, + 19A46C5CE35F88ED2F171F7EF87BB31C /* UpdateCreateNewPINViewController.swift in Sources */, + 5056F6AFF35264DA88022C5560A58893 /* UpdatePINViewController.swift in Sources */, + C69E8CA955997393FEF6FC59DF948330 /* UpdateUserPIN.swift in Sources */, + 6DD66D321C0CA32A69F7EBFE2D847A1F /* User.swift in Sources */, + 04FE0F5C94665DEE9B830BE3128F9D06 /* UserInfo.swift in Sources */, + 306249627BA2E9134E9F03D9473D7CB1 /* UserKey.swift in Sources */, + BF8EE197368FFB2C74F3C8D75B54F67F /* Utils.swift in Sources */, + 046BFCFDA70560A5CCE096732029CFF5 /* VerifyPINResetCode.swift in Sources */, + 6839E42A52B5598706B6BA35231D568A /* ViewControllerClassNames.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2132,6 +2146,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 73EA4A23B4DA683FA67D04A43BF26811 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 78EAC6D89B458F4CA4C6801130CB8CE5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2140,12 +2161,12 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 954F18AD8118AD1392F0D0DDCCCBEED6 /* Sources */ = { + AB50CE0247E8C020E042EDB04645C31D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 77CCCA27CEBA955543B235FD3821941A /* TTGSnackbar-dummy.m in Sources */, - 75C8E84018A409E66F969E382AD8A5DB /* TTGSnackbar.swift in Sources */, + 1ED2DE08D479E52BD83CD2ACBE6E6404 /* TTGSnackbar-dummy.m in Sources */, + 1ABBE049575A33553C9BB183AA32BA64 /* TTGSnackbar.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2219,21 +2240,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - FB34E831B8BCC8FD241FABC2028A896A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 26DB2FD678E992253DF628FD525B7BFD /* PBXTargetDependency */ = { + 060381E17850DAE25544709474283D4A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = TTGSnackbar; - target = 1CB35B409B95E585BFA946F3A465F9A1 /* TTGSnackbar */; - targetProxy = 192A827FBFE22A073B40A368E2818F68 /* PBXContainerItemProxy */; + name = OneSignal; + target = 210EB05CEC7AD9C148F90F752DE74C48 /* OneSignal */; + targetProxy = 3340684C56E0251DA26DF9202EC46111 /* PBXContainerItemProxy */; }; 35C89F4986E721ABA5B90728A17E87D2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -2265,17 +2279,17 @@ target = F9A7B919413D485DB83D72F83A288BF1 /* TweeTextField */; targetProxy = 497A29AE4590C4D58982A0A697397589 /* PBXContainerItemProxy */; }; - C3856005848D88F562BABD975BD794CB /* PBXTargetDependency */ = { + C7F1C1705373F656430B495BC22D8E95 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = OneSignal; - target = 210EB05CEC7AD9C148F90F752DE74C48 /* OneSignal */; - targetProxy = BE2B06288908AD9238F9E4E0A87B0B58 /* PBXContainerItemProxy */; + name = "Cotter-Assets"; + target = 72725BFB38D9E265FF037056E19AF71B /* Cotter-Assets */; + targetProxy = FDBEBF321518655337C8127A81B3A089 /* PBXContainerItemProxy */; }; - CA766D44AD2009F11E62307F1DD330B1 /* PBXTargetDependency */ = { + D04D666FBD695E2FB125C5035832FFD5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Cotter-Cotter"; - target = 73D2AD3718E111E4FD58AD933268EE14 /* Cotter-Cotter */; - targetProxy = 6F60DF8625E4060DDF7CB8BFDD6E5AF6 /* PBXContainerItemProxy */; + name = TTGSnackbar; + target = 1CB35B409B95E585BFA946F3A465F9A1 /* TTGSnackbar */; + targetProxy = CF44BA79A944D23DA6B22FC991FB1FB4 /* PBXContainerItemProxy */; }; E89C9EA096A442DCC601E60B58720469 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -2328,7 +2342,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - "EXCLUDED_ARCHS[sdk=*]" = arm64; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -2388,26 +2402,22 @@ }; name = Release; }; - 20FF22B3E99D916CFB9C3103BAD7A198 /* Debug */ = { + 2B74099C0D444D2B0DB537C4AA8C09E8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C408697FCE35BDF0D36905B0F2518CB7 /* Cotter.debug.xcconfig */; + baseConfigurationReference = 4EB5F63602C2C258D91E9F4960B56AB6 /* Sourcery.debug.xcconfig */; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Cotter"; - IBSC_MODULE = Cotter; - INFOPLIST_FILE = "Target Support Files/Cotter/ResourceBundle-Cotter-Cotter-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - PRODUCT_NAME = Cotter; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; SDKROOT = iphoneos; - SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; }; name = Debug; }; - 25B202622360CF7268D4E3002608DC51 /* Release */ = { + 34781C258EC76BB3952C73D7B5E3CB30 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 698AA8272C4814F312019F98CF367858 /* TTGSnackbar.release.xcconfig */; + baseConfigurationReference = 222D8F30B82B9E54ADA10C6140EAC98E /* TTGSnackbar.debug.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2431,15 +2441,14 @@ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 2B74099C0D444D2B0DB537C4AA8C09E8 /* Debug */ = { + 5747F095FF953B41E2ECF783A30515C5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4EB5F63602C2C258D91E9F4960B56AB6 /* Sourcery.debug.xcconfig */; + baseConfigurationReference = E1AC1AC524A0FAB58D2A1781781829AA /* OneSignal.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; @@ -2450,10 +2459,11 @@ }; name = Debug; }; - 3F2A3E9A15235735630ED76ABA60EE49 /* Debug */ = { + 7AF103C7BB082F4894711F33D79DDFF8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 222D8F30B82B9E54ADA10C6140EAC98E /* TTGSnackbar.debug.xcconfig */; + baseConfigurationReference = FF35FBC7409C7C14CEE1E164CEB46F74 /* TweeTextField.debug.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2463,14 +2473,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/TTGSnackbar/TTGSnackbar-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/TTGSnackbar/TTGSnackbar-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/TweeTextField/TweeTextField-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/TweeTextField/TweeTextField-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/TTGSnackbar/TTGSnackbar.modulemap"; - PRODUCT_MODULE_NAME = TTGSnackbar; - PRODUCT_NAME = TTGSnackbar; + MODULEMAP_FILE = "Target Support Files/TweeTextField/TweeTextField.modulemap"; + PRODUCT_MODULE_NAME = TweeTextField; + PRODUCT_NAME = TweeTextField; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -2481,9 +2491,9 @@ }; name = Debug; }; - 48511A267CD1A221B947178B9514CC9B /* Debug */ = { + 97EB7A1FD3954D61465ADB54BE7E5985 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C408697FCE35BDF0D36905B0F2518CB7 /* Cotter.debug.xcconfig */; + baseConfigurationReference = F08F715BC27686DEA15A316D4221B244 /* TweeTextField.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; @@ -2495,47 +2505,30 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Cotter/Cotter-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Cotter/Cotter-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/TweeTextField/TweeTextField-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/TweeTextField/TweeTextField-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Cotter/Cotter.modulemap"; - PRODUCT_MODULE_NAME = Cotter; - PRODUCT_NAME = Cotter; + MODULEMAP_FILE = "Target Support Files/TweeTextField/TweeTextField.modulemap"; + PRODUCT_MODULE_NAME = TweeTextField; + PRODUCT_NAME = TweeTextField; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; - }; - 4AF7730AE4FA59F79294F5BF57F3C337 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = ACCDE17559770F96CB6872D005E466D8 /* Cotter.release.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Cotter"; - DEVELOPMENT_TEAM = S82KLNTT2U; - IBSC_MODULE = Cotter; - INFOPLIST_FILE = "Target Support Files/Cotter/ResourceBundle-Cotter-Cotter-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - PRODUCT_NAME = Cotter; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; name = Release; }; - 7AF103C7BB082F4894711F33D79DDFF8 /* Debug */ = { + 98555B38FFF5B3899D00FD58F41ED84F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FF35FBC7409C7C14CEE1E164CEB46F74 /* TweeTextField.debug.xcconfig */; + baseConfigurationReference = 562032DD2CB9FE2615112BBB5AF66C38 /* Pods-CotterIOS_Example.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2546,27 +2539,28 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/TweeTextField/TweeTextField-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/TweeTextField/TweeTextField-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-CotterIOS_Example/Pods-CotterIOS_Example-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/TweeTextField/TweeTextField.modulemap"; - PRODUCT_MODULE_NAME = TweeTextField; - PRODUCT_NAME = TweeTextField; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-CotterIOS_Example/Pods-CotterIOS_Example.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 97EB7A1FD3954D61465ADB54BE7E5985 /* Release */ = { + 9998926DB3758FC000A8246A41A2E54C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F08F715BC27686DEA15A316D4221B244 /* TweeTextField.release.xcconfig */; + baseConfigurationReference = D7EA0186886AF13C4699840CDD2AE35F /* Cotter.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; @@ -2578,14 +2572,15 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/TweeTextField/TweeTextField-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/TweeTextField/TweeTextField-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Cotter/Cotter-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Cotter/Cotter-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/TweeTextField/TweeTextField.modulemap"; - PRODUCT_MODULE_NAME = TweeTextField; - PRODUCT_NAME = TweeTextField; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Cotter/Cotter.modulemap"; + PRODUCT_MODULE_NAME = Cotter; + PRODUCT_NAME = Cotter; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -2597,9 +2592,9 @@ }; name = Release; }; - 98555B38FFF5B3899D00FD58F41ED84F /* Debug */ = { + 9A90A87FA1BE0CE0F46A2782D8149E5D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 562032DD2CB9FE2615112BBB5AF66C38 /* Pods-CotterIOS_Example.debug.xcconfig */; + baseConfigurationReference = 3D529E0F239F5A06BC489C0545636314 /* Pods-CotterIOS_Example.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; @@ -2626,17 +2621,33 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; + name = Release; + }; + 9B1E85F0B87D30DCD9B32217FE5BB017 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9F18C353CBCC7F640144A9F1429A739D /* Cotter.debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Cotter"; + IBSC_MODULE = Cotter; + INFOPLIST_FILE = "Target Support Files/Cotter/ResourceBundle-Assets-Cotter-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + PRODUCT_NAME = Assets; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; name = Debug; }; - 9A90A87FA1BE0CE0F46A2782D8149E5D /* Release */ = { + A69B21709825D1E37E18D9FC9601AC1A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3D529E0F239F5A06BC489C0545636314 /* Pods-CotterIOS_Example.release.xcconfig */; + baseConfigurationReference = 698AA8272C4814F312019F98CF367858 /* TTGSnackbar.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2646,19 +2657,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-CotterIOS_Example/Pods-CotterIOS_Example-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/TTGSnackbar/TTGSnackbar-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/TTGSnackbar/TTGSnackbar-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-CotterIOS_Example/Pods-CotterIOS_Example.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/TTGSnackbar/TTGSnackbar.modulemap"; + PRODUCT_MODULE_NAME = TTGSnackbar; + PRODUCT_NAME = TTGSnackbar; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -2702,7 +2712,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - "EXCLUDED_ARCHS[sdk=*]" = arm64; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( @@ -2720,12 +2730,30 @@ MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 5.0; SYMROOT = "${SRCROOT}/../build"; }; name = Release; }; + B4F03882CFF72A696BAC093F1BBD2A1F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D7EA0186886AF13C4699840CDD2AE35F /* Cotter.release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Cotter"; + IBSC_MODULE = Cotter; + INFOPLIST_FILE = "Target Support Files/Cotter/ResourceBundle-Assets-Cotter-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + PRODUCT_NAME = Assets; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; BC2F9ACF6532E38BFD9609FF5AB4771F /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 8C7D17E7EDD15576794A81F95EFBAA28 /* Nimble.debug.xcconfig */; @@ -2756,40 +2784,6 @@ }; name = Debug; }; - CAE42CF3340FF141C4C3C0ADF62DE06F /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = ACCDE17559770F96CB6872D005E466D8 /* Cotter.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Cotter/Cotter-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Cotter/Cotter-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Cotter/Cotter.modulemap"; - PRODUCT_MODULE_NAME = Cotter; - PRODUCT_NAME = Cotter; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; D3C4904DA7E465E70A830CC22BB9C903 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = ADDC3528BBBF5B0D8EFC6EAE04F97DE9 /* Pods-CotterIOS_Tests.debug.xcconfig */; @@ -2838,7 +2832,40 @@ }; name = Release; }; - DBBDE5A1EE2896DD1EFD53CE86BB0F71 /* Release */ = { + D6184BDC4080E9611B0C148AD7AFD55D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9F18C353CBCC7F640144A9F1429A739D /* Cotter.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Cotter/Cotter-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Cotter/Cotter-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Cotter/Cotter.modulemap"; + PRODUCT_MODULE_NAME = Cotter; + PRODUCT_NAME = Cotter; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + D98FD9D3FC5613D3E28A040D6FE73C25 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 2713DBD26EAFE7982785E98847F5E14E /* OneSignal.release.xcconfig */; buildSettings = { @@ -2887,22 +2914,18 @@ }; name = Release; }; - FC234636E103CCD9CF519454B93BF9E2 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E1AC1AC524A0FAB58D2A1781781829AA /* OneSignal.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 14F4728C102D2724925F85BC64174134 /* Build configuration list for PBXNativeTarget "Cotter-Assets" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B1E85F0B87D30DCD9B32217FE5BB017 /* Debug */, + B4F03882CFF72A696BAC093F1BBD2A1F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 1B7B366EFFB8412C2F361EF3B384B2B3 /* Build configuration list for PBXNativeTarget "TweeTextField" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -2930,29 +2953,29 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + 443E15B43FD186C99A5C5225DEB0CAAC /* Build configuration list for PBXAggregateTarget "OneSignal" */ = { isa = XCConfigurationList; buildConfigurations = ( - 196DFA3E4A09A28224918543529A1885 /* Debug */, - B01D14FDC83DCF9D4BE53066BEA96D05 /* Release */, + 5747F095FF953B41E2ECF783A30515C5 /* Debug */, + D98FD9D3FC5613D3E28A040D6FE73C25 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 6104F6A2BF19981AE2C11B9AA7E25511 /* Build configuration list for PBXNativeTarget "TTGSnackbar" */ = { + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3F2A3E9A15235735630ED76ABA60EE49 /* Debug */, - 25B202622360CF7268D4E3002608DC51 /* Release */, + 196DFA3E4A09A28224918543529A1885 /* Debug */, + B01D14FDC83DCF9D4BE53066BEA96D05 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 87F91B97727723F85C3CA80BD211276F /* Build configuration list for PBXAggregateTarget "OneSignal" */ = { + 6FD78FC79D14C8FDF7526DB6EF16E6D0 /* Build configuration list for PBXNativeTarget "TTGSnackbar" */ = { isa = XCConfigurationList; buildConfigurations = ( - FC234636E103CCD9CF519454B93BF9E2 /* Debug */, - DBBDE5A1EE2896DD1EFD53CE86BB0F71 /* Release */, + 34781C258EC76BB3952C73D7B5E3CB30 /* Debug */, + A69B21709825D1E37E18D9FC9601AC1A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -2975,20 +2998,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9DA0F6F75D7CDE2A52C8AB280B102818 /* Build configuration list for PBXNativeTarget "Cotter-Cotter" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 20FF22B3E99D916CFB9C3103BAD7A198 /* Debug */, - 4AF7730AE4FA59F79294F5BF57F3C337 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - B2BD3B34F2E62E75C3902461586BBBB8 /* Build configuration list for PBXNativeTarget "Cotter" */ = { + A9386DB22435081AE659E575A3168DD4 /* Build configuration list for PBXNativeTarget "Cotter" */ = { isa = XCConfigurationList; buildConfigurations = ( - 48511A267CD1A221B947178B9514CC9B /* Debug */, - CAE42CF3340FF141C4C3C0ADF62DE06F /* Release */, + D6184BDC4080E9611B0C148AD7AFD55D /* Debug */, + 9998926DB3758FC000A8246A41A2E54C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Cotter-Assets.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Cotter-Assets.xcscheme new file mode 100644 index 0000000..fc0d64e --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Cotter-Assets.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Cotter.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Cotter.xcscheme new file mode 100644 index 0000000..7021b62 --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Cotter.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Nimble.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Nimble.xcscheme new file mode 100644 index 0000000..03b85b2 --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Nimble.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/OneSignal.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/OneSignal.xcscheme new file mode 100644 index 0000000..cc0dd9b --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/OneSignal.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-CotterIOS_Example.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-CotterIOS_Example.xcscheme new file mode 100644 index 0000000..1f30786 --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-CotterIOS_Example.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-CotterIOS_Tests.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-CotterIOS_Tests.xcscheme new file mode 100644 index 0000000..bb97322 --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-CotterIOS_Tests.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Sourcery.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Sourcery.xcscheme new file mode 100644 index 0000000..2d38522 --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Sourcery.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/TTGSnackbar.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/TTGSnackbar.xcscheme new file mode 100644 index 0000000..f0523d1 --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/TTGSnackbar.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/TweeTextField.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/TweeTextField.xcscheme new file mode 100644 index 0000000..824eec7 --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/TweeTextField.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Pods/Target Support Files/Cotter/Cotter-Info.plist b/Example/Pods/Target Support Files/Cotter/Cotter-Info.plist index 7ed85ec..90a1fa6 100644 --- a/Example/Pods/Target Support Files/Cotter/Cotter-Info.plist +++ b/Example/Pods/Target Support Files/Cotter/Cotter-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.5.12 + 1.5.20 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Pods/Target Support Files/Cotter/Cotter-Unit-Tests-Info.plist b/Example/Pods/Target Support Files/Cotter/Cotter-Unit-Tests-Info.plist new file mode 100644 index 0000000..45f6ca7 --- /dev/null +++ b/Example/Pods/Target Support Files/Cotter/Cotter-Unit-Tests-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Cotter/Cotter-Unit-Tests-frameworks.sh b/Example/Pods/Target Support Files/Cotter/Cotter-Unit-Tests-frameworks.sh new file mode 100755 index 0000000..f81c042 --- /dev/null +++ b/Example/Pods/Target Support Files/Cotter/Cotter-Unit-Tests-frameworks.sh @@ -0,0 +1,209 @@ +#!/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 ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# 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 .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + warn_missing_arch=${2:-true} + if [ -r "$source" ]; then + # Copy the dSYM into the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .dSYM "$source")" + binary_name="$(ls "$source/Contents/Resources/DWARF")" + binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" "$warn_missing_arch" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" + fi + fi +} + +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + warn_missing_arch=${2:-true} + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + if [[ "$warn_missing_arch" == "true" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + fi + STRIP_BINARY_RETVAL=0 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=1 +} + +install_artifact() { + artifact="$1" + base="$(basename "$artifact")" + case $base in + *.framework) + install_framework "$artifact" + ;; + *.dSYM) + # Suppress arch warnings since XCFrameworks will include many dSYM files + install_dsym "$artifact" "false" + ;; + *.bcsymbolmap) + install_bcsymbolmap "$artifact" + ;; + *) + echo "error: Unrecognized artifact "$artifact"" + ;; + esac +} + +copy_artifacts() { + file_list="$1" + while read artifact; do + install_artifact "$artifact" + done <$file_list +} + +ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt" +if [ -r "${ARTIFACT_LIST_FILE}" ]; then + copy_artifacts "${ARTIFACT_LIST_FILE}" +fi + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/TTGSnackbar/TTGSnackbar.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Nimble/Nimble.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/TTGSnackbar/TTGSnackbar.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Nimble/Nimble.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Example/Pods/Target Support Files/Cotter/Cotter-Unit-Tests-prefix.pch b/Example/Pods/Target Support Files/Cotter/Cotter-Unit-Tests-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Example/Pods/Target Support Files/Cotter/Cotter-Unit-Tests-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/Example/Pods/Target Support Files/Cotter/Cotter-Unit-Tests-resources.sh b/Example/Pods/Target Support Files/Cotter/Cotter-Unit-Tests-resources.sh new file mode 100755 index 0000000..7a603bb --- /dev/null +++ b/Example/Pods/Target Support Files/Cotter/Cotter-Unit-Tests-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_CONFIGURATION_BUILD_DIR}/Cotter/Cotter.bundle" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/Cotter/Cotter.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 -L "$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/Example/Pods/Target Support Files/Cotter/Cotter.unit-tests.debug.xcconfig b/Example/Pods/Target Support Files/Cotter/Cotter.unit-tests.debug.xcconfig new file mode 100644 index 0000000..bd52fbe --- /dev/null +++ b/Example/Pods/Target Support Files/Cotter/Cotter.unit-tests.debug.xcconfig @@ -0,0 +1,13 @@ +EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64 +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/Cotter" "${PODS_CONFIGURATION_BUILD_DIR}/Nimble" "${PODS_CONFIGURATION_BUILD_DIR}/TTGSnackbar" "${PODS_ROOT}/OneSignal/iOS_SDK/OneSignalSDK/Framework" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -ObjC -framework "CoreGraphics" -framework "Cotter" -framework "Nimble" -framework "OneSignal" -framework "SystemConfiguration" -framework "TTGSnackbar" -framework "UIKit" -framework "UserNotifications" -framework "WebKit" -weak_framework "XCTest" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Cotter/Cotter.unit-tests.release.xcconfig b/Example/Pods/Target Support Files/Cotter/Cotter.unit-tests.release.xcconfig new file mode 100644 index 0000000..bd52fbe --- /dev/null +++ b/Example/Pods/Target Support Files/Cotter/Cotter.unit-tests.release.xcconfig @@ -0,0 +1,13 @@ +EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64 +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/Cotter" "${PODS_CONFIGURATION_BUILD_DIR}/Nimble" "${PODS_CONFIGURATION_BUILD_DIR}/TTGSnackbar" "${PODS_ROOT}/OneSignal/iOS_SDK/OneSignalSDK/Framework" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -ObjC -framework "CoreGraphics" -framework "Cotter" -framework "Nimble" -framework "OneSignal" -framework "SystemConfiguration" -framework "TTGSnackbar" -framework "UIKit" -framework "UserNotifications" -framework "WebKit" -weak_framework "XCTest" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Cotter/ResourceBundle-Assets-Cotter-Info.plist b/Example/Pods/Target Support Files/Cotter/ResourceBundle-Assets-Cotter-Info.plist new file mode 100644 index 0000000..e77b07a --- /dev/null +++ b/Example/Pods/Target Support Files/Cotter/ResourceBundle-Assets-Cotter-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.5.20 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Cotter/ResourceBundle-Cotter-Cotter-Info.plist b/Example/Pods/Target Support Files/Cotter/ResourceBundle-Cotter-Cotter-Info.plist index fb53fbe..e77b07a 100644 --- a/Example/Pods/Target Support Files/Cotter/ResourceBundle-Cotter-Cotter-Info.plist +++ b/Example/Pods/Target Support Files/Cotter/ResourceBundle-Cotter-Cotter-Info.plist @@ -13,7 +13,7 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 1.5.12 + 1.5.20 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Pods/Target Support Files/Pods-CotterIOS_Example/Pods-CotterIOS_Example-resources.sh b/Example/Pods/Target Support Files/Pods-CotterIOS_Example/Pods-CotterIOS_Example-resources.sh index 7a603bb..76d39a3 100755 --- a/Example/Pods/Target Support Files/Pods-CotterIOS_Example/Pods-CotterIOS_Example-resources.sh +++ b/Example/Pods/Target Support Files/Pods-CotterIOS_Example/Pods-CotterIOS_Example-resources.sh @@ -97,10 +97,10 @@ EOM esac } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_resource "${PODS_CONFIGURATION_BUILD_DIR}/Cotter/Cotter.bundle" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/Cotter/Assets.bundle" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_resource "${PODS_CONFIGURATION_BUILD_DIR}/Cotter/Cotter.bundle" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/Cotter/Assets.bundle" fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" diff --git a/Example/Tests/Cases/Services/APIServiceTests.swift b/Example/Tests/Cases/Services/APIServiceTests.swift index a0be2d6..7d59207 100644 --- a/Example/Tests/Cases/Services/APIServiceTests.swift +++ b/Example/Tests/Cases/Services/APIServiceTests.swift @@ -56,26 +56,26 @@ class APIServiceTests: XCTestCase { expect(err).to(beNil()) } - func testRegisterUser() { - var resp: Codable? - var err: Error? = nil - - mockAPIService.registerUser(userID: mock.userID) { response in - switch response { - case .success(let response): - resp = response - case .failure(let error): - err = error - } - } - - let req = RegisterUser(userID: mock.userID) - - expect(self.mockAPIService.registerUserCalled).to(beTrue()) - expect(self.mockAPIService.registerUserInputRequest).to(equal(req)) - expect(resp).to(beAKindOf(CotterUser.self)) - expect(err).to(beNil()) - } + // func testRegisterUser() { + // var resp: Codable? + // var err: Error? = nil + // + // mockAPIService.registerUser(userID: mock.userID, identifier: mock.identifier) { response in + // switch response { + // case .success(let response): + // resp = response + // case .failure(let error): + // err = error + // } + // } + // + // let req = RegisterUser(userID: mock.userID) + // + // expect(self.mockAPIService.registerUserCalled).to(beTrue()) + // expect(self.mockAPIService.registerUserInputRequest).to(equal(req)) + // expect(resp).to(beAKindOf(CotterUser.self)) + // expect(err).to(beNil()) + // } func testEnrollUserPin() { var resp: Codable? diff --git a/Example/Tests/Cases/View Controllers/PINConfirmViewControllerTests.swift b/Example/Tests/Cases/View Controllers/PINConfirmViewControllerTests.swift index 6a09dcc..ab12cb6 100644 --- a/Example/Tests/Cases/View Controllers/PINConfirmViewControllerTests.swift +++ b/Example/Tests/Cases/View Controllers/PINConfirmViewControllerTests.swift @@ -47,23 +47,7 @@ class PINConfirmViewControllerTests: XCTestCase { dangerColor: dangerColor ) } - - func testViewDidLoadCallsPresenter() { - let sut = makeSUT() - - sut.viewDidLoad() - - expect(self.presenter.onViewLoadCalled).to(beTrue()) - } - func testOnClickPinVisCallsPresenter() { - let sut = makeSUT() - - sut.onClickPinVis(.init()) - - expect(self.presenter.onClickPinVisCalled).to(beTrue()) - } - func testRender() { let props = setupProps() @@ -73,22 +57,9 @@ class PINConfirmViewControllerTests: XCTestCase { // expect(sut.navigationItem.title).to(match(navTitle)) expect(sut.titleLabel.text).to(match(title)) - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(showPinText)) - expect(sut.pinVisibilityButton.titleColor(for: .normal)).to(equal(primaryColor)) expect(sut.errorLabel.textColor).to(equal(dangerColor)) } - func testOnClickPinVis() { - let props = setupProps() - - let sut = makeSUT(actualPresenter: true) - sut.render(props) // Sets pinVisibilityButton title to be showPinText initially - - sut.onClickPinVis(sut.pinVisibilityButton) - - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(hidePinText)) - } - func testToggleErrorMsg() { let sut = makeSUT(actualPresenter: true) // errorLabel is hidden initially let msg = "Test Error" @@ -108,9 +79,4 @@ class PINConfirmViewPresenterMock: PINConfirmViewPresenter { onViewLoadCalled = true } - private(set) var onClickPinVisCalled = false - - func onClickPinVis(button: UIButton) { - onClickPinVisCalled = true - } } diff --git a/Example/Tests/Cases/View Controllers/PINFinalViewControllerTests.swift b/Example/Tests/Cases/View Controllers/PINFinalViewControllerTests.swift index 4b98356..ab4a32b 100644 --- a/Example/Tests/Cases/View Controllers/PINFinalViewControllerTests.swift +++ b/Example/Tests/Cases/View Controllers/PINFinalViewControllerTests.swift @@ -17,6 +17,9 @@ class PINFinalViewControllerTests: XCTestCase { let successTitle = CotterStrings.instance.getText(for: PINFinalViewControllerKey.title) let successSubtitle = CotterStrings.instance.getText(for: PINFinalViewControllerKey.subtitle) let successButtonTitle = CotterStrings.instance.getText(for: PINFinalViewControllerKey.buttonText) + let titleUpdate = CotterStrings.instance.getText(for: PINFinalViewControllerKey.titleUpdate) + let subtitleUpdate = CotterStrings.instance.getText(for: PINFinalViewControllerKey.subtitleUpdate) + let buttonTitleUpdate = CotterStrings.instance.getText(for: PINFinalViewControllerKey.buttonTextUpdate) // MARK: - VC Image Definitions let successImage = CotterImages.instance.getImage(for: VCImageKey.pinSuccessImg) @@ -43,6 +46,9 @@ class PINFinalViewControllerTests: XCTestCase { title: successTitle, subtitle: successSubtitle, buttonTitle: successButtonTitle, + titleUpdate: titleUpdate, + subtitleUpdate: subtitleUpdate, + buttonTitleUpdate: buttonTitleUpdate, successImage: successImage, primaryColor: primaryColor, accentColor: accentColor, diff --git a/Example/Tests/Cases/View Controllers/PINViewControllerTests.swift b/Example/Tests/Cases/View Controllers/PINViewControllerTests.swift index 7558bba..57a5968 100644 --- a/Example/Tests/Cases/View Controllers/PINViewControllerTests.swift +++ b/Example/Tests/Cases/View Controllers/PINViewControllerTests.swift @@ -57,14 +57,6 @@ class PINViewControllerTests: XCTestCase { expect(self.presenter.onViewLoadCalled).to(beTrue()) } - func testOnClickPinVisCallsPresenter() { - let sut = makeSUT() - - sut.onClickPinVis(.init()) - - expect(self.presenter.onClickPinVisCalled).to(beTrue()) - } - func testRender() { let props = setupProps() @@ -74,21 +66,9 @@ class PINViewControllerTests: XCTestCase { // expect(sut.navigationItem.title).to(match(navTitle)) expect(sut.titleLabel.text).to(match(title)) - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(showPinText)) - expect(sut.pinVisibilityButton.titleColor(for: .normal)).to(equal(primaryColor)) expect(sut.errorLabel.textColor).to(equal(dangerColor)) } - func testOnClickPinVis() { - let props = setupProps() - - let sut = makeSUT(actualPresenter: true) - sut.render(props) // Sets pinVisibilityButton title to be showPinText initially - - sut.onClickPinVis(sut.pinVisibilityButton) - - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(hidePinText)) - } func testToggleErrorMsg() { let sut = makeSUT(actualPresenter: true) // errorLabel is hidden initially @@ -108,11 +88,5 @@ class PINViewPresenterMock: PINViewPresenter { func onViewLoaded() { onViewLoadCalled = true } - - private(set) var onClickPinVisCalled = false - - func onClickPinVis(button: UIButton) { - onClickPinVisCalled = true - } } diff --git a/Example/Tests/Cases/View Controllers/ResetConfirmPINViewControllerTests.swift b/Example/Tests/Cases/View Controllers/ResetConfirmPINViewControllerTests.swift index 41f7e56..711122b 100644 --- a/Example/Tests/Cases/View Controllers/ResetConfirmPINViewControllerTests.swift +++ b/Example/Tests/Cases/View Controllers/ResetConfirmPINViewControllerTests.swift @@ -55,14 +55,6 @@ class ResetConfirmPINViewControllerTests: XCTestCase { expect(self.presenter.onViewLoadCalled).to(beTrue()) } - - func testOnClickPinVisCallsPresenter() { - let sut = makeSUT() - - sut.onClickPinVis(.init()) - - expect(self.presenter.onClickPinVisCalled).to(beTrue()) - } func testRender() { let props = setupProps() @@ -73,22 +65,9 @@ class ResetConfirmPINViewControllerTests: XCTestCase { // expect(sut.navigationItem.title).to(match(navTitle)) expect(sut.titleLabel.text).to(match(titleText)) - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(showPinText)) - expect(sut.pinVisibilityButton.titleColor(for: .normal)).to(equal(primaryColor)) expect(sut.errorLabel.textColor).to(equal(dangerColor)) } - func testOnClickPinVis() { - let props = setupProps() - - let sut = makeSUT(actualPresenter: true) - sut.render(props) // Sets pinVisibilityButton title to be showPinText initially - - sut.onClickPinVis(sut.pinVisibilityButton) - - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(hidePinText)) - } - func testToggleErrorMsg() { let sut = makeSUT(actualPresenter: true) // errorLabel is hidden initially let msg = "Test Error" @@ -107,11 +86,4 @@ class ResetConfirmPINViewPresenterMock: ResetConfirmPINViewPresenter { func onViewLoaded() { onViewLoadCalled = true } - - private(set) var onClickPinVisCalled = false - - func onClickPinVis(button: UIButton) { - onClickPinVisCalled = true - } - } diff --git a/Example/Tests/Cases/View Controllers/ResetNewPINViewControllerTests.swift b/Example/Tests/Cases/View Controllers/ResetNewPINViewControllerTests.swift index a2577f2..01b5bb1 100644 --- a/Example/Tests/Cases/View Controllers/ResetNewPINViewControllerTests.swift +++ b/Example/Tests/Cases/View Controllers/ResetNewPINViewControllerTests.swift @@ -55,15 +55,7 @@ class ResetNewPINViewControllerTests: XCTestCase { expect(self.presenter.onViewLoadCalled).to(beTrue()) } - - func testOnClickPinVisCallsPresenter() { - let sut = makeSUT() - - sut.onClickPinVis(.init()) - - expect(self.presenter.onClickPinVisCalled).to(beTrue()) - } - + func testRender() { let props = setupProps() @@ -73,22 +65,9 @@ class ResetNewPINViewControllerTests: XCTestCase { // expect(sut.navigationItem.title).to(match(navTitle)) expect(sut.titleLabel.text).to(match(titleText)) - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(showPinText)) - expect(sut.pinVisibilityButton.titleColor(for: .normal)).to(equal(primaryColor)) expect(sut.errorLabel.textColor).to(equal(dangerColor)) } - func testOnClickPinVis() { - let props = setupProps() - - let sut = makeSUT(actualPresenter: true) - sut.render(props) // Sets pinVisibilityButton title to be showPinText initially - - sut.onClickPinVis(sut.pinVisibilityButton) - - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(hidePinText)) - } - func testToggleErrorMsg() { let sut = makeSUT(actualPresenter: true) // errorLabel is hidden initially let msg = "Test Error" diff --git a/Example/Tests/Cases/View Controllers/ResetPINViewControllerTests.swift b/Example/Tests/Cases/View Controllers/ResetPINViewControllerTests.swift index b874667..6d2e7bb 100644 --- a/Example/Tests/Cases/View Controllers/ResetPINViewControllerTests.swift +++ b/Example/Tests/Cases/View Controllers/ResetPINViewControllerTests.swift @@ -19,6 +19,9 @@ class ResetPINViewControllerTests: XCTestCase { let resetOpeningSub = CotterStrings.instance.getText(for: ResetPINViewControllerKey.subtitle) let resetFailSub = CotterStrings.instance.getText(for: ResetPINViewControllerKey.resetFailSub) let resendEmailText = CotterStrings.instance.getText(for: ResetPINViewControllerKey.resendEmail) + let resendEmailSnackbarText = CotterStrings.instance.getText(for: ResetPINViewControllerKey.resendEmailSnackbarText) + + let resendEmailSnackbarIcon = CotterImages.instance.getImage(for: VCImageKey.resendSnackbarIcon) // MARK: - VC Color Definitions let primaryColor = Config.instance.colors.primary @@ -44,19 +47,13 @@ class ResetPINViewControllerTests: XCTestCase { resetOpeningSub: resetOpeningSub, resetFailSub: resetFailSub, resendEmail: resendEmailText, + resendEmailSnackbarText: resendEmailSnackbarText, primaryColor: primaryColor, accentColor: accentColor, - dangerColor: dangerColor + dangerColor: dangerColor, + resendEmailSnackbarIcon: resendEmailSnackbarIcon ) } - - func testViewDidAppearCallsPresenter() { - let sut = makeSUT() - - sut.viewDidAppear(true) - - expect(self.presenter.onViewAppearCalled).to(beTrue()) - } func testViewDidLoadCallsPresenter() { let sut = makeSUT() @@ -91,21 +88,21 @@ class ResetPINViewControllerTests: XCTestCase { expect(sut.resendEmailButton.title(for: .normal)).to(match(resendEmailText)) expect(sut.resendEmailButton.titleColor(for: .normal)).to(equal(primaryColor)) } - - func testRenderWithNoUserInfo() { - Config.instance.userInfo = nil - let props = setupProps() - - let sut = makeSUT() - - sut.render(props) - - // expect(sut.navigationItem.title).to(match(navTitle)) - expect(sut.resetPinTitle.text).to(match(resetTitle)) - expect(sut.resetPinError.textColor).to(equal(dangerColor)) - expect(sut.resetPinSubtitle.text).to(match(resetFailSub)) - expect(sut.resendEmailButton.isEnabled).to(beFalse()) - } + + // func testRenderWithNoUserInfo() { + // Config.instance.userInfo = nil + // let props = setupProps() + // + // let sut = makeSUT() + // + // sut.render(props) + // + // // expect(sut.navigationItem.title).to(match(navTitle)) + // expect(sut.resetPinTitle.text).to(match(resetTitle)) + // expect(sut.resetPinError.textColor).to(equal(dangerColor)) + // expect(sut.resetPinSubtitle.text).to(match(resetFailSub)) + // expect(sut.resendEmailButton.isEnabled).to(beFalse()) + // } func testToggleErrorMsg() { let sut = makeSUT(actualPresenter: true) // errorLabel is hidden initially diff --git a/Example/Tests/Cases/View Controllers/TransactionPINViewControllerTests.swift b/Example/Tests/Cases/View Controllers/TransactionPINViewControllerTests.swift index 26bad70..72b74b9 100644 --- a/Example/Tests/Cases/View Controllers/TransactionPINViewControllerTests.swift +++ b/Example/Tests/Cases/View Controllers/TransactionPINViewControllerTests.swift @@ -66,14 +66,6 @@ class TransactionPINViewControllerTests: XCTestCase { expect(self.presenter.onViewLoadCalled).to(beTrue()) } - func testOnClickPinVisCallsPresenter() { - let sut = makeSUT() - - sut.onClickPinVis(.init()) - - expect(self.presenter.onClickPinVisCalled).to(beTrue()) - } - func testRender() { let props = setupProps() @@ -84,21 +76,8 @@ class TransactionPINViewControllerTests: XCTestCase { // expect(sut.navigationItem.title).to(match(navTitle)) expect(sut.titleLabel.text).to(match(titleText)) expect(sut.errorLabel.textColor).to(equal(dangerColor)) - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(showPinText)) - expect(sut.pinVisibilityButton.titleColor(for: .normal)).to(equal(primaryColor)) expect(sut.forgetPinButton.title(for: .normal)).to(match(forgetPinText)) - expect(sut.forgetPinButton.titleColor(for: .normal)).to(equal(accentColor)) - } - - func testOnClickPinVis() { - let props = setupProps() - - let sut = makeSUT(actualPresenter: true) - sut.render(props) // Sets pinVisibilityButton title to be showPinText initially - - sut.onClickPinVis(sut.pinVisibilityButton) - - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(hidePinText)) + expect(sut.forgetPinButton.titleColor(for: .normal)).to(equal(primaryColor)) } func testToggleErrorMsg() { @@ -113,7 +92,6 @@ class TransactionPINViewControllerTests: XCTestCase { } class TransactionPINViewPresenterMock: TransactionPINViewPresenter { - private(set) var onViewAppearCalled = false func onViewAppeared() { @@ -125,11 +103,4 @@ class TransactionPINViewPresenterMock: TransactionPINViewPresenter { func onViewLoaded() { onViewLoadCalled = true } - - private(set) var onClickPinVisCalled = false - - func onClickPinVis(button: UIButton) { - onClickPinVisCalled = true - } - } diff --git a/Example/Tests/Cases/View Controllers/UpdateConfirmNewPINViewControllerTests.swift b/Example/Tests/Cases/View Controllers/UpdateConfirmNewPINViewControllerTests.swift index 2f96f51..8093850 100644 --- a/Example/Tests/Cases/View Controllers/UpdateConfirmNewPINViewControllerTests.swift +++ b/Example/Tests/Cases/View Controllers/UpdateConfirmNewPINViewControllerTests.swift @@ -56,14 +56,6 @@ class UpdateConfirmNewPINViewControllerTests: XCTestCase { expect(self.presenter.onViewLoadCalled).to(beTrue()) } - func testOnClickPinVisCallsPresenter() { - let sut = makeSUT() - - sut.onClickPinVis(.init()) - - expect(self.presenter.onClickPinVisCalled).to(beTrue()) - } - func testRender() { let props = setupProps() @@ -73,22 +65,9 @@ class UpdateConfirmNewPINViewControllerTests: XCTestCase { // expect(sut.navigationItem.title).to(match(navTitle)) expect(sut.titleLabel.text).to(match(titleText)) - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(showPinText)) - expect(sut.pinVisibilityButton.titleColor(for: .normal)).to(equal(primaryColor)) expect(sut.errorLabel.textColor).to(equal(dangerColor)) } - func testOnClickPinVis() { - let props = setupProps() - - let sut = makeSUT(actualPresenter: true) - sut.render(props) // Sets pinVisibilityButton title to be showPinText initially - - sut.onClickPinVis(sut.pinVisibilityButton) - - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(hidePinText)) - } - func testToggleErrorMsg() { let sut = makeSUT(actualPresenter: true) // errorLabel is hidden initially let msg = "Test Error" @@ -108,12 +87,4 @@ class UpdateConfirmNewPINViewPresenterMock: UpdateConfirmNewPINViewPresenter { func onViewLoaded() { onViewLoadCalled = true } - - private(set) var onClickPinVisCalled = false - - func onClickPinVis(button: UIButton) { - onClickPinVisCalled = true - } - - } diff --git a/Example/Tests/Cases/View Controllers/UpdateCreateNewPINViewControllerTests.swift b/Example/Tests/Cases/View Controllers/UpdateCreateNewPINViewControllerTests.swift index f57fc46..4a49401 100644 --- a/Example/Tests/Cases/View Controllers/UpdateCreateNewPINViewControllerTests.swift +++ b/Example/Tests/Cases/View Controllers/UpdateCreateNewPINViewControllerTests.swift @@ -56,14 +56,6 @@ class UpdateCreateNewPINViewControllerTests: XCTestCase { expect(self.presenter.onViewLoadCalled).to(beTrue()) } - func testOnClickPinVisCallsPresenter() { - let sut = makeSUT() - - sut.onClickPinVis(.init()) - - expect(self.presenter.onClickPinVisCalled).to(beTrue()) - } - func testRender() { let props = setupProps() @@ -73,21 +65,8 @@ class UpdateCreateNewPINViewControllerTests: XCTestCase { // expect(sut.navigationItem.title).to(match(navTitle)) expect(sut.titleLabel.text).to(match(titleText)) - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(showPinText)) - expect(sut.pinVisibilityButton.titleColor(for: .normal)).to(equal(primaryColor)) expect(sut.errorLabel.textColor).to(equal(dangerColor)) } - - func testOnClickPinVis() { - let props = setupProps() - - let sut = makeSUT(actualPresenter: true) - sut.render(props) // Sets pinVisibilityButton title to be showPinText initially - - sut.onClickPinVis(sut.pinVisibilityButton) - - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(hidePinText)) - } func testToggleErrorMsg() { let sut = makeSUT(actualPresenter: true) // errorLabel is hidden initially @@ -108,11 +87,4 @@ class UpdateCreateNewPINViewPresenterMock: UpdateCreateNewPINViewPresenter { func onViewLoaded() { onViewLoadCalled = true } - - private(set) var onClickPinVisCalled = false - - func onClickPinVis(button: UIButton) { - onClickPinVisCalled = true - } - } diff --git a/Example/Tests/Cases/View Controllers/UpdatePINViewControllerTests.swift b/Example/Tests/Cases/View Controllers/UpdatePINViewControllerTests.swift index dfdf27a..31ec7cc 100644 --- a/Example/Tests/Cases/View Controllers/UpdatePINViewControllerTests.swift +++ b/Example/Tests/Cases/View Controllers/UpdatePINViewControllerTests.swift @@ -56,14 +56,6 @@ class UpdatePINViewControllerTests: XCTestCase { expect(self.presenter.onViewLoadCalled).to(beTrue()) } - func testOnClickPinVisCallsPresenter() { - let sut = makeSUT() - - sut.onClickPinVis(.init()) - - expect(self.presenter.onClickPinVisCalled).to(beTrue()) - } - func testRender() { let props = setupProps() @@ -73,21 +65,8 @@ class UpdatePINViewControllerTests: XCTestCase { // expect(sut.navigationItem.title).to(match(navTitle)) expect(sut.titleLabel.text).to(match(titleText)) - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(showPinText)) - expect(sut.pinVisibilityButton.titleColor(for: .normal)).to(equal(primaryColor)) expect(sut.errorLabel.textColor).to(equal(dangerColor)) } - - func testOnClickPinVis() { - let props = setupProps() - - let sut = makeSUT(actualPresenter: true) - sut.render(props) // Sets pinVisibilityButton title to be showPinText initially - - sut.onClickPinVis(sut.pinVisibilityButton) - - expect(sut.pinVisibilityButton.title(for: .normal)).to(match(hidePinText)) - } func testToggleErrorMsg() { let sut = makeSUT(actualPresenter: true) // errorLabel is hidden initially @@ -107,11 +86,4 @@ class UpdatePINViewPresenterMock: UpdatePINViewPresenter { func onViewLoaded() { onViewLoadCalled = true } - - private(set) var onClickPinVisCalled = false - - func onClickPinVis(button: UIButton) { - onClickPinVisCalled = true - } - } diff --git a/Example/Tests/Tests.swift b/Example/Tests/Tests.swift index 9170135..fac3c10 100644 --- a/Example/Tests/Tests.swift +++ b/Example/Tests/Tests.swift @@ -1,28 +1,27 @@ import XCTest -import Cotter -//class Tests: XCTestCase { -// -// override func setUp() { -// super.setUp() -// // Put setup code here. This method is called before the invocation of each test method in the class. -// } -// -// override func tearDown() { -// // Put teardown code here. This method is called after the invocation of each test method in the class. -// super.tearDown() -// } -// -// func testExample() { -// // This is an example of a functional test case. -// XCTAssert(true, "Pass") -// } -// -// func testPerformanceExample() { -// // This is an example of a performance test case. -// self.measure() { -// // Put the code you want to measure the time of here. -// } -// } -// -//} +class Tests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + XCTAssert(true, "Pass") + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure() { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/Source/Cotter.swift b/Source/Cotter.swift index ce9b148..b28285a 100644 --- a/Source/Cotter.swift +++ b/Source/Cotter.swift @@ -42,14 +42,14 @@ public class Cotter { static var resourceBundle: Bundle = { // Set the resource bundle let frameworkBundle = Bundle(for: Cotter.self) - guard let bundleURL = frameworkBundle.url(forResource: "Cotter", withExtension: "bundle") else { - os_log("Cotter.bundle not found!", log: Config.instance.log, type: .fault) - fatalError("Cotter.bundle not found!") + guard let bundleURL = frameworkBundle.url(forResource: "Assets", withExtension: "bundle") else { + os_log("Assets.bundle not found!", log: Config.instance.log, type: .fault) + fatalError("Assets.bundle not found!") } guard let resBundle = Bundle(url: bundleURL) else { - os_log("cannot access Cotter.bundle!", log: Config.instance.log, type: .fault) - fatalError("cannot access Cotter.bundle!") + os_log("cannot access Assets.bundle!", log: Config.instance.log, type: .fault) + fatalError("cannot access Assets.bundle!") } return resBundle @@ -360,21 +360,20 @@ public class Cotter { // configureOneSignal configure cotter's onesignal SDK with launchOptions provided private static func configureOneSignal(launchOptions: [UIApplication.LaunchOptionsKey: Any]?) { - let onesignalInitSettings = [kOSSettingsKeyAutoPrompt: false, - kOSSettingsKeyInAppLaunchURL: true] + if CommandLine.arguments.contains("DISABLE_COTTER_ONESIGNAL") { + return; + } + + OneSignal.setLocationShared(false) + OneSignal.initWithLaunchOptions(launchOptions) + OneSignal.setNotificationOpenedHandler(notificationOpenedHandler) func notifCb(res: CotterResult) { switch res { case .success(let cred): // if appID is not setup don't use initiate OneSignal if cred.appID == "" { return } - OneSignal.setLocationShared(false) - OneSignal.initWithLaunchOptions(launchOptions, - appId: cred.appID, - handleNotificationReceived: nil, - handleNotificationAction: notificationOpenedHandler, - settings: onesignalInitSettings) - OneSignal.inFocusDisplayType = .notification + OneSignal.setAppId(cred.appID) if let userID = Cotter.getLoggedInUserID() { guard let pubKey = KeyStore.trusted(userID: userID).pubKey else { @@ -479,9 +478,9 @@ func transformCb(parent: UIViewController, cb: @escaping FinalAuthCallback) -> F } } -func notificationOpenedHandler( result: OSNotificationOpenedResult? ) { +func notificationOpenedHandler( result: OSNotificationOpenedResult ) { // This block gets called when the user reacts to a notification received - let payload: OSNotificationPayload = result!.notification.payload + let payload: OSNotification = result.notification if payload.additionalData != nil { let customData = payload.additionalData @@ -489,7 +488,7 @@ func notificationOpenedHandler( result: OSNotificationOpenedResult? ) { guard let userID = Cotter.getLoggedInUserID() else { return } - Passwordless.shared.checkEvent(identifier: userID) + Passwordless.shared.checkEvent(clientUserID: userID) } } } diff --git a/Source/TransactionPINViewController.swift b/Source/TransactionPINViewController.swift index 5aa21cd..0f4816d 100644 --- a/Source/TransactionPINViewController.swift +++ b/Source/TransactionPINViewController.swift @@ -22,7 +22,6 @@ public class TransactionPINViewControllerKey { protocol TransactionPINViewPresenter { func onViewAppeared() func onViewLoaded() - func onClickPinVis(button: UIButton) } // MARK: - Properties of TransactionPINViewController @@ -83,10 +82,6 @@ class TransactionPINViewPresenterImpl: TransactionPINViewPresenter { viewController.setupDelegates() viewController.render(props) } - - func onClickPinVis(button: UIButton) { - viewController.togglePinVisibility(button: button, showPinText: props.showPinText, hidePinText: props.hidePinText) - } } class TransactionPINViewController: UIViewController { diff --git a/Source/UpdateProfile.storyboard b/Source/UpdateProfile.storyboard index 4c6c13a..c859018 100644 --- a/Source/UpdateProfile.storyboard +++ b/Source/UpdateProfile.storyboard @@ -1,9 +1,9 @@ - + - + @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ - + @@ -42,7 +42,7 @@ - + @@ -97,7 +97,7 @@ - + @@ -108,7 +108,7 @@ - + @@ -127,7 +127,7 @@ - + @@ -182,7 +182,7 @@ - + @@ -193,7 +193,7 @@ - + @@ -212,7 +212,7 @@ - +