From 64f1bc62a6dacf586355b4fa5bf24cd1de9370c5 Mon Sep 17 00:00:00 2001 From: George <george.makhoul@kuwaitnet.com> Date: Thu, 20 Jun 2024 11:21:04 +0300 Subject: [PATCH] temp --- .DS_Store | Bin 8196 -> 8196 bytes MiniScanner.xcodeproj/project.pbxproj | 62 + .../xcschemes/xcschememanagement.plist | 2 +- .../xcshareddata/swiftpm/Package.resolved | 24 +- .../UserInterfaceState.xcuserstate | Bin 276720 -> 240413 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 18 - MiniScanner/.DS_Store | Bin 10244 -> 10244 bytes MiniScanner/Extensions/.DS_Store | Bin 0 -> 8196 bytes .../LogoAnimationView/LogoAnimationView.swift | 8 + .../LogoAnimationView/StickerView.swift | 417 +++++ .../UIView+Constraints.swift | 21 + MiniScanner/Extensions/MyExtention.swift | 791 +++++++++ .../PagerImageCollectionViewCell.swift | 1 - .../CustomViews/BannerView.swift | 49 +- .../CustomViews/BannerView.xib | 2 +- .../EditViewController.swift | 108 +- .../EditViewController/EditViewController.xib | 7 +- MiniScanner/Supporting Files/.DS_Store | Bin 8196 -> 10244 bytes .../close.imageset/Contents.json | 21 + .../Assets.xcassets/close.imageset/close.png | Bin 0 -> 3262 bytes .../resize.imageset/Contents.json | 21 + .../resize.imageset/resize.png | Bin 0 -> 2599 bytes .../MultiPageScanSession.swift | 24 + MiniScanner/Supporting Files/Info.plist | 7 - .../LogoAnimationView/.DS_Store | Bin 0 -> 6148 bytes .../LogoAnimationView/StickerView.swift | 417 +++++ .../UIView+Constraints.swift | 21 + .../Supporting Files/MyExtention.swift | 762 +++++++++ .../Sources/FSPageControl.swift | 0 .../Sources/FSPageViewLayout.swift | 0 .../Sources/FSPageViewTransformer.swift | 4 +- .../Sources/FSPagerCollectionView.swift | 0 .../Sources/FSPagerView.swift | 21 +- .../Sources/FSPagerViewCell.swift | 105 ++ .../Sources/FSPagerViewLayoutAttributes.swift | 0 .../Sources/FSPagerViewObjcCompat.h | 0 .../Sources/FSPagerViewObjcCompat.m | 0 Podfile | 1 - Podfile.lock | 6 +- Pods/FSPagerView/README-OBJECTIVE-C.md | 416 ----- Pods/Manifest.lock | 6 +- Pods/Pods.xcodeproj/project.pbxproj | 1476 +++++++---------- .../xcschemes/FSPagerView.xcscheme | 58 - .../xcschemes/xcschememanagement.plist | 21 +- Pods/{FSPagerView => TLPhotoPicker}/LICENSE | 2 +- Pods/TLPhotoPicker/README.md | 408 +++++ .../Classes/SynchronizedDictionary.swift | 54 + .../Classes/TLAlbumPopView.swift | 83 + .../Classes/TLAssetCollection+Extension.swift | 68 + .../TLAssetPreviewViewController.swift | 204 +++ .../Classes/TLAssetsCollection.swift | 430 +++++ .../TLPhotoPicker/Classes/TLBundle.swift | 29 + .../Classes/TLCollectionTableViewCell.swift | 25 + .../Classes/TLCollectionTableViewCell.xib | 60 + .../Classes/TLPhotoCollectionViewCell.swift | 182 ++ .../Classes/TLPhotoCollectionViewCell.xib | 142 ++ .../Classes/TLPhotoLibrary.swift | 293 ++++ .../TLPhotopickerDataSourcesProtocol.swift | 17 + .../TLPhotosPickerViewController.swift | 1358 +++++++++++++++ .../Classes/TLPhotosPickerViewController.xib | 232 +++ .../TLPhotoPickerController.bundle/arrow.png | Bin 0 -> 1105 bytes .../camera@3x.png | Bin 0 -> 3079 bytes .../insertPhotoMaterial@3x.png | Bin 0 -> 1672 bytes .../pop_arrow.png | Bin 0 -> 1496 bytes .../TLPhotoPickerController.bundle/video.png | Bin 0 -> 834 bytes .../FSPagerView/FSPagerView-Info.plist | 26 - .../FSPagerView/FSPagerView-dummy.m | 5 - .../FSPagerView/FSPagerView-prefix.pch | 12 - .../FSPagerView/FSPagerView-umbrella.h | 17 - .../FSPagerView/FSPagerView.debug.xcconfig | 15 - .../FSPagerView/FSPagerView.modulemap | 6 - .../FSPagerView/FSPagerView.release.xcconfig | 15 - ...Pods-MiniScanner-acknowledgements.markdown | 23 - .../Pods-MiniScanner-acknowledgements.plist | 29 - ...er-frameworks-Debug-input-files.xcfilelist | 1 - ...r-frameworks-Debug-output-files.xcfilelist | 1 - ...-frameworks-Release-input-files.xcfilelist | 1 - ...frameworks-Release-output-files.xcfilelist | 1 - .../Pods-MiniScanner-frameworks.sh | 2 - .../Pods-MiniScanner.debug.xcconfig | 6 +- .../Pods-MiniScanner.release.xcconfig | 6 +- 81 files changed, 7083 insertions(+), 1567 deletions(-) create mode 100644 MiniScanner/Extensions/.DS_Store create mode 100755 MiniScanner/Extensions/LogoAnimationView/LogoAnimationView.swift create mode 100755 MiniScanner/Extensions/LogoAnimationView/StickerView.swift create mode 100755 MiniScanner/Extensions/LogoAnimationView/UIView+Constraints.swift create mode 100755 MiniScanner/Extensions/MyExtention.swift create mode 100644 MiniScanner/Supporting Files/Assets.xcassets/close.imageset/Contents.json create mode 100644 MiniScanner/Supporting Files/Assets.xcassets/close.imageset/close.png create mode 100644 MiniScanner/Supporting Files/Assets.xcassets/resize.imageset/Contents.json create mode 100644 MiniScanner/Supporting Files/Assets.xcassets/resize.imageset/resize.png create mode 100644 MiniScanner/Supporting Files/LogoAnimationView/.DS_Store create mode 100755 MiniScanner/Supporting Files/LogoAnimationView/StickerView.swift create mode 100755 MiniScanner/Supporting Files/LogoAnimationView/UIView+Constraints.swift create mode 100755 MiniScanner/Supporting Files/MyExtention.swift rename {Pods/FSPagerView => MiniScanner/Supporting Files}/Sources/FSPageControl.swift (100%) rename {Pods/FSPagerView => MiniScanner/Supporting Files}/Sources/FSPageViewLayout.swift (100%) rename {Pods/FSPagerView => MiniScanner/Supporting Files}/Sources/FSPageViewTransformer.swift (99%) rename {Pods/FSPagerView => MiniScanner/Supporting Files}/Sources/FSPagerCollectionView.swift (100%) rename {Pods/FSPagerView => MiniScanner/Supporting Files}/Sources/FSPagerView.swift (97%) rename {Pods/FSPagerView => MiniScanner/Supporting Files}/Sources/FSPagerViewCell.swift (67%) rename {Pods/FSPagerView => MiniScanner/Supporting Files}/Sources/FSPagerViewLayoutAttributes.swift (100%) rename {Pods/FSPagerView => MiniScanner/Supporting Files}/Sources/FSPagerViewObjcCompat.h (100%) rename {Pods/FSPagerView => MiniScanner/Supporting Files}/Sources/FSPagerViewObjcCompat.m (100%) delete mode 100644 Pods/FSPagerView/README-OBJECTIVE-C.md delete mode 100644 Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/FSPagerView.xcscheme rename Pods/{FSPagerView => TLPhotoPicker}/LICENSE (93%) create mode 100644 Pods/TLPhotoPicker/README.md create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/Classes/SynchronizedDictionary.swift create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAlbumPopView.swift create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAssetCollection+Extension.swift create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAssetPreviewViewController.swift create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAssetsCollection.swift create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLBundle.swift create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLCollectionTableViewCell.swift create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLCollectionTableViewCell.xib create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotoCollectionViewCell.swift create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotoCollectionViewCell.xib create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotoLibrary.swift create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotopickerDataSourcesProtocol.swift create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotosPickerViewController.swift create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotosPickerViewController.xib create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/arrow.png create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/camera@3x.png create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/insertPhotoMaterial@3x.png create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/pop_arrow.png create mode 100644 Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/video.png delete mode 100644 Pods/Target Support Files/FSPagerView/FSPagerView-Info.plist delete mode 100644 Pods/Target Support Files/FSPagerView/FSPagerView-dummy.m delete mode 100644 Pods/Target Support Files/FSPagerView/FSPagerView-prefix.pch delete mode 100644 Pods/Target Support Files/FSPagerView/FSPagerView-umbrella.h delete mode 100644 Pods/Target Support Files/FSPagerView/FSPagerView.debug.xcconfig delete mode 100644 Pods/Target Support Files/FSPagerView/FSPagerView.modulemap delete mode 100644 Pods/Target Support Files/FSPagerView/FSPagerView.release.xcconfig diff --git a/.DS_Store b/.DS_Store index 5f07804f262af356ef417d73e26aebb21e8b73a3..e1fcced5fcaf1911be78ad5f61788a441f9cb554 100644 GIT binary patch delta 26 icmZp1XmQw3E;!j+V9#bFp)0JL*(JWQZ2lv{&I|yH?FrNX delta 73 zcmZp1XmQw3F37ljvX4Nans{}!nW>I~uBB0}jzYDik%5kaiLqI2EhmSlvc7dte0EN5 dUVi6f0U>$DuFVEQ*I75SNqlG7{7;0P82}?f74`rC diff --git a/MiniScanner.xcodeproj/project.pbxproj b/MiniScanner.xcodeproj/project.pbxproj index 9724627..e932361 100644 --- a/MiniScanner.xcodeproj/project.pbxproj +++ b/MiniScanner.xcodeproj/project.pbxproj @@ -84,7 +84,18 @@ 53CD5F5E2C1505EC0010424B /* UIWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CD5F5D2C1505EC0010424B /* UIWindow.swift */; }; 53CD5F612C15A6210010424B /* SettingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CD5F5F2C15A6210010424B /* SettingViewController.swift */; }; 53CD5F622C15A6210010424B /* SettingViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 53CD5F602C15A6210010424B /* SettingViewController.xib */; }; + 53D9D1C22C1AF521004D1C1C /* StickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D9D1BE2C1AF521004D1C1C /* StickerView.swift */; }; + 53D9D1C42C1AF521004D1C1C /* UIView+Constraints.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D9D1C02C1AF521004D1C1C /* UIView+Constraints.swift */; }; + 53D9D1C52C1AF521004D1C1C /* MyExtention.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D9D1C12C1AF521004D1C1C /* MyExtention.swift */; }; 53E3A2092C19D17100C9B95E /* PreviewImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E3A2082C19D17100C9B95E /* PreviewImageViewController.swift */; }; + 53E7D3352C1B00880025A1D3 /* FSPagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E7D32C2C1B00880025A1D3 /* FSPagerView.swift */; }; + 53E7D3362C1B00880025A1D3 /* FSPageViewTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E7D32D2C1B00880025A1D3 /* FSPageViewTransformer.swift */; }; + 53E7D3372C1B00880025A1D3 /* FSPagerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E7D32F2C1B00880025A1D3 /* FSPagerViewCell.swift */; }; + 53E7D3382C1B00880025A1D3 /* FSPagerViewLayoutAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E7D3302C1B00880025A1D3 /* FSPagerViewLayoutAttributes.swift */; }; + 53E7D3392C1B00880025A1D3 /* FSPageViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E7D3312C1B00880025A1D3 /* FSPageViewLayout.swift */; }; + 53E7D33A2C1B00880025A1D3 /* FSPageControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E7D3322C1B00880025A1D3 /* FSPageControl.swift */; }; + 53E7D33B2C1B00880025A1D3 /* FSPagerViewObjcCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 53E7D3332C1B00880025A1D3 /* FSPagerViewObjcCompat.m */; }; + 53E7D33C2C1B00880025A1D3 /* FSPagerCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E7D3342C1B00880025A1D3 /* FSPagerCollectionView.swift */; }; 53EDED962C18387E00DB8DF9 /* TYPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 53EDED922C18387E00DB8DF9 /* TYPageControl.m */; }; 53EDED972C18387E00DB8DF9 /* TYCyclePagerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 53EDED932C18387E00DB8DF9 /* TYCyclePagerView.m */; }; 53EDED982C18387E00DB8DF9 /* TYCyclePagerTransformLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 53EDED942C18387E00DB8DF9 /* TYCyclePagerTransformLayout.m */; }; @@ -235,7 +246,19 @@ 53CD5F5D2C1505EC0010424B /* UIWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIWindow.swift; sourceTree = "<group>"; }; 53CD5F5F2C15A6210010424B /* SettingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingViewController.swift; sourceTree = "<group>"; }; 53CD5F602C15A6210010424B /* SettingViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SettingViewController.xib; sourceTree = "<group>"; }; + 53D9D1BE2C1AF521004D1C1C /* StickerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerView.swift; sourceTree = "<group>"; }; + 53D9D1C02C1AF521004D1C1C /* UIView+Constraints.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+Constraints.swift"; sourceTree = "<group>"; }; + 53D9D1C12C1AF521004D1C1C /* MyExtention.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MyExtention.swift; sourceTree = "<group>"; }; 53E3A2082C19D17100C9B95E /* PreviewImageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewImageViewController.swift; sourceTree = "<group>"; }; + 53E7D32C2C1B00880025A1D3 /* FSPagerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerView.swift; sourceTree = "<group>"; }; + 53E7D32D2C1B00880025A1D3 /* FSPageViewTransformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageViewTransformer.swift; sourceTree = "<group>"; }; + 53E7D32E2C1B00880025A1D3 /* FSPagerViewObjcCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSPagerViewObjcCompat.h; sourceTree = "<group>"; }; + 53E7D32F2C1B00880025A1D3 /* FSPagerViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerViewCell.swift; sourceTree = "<group>"; }; + 53E7D3302C1B00880025A1D3 /* FSPagerViewLayoutAttributes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerViewLayoutAttributes.swift; sourceTree = "<group>"; }; + 53E7D3312C1B00880025A1D3 /* FSPageViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageViewLayout.swift; sourceTree = "<group>"; }; + 53E7D3322C1B00880025A1D3 /* FSPageControl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageControl.swift; sourceTree = "<group>"; }; + 53E7D3332C1B00880025A1D3 /* FSPagerViewObjcCompat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSPagerViewObjcCompat.m; sourceTree = "<group>"; }; + 53E7D3342C1B00880025A1D3 /* FSPagerCollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerCollectionView.swift; sourceTree = "<group>"; }; 53EDED902C18387E00DB8DF9 /* TYCyclePagerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TYCyclePagerView.h; sourceTree = "<group>"; }; 53EDED912C18387E00DB8DF9 /* TYCyclePagerTransformLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TYCyclePagerTransformLayout.h; sourceTree = "<group>"; }; 53EDED922C18387E00DB8DF9 /* TYPageControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TYPageControl.m; sourceTree = "<group>"; }; @@ -540,6 +563,31 @@ path = KNAlert; sourceTree = "<group>"; }; + 53D9D1BD2C1AF521004D1C1C /* LogoAnimationView */ = { + isa = PBXGroup; + children = ( + 53D9D1BE2C1AF521004D1C1C /* StickerView.swift */, + 53D9D1C02C1AF521004D1C1C /* UIView+Constraints.swift */, + ); + path = LogoAnimationView; + sourceTree = "<group>"; + }; + 53E7D32B2C1B00880025A1D3 /* Sources */ = { + isa = PBXGroup; + children = ( + 53E7D32C2C1B00880025A1D3 /* FSPagerView.swift */, + 53E7D32D2C1B00880025A1D3 /* FSPageViewTransformer.swift */, + 53E7D32E2C1B00880025A1D3 /* FSPagerViewObjcCompat.h */, + 53E7D32F2C1B00880025A1D3 /* FSPagerViewCell.swift */, + 53E7D3302C1B00880025A1D3 /* FSPagerViewLayoutAttributes.swift */, + 53E7D3312C1B00880025A1D3 /* FSPageViewLayout.swift */, + 53E7D3322C1B00880025A1D3 /* FSPageControl.swift */, + 53E7D3332C1B00880025A1D3 /* FSPagerViewObjcCompat.m */, + 53E7D3342C1B00880025A1D3 /* FSPagerCollectionView.swift */, + ); + path = Sources; + sourceTree = "<group>"; + }; 53EDED8F2C18387E00DB8DF9 /* CyclePagerView */ = { isa = PBXGroup; children = ( @@ -724,6 +772,9 @@ EC8A9B0C254DC30800F9AF99 /* Supporting Files */ = { isa = PBXGroup; children = ( + 53E7D32B2C1B00880025A1D3 /* Sources */, + 53D9D1BD2C1AF521004D1C1C /* LogoAnimationView */, + 53D9D1C12C1AF521004D1C1C /* MyExtention.swift */, 53EDED8F2C18387E00DB8DF9 /* CyclePagerView */, 53F21F932C1377B900172BFC /* Fonts */, 53014F4B2C11A8E80071CE39 /* CustomWeScan */, @@ -941,8 +992,10 @@ 5359841E2C14B835003EB6ED /* SearchFilesView.swift in Sources */, 53014FA02C11A8E80071CE39 /* MultiPageScanSession.swift in Sources */, 53014F9A2C11A8E80071CE39 /* CIImage+Utils.swift in Sources */, + 53D9D1C42C1AF521004D1C1C /* UIView+Constraints.swift in Sources */, 53CD5F5E2C1505EC0010424B /* UIWindow.swift in Sources */, EC8A9B17254DCC2900F9AF99 /* URL+Extensions.swift in Sources */, + 53D9D1C52C1AF521004D1C1C /* MyExtention.swift in Sources */, 535983F22C144E87003EB6ED /* Keys.swift in Sources */, EC70252C254E066400BE1958 /* SettingsViewController.swift in Sources */, EC0CF21D254D8F3900888722 /* String+Extensions.swift in Sources */, @@ -954,16 +1007,19 @@ 53014FAA2C11A8E80071CE39 /* Quadrilateral.swift in Sources */, 53EDED982C18387E00DB8DF9 /* TYCyclePagerTransformLayout.m in Sources */, 53014FA42C11A8E80071CE39 /* EditScanViewController.swift in Sources */, + 53E7D33C2C1B00880025A1D3 /* FSPagerCollectionView.swift in Sources */, EC8A9B1A254DCE3E00F9AF99 /* UIImage+Extensions.swift in Sources */, 53014FB72C11A8E80071CE39 /* CaptureDevice.swift in Sources */, 53014F8F2C11A8E80071CE39 /* RectangleFeaturesFunnel.swift in Sources */, 53014F932C11A8E80071CE39 /* PDFCreator.swift in Sources */, 539D1C852C164F85009DB24A /* CustomTabBarView.swift in Sources */, + 53E7D33B2C1B00880025A1D3 /* FSPagerViewObjcCompat.m in Sources */, EC702537254E1DE000BE1958 /* UIViewController+Extensions.swift in Sources */, 535983E92C1428D4003EB6ED /* UIColor+Extensions.swift in Sources */, 53014F972C11A8E80071CE39 /* AVCaptureVideoOrientation+Utils.swift in Sources */, 535983EF2C142C9F003EB6ED /* Localization.swift in Sources */, 53014F992C11A8E80071CE39 /* CGPoint+Utils.swift in Sources */, + 53E7D3392C1B00880025A1D3 /* FSPageViewLayout.swift in Sources */, 53014FA62C11A8E80071CE39 /* Error.swift in Sources */, 53014FA72C11A8E80071CE39 /* VisionRectangleDetector.swift in Sources */, 53BAE0ED2C15E0890072189E /* EditViewController.swift in Sources */, @@ -976,6 +1032,8 @@ 53014FA92C11A8E80071CE39 /* QuadrilateralView.swift in Sources */, 53CD5F562C1503150010424B /* BMViewController.swift in Sources */, EC702546254E1E9E00BE1958 /* WalkthroughModel.swift in Sources */, + 53D9D1C22C1AF521004D1C1C /* StickerView.swift in Sources */, + 53E7D3352C1B00880025A1D3 /* FSPagerView.swift in Sources */, 53014F912C11A8E80071CE39 /* ShutterButton.swift in Sources */, 53F21F8B2C1246AF00172BFC /* AllFolderTableViewCell.swift in Sources */, 53014FBD2C11A8E80071CE39 /* CaptureSession+Focus.swift in Sources */, @@ -991,7 +1049,9 @@ 53014FA32C11A8E80071CE39 /* ZoomGestureController.swift in Sources */, 53EDED962C18387E00DB8DF9 /* TYPageControl.m in Sources */, 53E3A2092C19D17100C9B95E /* PreviewImageViewController.swift in Sources */, + 53E7D3362C1B00880025A1D3 /* FSPageViewTransformer.swift in Sources */, EC70252A254E066400BE1958 /* SettingsViewController+Safari.swift in Sources */, + 53E7D3372C1B00880025A1D3 /* FSPagerViewCell.swift in Sources */, 53014F9B2C11A8E80071CE39 /* CGAffineTransform+Utils.swift in Sources */, 53014FBC2C11A8E80071CE39 /* CaptureSession.swift in Sources */, EC702542254E1E7500BE1958 /* ClassicWalkthroughViewController.swift in Sources */, @@ -1004,6 +1064,7 @@ 53014FB82C11A8E80071CE39 /* Transformable.swift in Sources */, 53014FA22C11A8E80071CE39 /* ScannedPageViewController.swift in Sources */, EC8A9B1D254DCEC600F9AF99 /* File.swift in Sources */, + 53E7D33A2C1B00880025A1D3 /* FSPageControl.swift in Sources */, EC8A9B24254DE72F00F9AF99 /* UIView+Extensions.swift in Sources */, EC0CF200254D8BBF00888722 /* SceneDelegate.swift in Sources */, 53014FBB2C11A8E80071CE39 /* CaptureSession+Orientation.swift in Sources */, @@ -1014,6 +1075,7 @@ 539D1C8B2C16E97F009DB24A /* ShareSheetViewController.swift in Sources */, 53014F962C11A8E80071CE39 /* ScannerViewController.swift in Sources */, 53014FA52C11A8E80071CE39 /* EditScanCornerView.swift in Sources */, + 53E7D3382C1B00880025A1D3 /* FSPagerViewLayoutAttributes.swift in Sources */, 53014F8E2C11A8E80071CE39 /* ImageScannerController.swift in Sources */, EC70252B254E066400BE1958 /* SettingsTableViewCell.swift in Sources */, 535983ED2C142B49003EB6ED /* UIFont+Extensions.swift in Sources */, diff --git a/MiniScanner.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist b/MiniScanner.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist index 9f3ce57..3efba6c 100644 --- a/MiniScanner.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/MiniScanner.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ <key>MiniScanner.xcscheme_^#shared#^_</key> <dict> <key>orderHint</key> - <integer>9</integer> + <integer>8</integer> </dict> </dict> </dict> diff --git a/MiniScanner.xcworkspace/xcshareddata/swiftpm/Package.resolved b/MiniScanner.xcworkspace/xcshareddata/swiftpm/Package.resolved index 2a402b6..970347f 100644 --- a/MiniScanner.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/MiniScanner.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,14 +1,16 @@ { - "pins" : [ - { - "identity" : "lnextensionexecutor", - "kind" : "remoteSourceControl", - "location" : "https://github.com/LeoNatan/LNExtensionExecutor.git", - "state" : { - "revision" : "16b741f659e344f4569c9f9d32ef2298ef0233ff", - "version" : "1.2.0" + "object": { + "pins": [ + { + "package": "LNExtensionExecutor", + "repositoryURL": "https://github.com/LeoNatan/LNExtensionExecutor.git", + "state": { + "branch": null, + "revision": "16b741f659e344f4569c9f9d32ef2298ef0233ff", + "version": "1.2.0" + } } - } - ], - "version" : 2 + ] + }, + "version": 1 } diff --git a/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate b/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate index 4ccd91bec66ee792ed7249cb0293bc785bf47de2..38a977e2d2b167a27acc1d8314705b731235324d 100644 GIT binary patch literal 240413 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 L|KI<FHs}05<(ckU literal 276720 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	XRMB$e^XB5YeV#KoL|>2@83@jv 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 PTl+tT|G$4CornA%EDZ{C diff --git a/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 6d52f9d..216ee44 100644 --- a/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -3,22 +3,4 @@ uuid = "270C854E-19C5-4254-A77F-7774BFB2FDA6" type = "0" version = "2.0"> - <Breakpoints> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - uuid = "781CC172-B153-4DD6-BA44-38196A7A37FD" - shouldBeEnabled = "Yes" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "MiniScanner/Modules/EditViewController/EditViewController.swift" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "239" - endingLineNumber = "239" - landmarkName = "saveFileAndShare(with:name:)" - landmarkType = "7"> - </BreakpointContent> - </BreakpointProxy> - </Breakpoints> </Bucket> diff --git a/MiniScanner/.DS_Store b/MiniScanner/.DS_Store index b70afdd5908417f48436ff71e03f67913f48e0de..6beef102e5d580989a74bd8ee08a491859ba95d7 100644 GIT binary patch delta 560 zcmZn(XbG6$mJU^hRb`eq)1*^EMlItqqH#<e;M)s{vEItnIcCX??78&7^CXjY$@ zTvm{jlb^)Ez<4&PASbi9#K7RbfB+*CGYcylI|nBhHxDl#zkr~Su%L*bsHm8@gs7yH zq)fbka8hD&c6w2MX<mwReolUoQ%-4Wbb3){N^n79a%Nt7L`iBzNpNOWYP^6Dn$n=u zlsKqRJy3f{WdTr;2$~}IqSVwpuz~(*X~n4}5lHOFcme+6<f8nXoPhk|%#zIfyvUg1 zjQn!XlGI$!ytI6vm1UW!<^BaAsp7EIqGBM8p(i3XC$T;$HOD{CDZiv7KQ}V5s3<Wn zJ=Liaq!eUaa(-SwQ7Xu&h)f_G<QrxC4-8<S?BES!Xh0YO49XA&1B0?dD1^x&0uzGL zjGQ5P`FW|F$_@b_kr*K6V9;i8WbkDOW5{NxVwlJ<mtiHtZiW*KcNyL@{AFZklw?$5 z)Mhkcv}Lqs^k58R3}Q@XOkvDq%z_xn#0a4oWT7;aVl18<CnT|1Nhp|=!_?S9N5RO@ Zc=82d`^|gAqu4gHEBs>FEFjFx3;=u<l}G>p delta 81 zcmZn(XbG6$OBU^hRb+GZYs*^HBSi@HvJBWSi+SR|O0!_eGRN5RO@V)8*z`^{@5 bqu4e!d}Q3ruJDUx^Cz(qCKUO}Yb8AZN-`R{ diff --git a/MiniScanner/Extensions/.DS_Store b/MiniScanner/Extensions/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..90fd3d40cd3a786558f50de1cbb037ba8985620d GIT binary patch literal 8196 zcmeHM&1%~~5dOBwAy6pkA8{$6>bVfe8z`<^FoYiJru3NFNnC?$g;*w~C*5=C8}t== z$`j-{`XD{E-^?ySvTCqgLJFCM-A`Wad^`GPcg4s6Tzhu33$y@iunKP8XY-dL_odd# zz0mWR=x7hTLI+=v;~10LXzMTqOaW8C6fgx$f&W1PzO$ulEO_txyVjZlrof$4K+cDV zRWJ@%c+{hVjivy^b#`mvHS++qi2}v}3y*3_PM<xvVCq7O;k-HTM>3ok2P`~#b2x7f z7iM-LLvcDg?IIlx7kjkU6fgzq3P|q$6bU|Q)?Uuvrx+n)9zVqn>p6d&An&Hxpr2-a zTFFM+W8L|!g;&5M?9*mIwv^+)DywH%%<*H6<Dqg4$+O4VM;Mn_KJfQ3&Z}OyU)=5w zN?t6%kPdfygKT`NUZeAqxP;X>OOo*Pa@<^g{B|V@EM<ALqUGu5vZsff4lnQ)J=Tmd zlc<bTak-XwHH@L#CSy5<Tjb7hMz#rtjoB{d*q-44U9>SHXTGX`mFTvV@in<p*0aVQ za<$AouXy-IeaoA&=??f_T6^BRuCCf4*J{IPKz2i&Z=ZXhPqwrvpGLRL_gvL`PcHdR z7xq(QRz|rJlPzWa2e!&HzpSuHq$j!}CE_VPUoGZk6`pX0cRXjBMu)q-^4#0xnW{$# z+Y?4<Mh|oLHDzYpE6iL5R!o5#Rbb7tw<Q1XEdKs~qdpk9DPRiRt^#g7=_PIY5OV99 zH<D{dtcR>pWL)7<P1tBUPSkXqc>RYVuOki>n>b+Mkv%N8@*%+9|Ej$;cUOTwycUOC literal 0 HcmV?d00001 diff --git a/MiniScanner/Extensions/LogoAnimationView/LogoAnimationView.swift b/MiniScanner/Extensions/LogoAnimationView/LogoAnimationView.swift new file mode 100755 index 0000000..4da81a6 --- /dev/null +++ b/MiniScanner/Extensions/LogoAnimationView/LogoAnimationView.swift @@ -0,0 +1,8 @@ +// +// LogoAnimationView.swift +// AnimatedGifLaunchScreen-Example +// +// Created by Amer Hukic on 13/09/2018. +// Copyright © 2018 Amer Hukic. All rights reserved. +// + diff --git a/MiniScanner/Extensions/LogoAnimationView/StickerView.swift b/MiniScanner/Extensions/LogoAnimationView/StickerView.swift new file mode 100755 index 0000000..7e407b2 --- /dev/null +++ b/MiniScanner/Extensions/LogoAnimationView/StickerView.swift @@ -0,0 +1,417 @@ +// +// StickerView.swift +// StickerView +// +// Created by Edgar Sia on 1/12/18. +// Copyright © 2018 Edgar Sia. All rights reserved. +// + +import UIKit + +enum StickerViewHandler:Int { + case close = 0 + case rotate + case flip +} + +enum StickerViewPosition:Int { + case topLeft = 0 + case topRight + case bottomLeft + case bottomRight +} + +@inline(__always) func CGRectGetCenter(_ rect:CGRect) -> CGPoint { + return CGPoint(x: rect.midX, y: rect.midY) +} + +@inline(__always) func CGRectScale(_ rect:CGRect, wScale:CGFloat, hScale:CGFloat) -> CGRect { + return CGRect(x: rect.origin.x, y: rect.origin.y, width: rect.size.width * wScale, height: rect.size.height * hScale) +} + +@inline(__always) func CGAffineTransformGetAngle(_ t:CGAffineTransform) -> CGFloat { + return atan2(t.b, t.a) +} + +@inline(__always) func CGPointGetDistance(point1:CGPoint, point2:CGPoint) -> CGFloat { + let fx = point2.x - point1.x + let fy = point2.y - point1.y + return sqrt(fx * fx + fy * fy) +} + +@objc protocol StickerViewDelegate { + @objc func stickerViewDidBeginMoving(_ stickerView: StickerView) + @objc func stickerViewDidChangeMoving(_ stickerView: StickerView) + @objc func stickerViewDidEndMoving(_ stickerView: StickerView) + @objc func stickerViewDidBeginRotating(_ stickerView: StickerView) + @objc func stickerViewDidChangeRotating(_ stickerView: StickerView) + @objc func stickerViewDidEndRotating(_ stickerView: StickerView) + @objc func stickerViewDidClose(_ stickerView: StickerView) + @objc func stickerViewDidTap(_ stickerView: StickerView) +} + +class StickerView: UIView { + var delegate: StickerViewDelegate! + /// The contentView inside the sticker view. + var contentView:UIView! + /// Enable the close handler or not. Default value is YES. + var enableClose:Bool = true { + didSet { + if self.showEditing { + self.setEnableClose(self.enableClose) + } + } + } + /// Enable the rotate/resize handler or not. Default value is YES. + var enableRotate:Bool = true{ + didSet { + if self.showEditing { + self.setEnableRotate(self.enableRotate) + } + } + } + /// Enable the flip handler or not. Default value is YES. + var enableFlip:Bool = true + /// Show close and rotate/resize handlers or not. Default value is YES. + var showEditing:Bool = true { + didSet { + if self.showEditing { + self.setEnableClose(self.enableClose) + self.setEnableRotate(self.enableRotate) + self.setEnableFlip(self.enableFlip) + self.contentView?.layer.borderWidth = 1 + } + else { + self.setEnableClose(false) + self.setEnableRotate(false) + self.setEnableFlip(false) + self.contentView?.layer.borderWidth = 0 + } + } + } + + /// Minimum value for the shorter side while resizing. Default value will be used if not set. + private var _minimumSize:NSInteger = 0 + var minimumSize:NSInteger { + set { + _minimumSize = max(newValue, self.defaultMinimumSize) + } + get { + return _minimumSize + } + } + /// Color of the outline border. Default: brown color. + private var _outlineBorderColor:UIColor = .clear + var outlineBorderColor:UIColor { + set { + _outlineBorderColor = newValue + self.contentView?.layer.borderColor = _outlineBorderColor.cgColor + } + get { + return _outlineBorderColor + } + } + /// A convenient property for you to store extra information. + var userInfo:Any? + + + init(contentView: UIView) { + self.defaultInset = 11 + self.defaultMinimumSize = 4 * self.defaultInset + + var frame = contentView.frame + frame = CGRect(x: 0, y: 0, width: frame.size.width + CGFloat(self.defaultInset) * 2, height: frame.size.height + CGFloat(self.defaultInset) * 2) + super.init(frame: frame) + self.backgroundColor = UIColor.clear + self.addGestureRecognizer(self.moveGesture) + self.addGestureRecognizer(self.tapGesture) + + // Setup content view + self.contentView = contentView + self.contentView.center = CGRectGetCenter(self.bounds) + self.contentView.isUserInteractionEnabled = false + self.contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + self.contentView.layer.allowsEdgeAntialiasing = true + self.addSubview(self.contentView) + + // Setup editing handlers + self.setPosition(.topLeft, forHandler: .close) + self.addSubview(self.closeImageView) + self.setPosition(.bottomRight, forHandler: .rotate) + self.addSubview(self.rotateImageView) + self.setPosition(.bottomLeft, forHandler: .flip) + self.addSubview(self.flipImageView) + + self.showEditing = true + self.enableClose = true + self.enableRotate = true + self.enableFlip = false + + self.minimumSize = self.defaultMinimumSize + self.outlineBorderColor = .white + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func setImage(_ image:UIImage, forHandler handler:StickerViewHandler) { + switch handler { + case .close: + self.closeImageView.image = image + case .rotate: + self.rotateImageView.image = image + case .flip: + self.flipImageView.image = image + } + } + + func setPosition(_ position:StickerViewPosition, forHandler handler:StickerViewHandler) { + let origin = self.contentView.frame.origin + let size = self.contentView.frame.size + + var handlerView:UIImageView? + switch handler { + case .close: + handlerView = self.closeImageView + case .rotate: + handlerView = self.rotateImageView + case .flip: + handlerView = self.flipImageView + } + + switch position { + case .topLeft: + handlerView?.center = origin + handlerView?.autoresizingMask = [.flexibleRightMargin, .flexibleBottomMargin] + case .topRight: + handlerView?.center = CGPoint(x: origin.x + size.width, y: origin.y) + handlerView?.autoresizingMask = [.flexibleLeftMargin, .flexibleBottomMargin] + case .bottomLeft: + handlerView?.center = CGPoint(x: origin.x, y: origin.y + size.height) + handlerView?.autoresizingMask = [.flexibleRightMargin, .flexibleTopMargin] + case .bottomRight: + handlerView?.center = CGPoint(x: origin.x + size.width, y: origin.y + size.height) + handlerView?.autoresizingMask = [.flexibleLeftMargin, .flexibleTopMargin] + } + + handlerView?.tag = position.rawValue + } + + /** + * Customize handler's size + * + * @param size Handler's size + */ + func setHandlerSize(_ size:Int) { + if size <= 0 { + return + } + + self.defaultInset = NSInteger(round(Float(size) / 2)) + self.defaultMinimumSize = 4 * self.defaultInset + self.minimumSize = max(self.minimumSize, self.defaultMinimumSize) + + let originalCenter = self.center + let originalTransform = self.transform + var frame = self.contentView.frame + frame = CGRect(x: 0, y: 0, width: frame.size.width + CGFloat(self.defaultInset) * 2, height: frame.size.height + CGFloat(self.defaultInset) * 2) + + self.contentView.removeFromSuperview() + + self.transform = CGAffineTransform.identity + self.frame = frame + + self.contentView.center = CGRectGetCenter(self.bounds) + self.addSubview(self.contentView) + self.sendSubviewToBack(self.contentView) + + let handlerFrame = CGRect(x: 0, y: 0, width: self.defaultInset * 2, height: self.defaultInset * 2) + self.closeImageView.frame = handlerFrame + self.setPosition(StickerViewPosition(rawValue: self.closeImageView.tag)!, forHandler: .close) + self.rotateImageView.frame = handlerFrame + self.setPosition(StickerViewPosition(rawValue: self.rotateImageView.tag)!, forHandler: .rotate) + self.flipImageView.frame = handlerFrame + self.setPosition(StickerViewPosition(rawValue: self.flipImageView.tag)!, forHandler: .flip) + + self.center = originalCenter + self.transform = originalTransform + } + + /** + * Default value + */ + private var defaultInset:NSInteger + private var defaultMinimumSize:NSInteger + + /** + * Variables for moving view + */ + private var beginningPoint = CGPoint.zero + private var beginningCenter = CGPoint.zero + + /** + * Variables for rotating and resizing view + */ + private var initialBounds = CGRect.zero + private var initialDistance:CGFloat = 0 + private var deltaAngle:CGFloat = 0 + + private lazy var moveGesture = { + return UIPanGestureRecognizer(target: self, action: #selector(handleMoveGesture(_:))) + }() + private lazy var rotateImageView:UIImageView = { + let rotateImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 32, height: 32)) + rotateImageView.cornerRadiuss = 16 + rotateImageView.tintColor = UIColor.black + rotateImageView.contentMode = UIView.ContentMode.scaleAspectFill + rotateImageView.backgroundColor = UIColor.white + rotateImageView.isUserInteractionEnabled = true + rotateImageView.addGestureRecognizer(self.rotateGesture) + + return rotateImageView + }() + private lazy var rotateGesture = { + return UIPanGestureRecognizer(target: self, action: #selector(handleRotateGesture(_:))) + }() + private lazy var closeImageView:UIImageView = { + let closeImageview = UIImageView(frame: CGRect(x: 0, y: 0, width: 32, height: 32)) + closeImageview.cornerRadiuss = 16 + closeImageview.tintColor = UIColor.black + closeImageview.contentMode = UIView.ContentMode.scaleAspectFill + closeImageview.backgroundColor = UIColor.white + closeImageview.isUserInteractionEnabled = true + closeImageview.addGestureRecognizer(self.closeGesture) + return closeImageview + }() + private lazy var closeGesture = { + return UITapGestureRecognizer(target: self, action: #selector(handleCloseGesture(_:))) + }() + private lazy var flipImageView:UIImageView = { + let flipImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: self.defaultInset * 2, height: self.defaultInset * 2)) + flipImageView.contentMode = UIView.ContentMode.scaleAspectFit + flipImageView.backgroundColor = UIColor.clear + flipImageView.isUserInteractionEnabled = true + flipImageView.addGestureRecognizer(self.flipGesture) + return flipImageView + }() + private lazy var flipGesture = { + return UITapGestureRecognizer(target: self, action: #selector(handleFlipGesture(_:))) + }() + private lazy var tapGesture = { + return UITapGestureRecognizer(target: self, action: #selector(handleTapGesture(_:))) + }() + // MARK: - Gesture Handlers + @objc + func handleMoveGesture(_ recognizer: UIPanGestureRecognizer) { + let touchLocation = recognizer.location(in: self.superview) + switch recognizer.state { + case .began: + self.beginningPoint = touchLocation + self.beginningCenter = self.center + if let delegate = self.delegate { + delegate.stickerViewDidBeginMoving(self) + } + case .changed: + self.center = CGPoint(x: self.beginningCenter.x + (touchLocation.x - self.beginningPoint.x), y: self.beginningCenter.y + (touchLocation.y - self.beginningPoint.y)) + if let delegate = self.delegate { + delegate.stickerViewDidChangeMoving(self) + } + case .ended: + self.center = CGPoint(x: self.beginningCenter.x + (touchLocation.x - self.beginningPoint.x), y: self.beginningCenter.y + (touchLocation.y - self.beginningPoint.y)) + if let delegate = self.delegate { + delegate.stickerViewDidEndMoving(self) + } + default: + break + } + } + + @objc + func handleRotateGesture(_ recognizer: UIPanGestureRecognizer) { + let touchLocation = recognizer.location(in: self.superview) + let center = self.center + + switch recognizer.state { + case .began: + self.deltaAngle = CGFloat(atan2f(Float(touchLocation.y - center.y), Float(touchLocation.x - center.x))) - CGAffineTransformGetAngle(self.transform) + self.initialBounds = self.bounds + self.initialDistance = CGPointGetDistance(point1: center, point2: touchLocation) + if let delegate = self.delegate { + delegate.stickerViewDidBeginRotating(self) + } + case .changed: + let angle = atan2f(Float(touchLocation.y - center.y), Float(touchLocation.x - center.x)) + let angleDiff = Float(self.deltaAngle) - angle + self.transform = CGAffineTransform(rotationAngle: CGFloat(-angleDiff)) + + var scale = CGPointGetDistance(point1: center, point2: touchLocation) / self.initialDistance + let minimumScale = CGFloat(self.minimumSize) / min(self.initialBounds.size.width, self.initialBounds.size.height) + scale = max(scale, minimumScale) + let scaledBounds = CGRectScale(self.initialBounds, wScale: scale, hScale: scale) + self.bounds = scaledBounds + self.setNeedsDisplay() + + if let delegate = self.delegate { + delegate.stickerViewDidChangeRotating(self) + } + case .ended: + if let delegate = self.delegate { + delegate.stickerViewDidEndRotating(self) + } + default: + break + } + } + + @objc + func handleCloseGesture(_ recognizer: UITapGestureRecognizer) { + if let delegate = self.delegate { + delegate.stickerViewDidClose(self) + } + self.removeFromSuperview() + } + + @objc + func handleFlipGesture(_ recognizer: UITapGestureRecognizer) { + UIView.animate(withDuration: 0.3) { + self.contentView.transform = self.contentView.transform.scaledBy(x: -1, y: 1) + } + } + + @objc + func handleTapGesture(_ recognizer: UITapGestureRecognizer) { + if let delegate = self.delegate { + delegate.stickerViewDidTap(self) + } + } + + // MARK: - Private Methods + private func setEnableClose(_ enableClose:Bool) { + self.closeImageView.isHidden = !enableClose + self.closeImageView.isUserInteractionEnabled = enableClose + } + + private func setEnableRotate(_ enableRotate:Bool) { + self.rotateImageView.isHidden = !enableRotate + self.rotateImageView.isUserInteractionEnabled = enableRotate + } + + private func setEnableFlip(_ enableFlip:Bool) { + self.flipImageView.isHidden = !enableFlip + self.flipImageView.isUserInteractionEnabled = enableFlip + } +} + +extension StickerView: UIGestureRecognizerDelegate { + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool { + /** + * ref: http://stackoverflow.com/questions/19095165/should-superviews-gesture-cancel-subviews-gesture-in-ios-7/ + * + * The `gestureRecognizer` would be either closeGestureRecognizer or rotateGestureRecognizer, + * `otherGestureRecognizer` should work only when `gestureRecognizer` is failed. + * So, we always return YES here. + */ + return true + } +} diff --git a/MiniScanner/Extensions/LogoAnimationView/UIView+Constraints.swift b/MiniScanner/Extensions/LogoAnimationView/UIView+Constraints.swift new file mode 100755 index 0000000..992e1c7 --- /dev/null +++ b/MiniScanner/Extensions/LogoAnimationView/UIView+Constraints.swift @@ -0,0 +1,21 @@ +// +// UIView+Constraints.swift +// AnimatedGifLaunchScreen-Example +// +// Created by Amer Hukic on 13/09/2018. +// Copyright © 2018 Amer Hukic. All rights reserved. +// + +import UIKit + +extension UIView { + + func pinEdgesToSuperView() { + guard let superView = superview else { return } + translatesAutoresizingMaskIntoConstraints = false + topAnchor.constraint(equalTo: superView.topAnchor).isActive = true + leftAnchor.constraint(equalTo: superView.leftAnchor).isActive = true + bottomAnchor.constraint(equalTo: superView.bottomAnchor).isActive = true + rightAnchor.constraint(equalTo: superView.rightAnchor).isActive = true + } +} diff --git a/MiniScanner/Extensions/MyExtention.swift b/MiniScanner/Extensions/MyExtention.swift new file mode 100755 index 0000000..2c38189 --- /dev/null +++ b/MiniScanner/Extensions/MyExtention.swift @@ -0,0 +1,791 @@ +import UIKit +import Foundation +import CoreLocation +import QuartzCore +import CoreGraphics +import SystemConfiguration +import TLPhotoPicker + +let SCREEN_WIDTH = UIScreen.main.bounds.width +let SCREEN_HEIGHT = UIScreen.main.bounds.height +let storyBoard = UIStoryboard.init(name: "Main", bundle: nil) +let appDelegate = UIApplication.shared.delegate as! AppDelegate + +let BANNER_ADID = "ca-app-pub-3940256099942544/2934735716" +let FULL_ADID = "ca-app-pub-3940256099942544/4411468910" +let APPOPENADID = "ca-app-pub-3940256099942544/5662855259" +let APP_NATIVE = "ca-app-pub-3940256099942544/3986624511" + +let appID = "app ID" +let devURL = "developer URL" +let Mail_ID = "support mail" +var RateURL : String = "app URL" + +var AppName = "Cam Scanner" +var PDFFileName = "FinalPDF" + +let ShadowColor = UIColor.init(named: "ShadowColor")! +let FontColor = UIColor.init(named: "FontColor")! +let BGColor = UIColor.init(named: "BGColor")! +let ThemeColor = UIColor.init(named: "ThemeColor")! + +var bottomPadding: CGFloat = UIApplication.shared.keyWindow?.safeAreaInsets.bottom ?? 0.0 +var topPadding: CGFloat = UIApplication.shared.keyWindow?.safeAreaInsets.top ?? 0.0 + +class MyFunc: NSObject +{ + func convertImageToBase64(image: UIImage) -> String { + let imageData = image.pngData()! + return imageData.base64EncodedString(options: Data.Base64EncodingOptions.lineLength64Characters) + } + + func convertBase64ToImage(imageString: String) -> UIImage { + let imageData = Data(base64Encoded: imageString, options: Data.Base64DecodingOptions.ignoreUnknownCharacters)! + return UIImage(data: imageData)! + } +} + +class UserDefaultMgr +{ + class func setSortType(strId: Int) + { + UserDefaults.standard.setValue(strId, forKey: "sortType") + UserDefaults.standard.synchronize() + } + class func getSortType() -> Int{ + if UserDefaults.standard.object(forKey: "sortType") == nil{ + return 0 + } + return UserDefaults.standard.value(forKey: "sortType") as! Int + } + + + class func getIsDoc4Time() -> Int{ + if UserDefaults.standard.object(forKey: "ad_DocCount") == nil{ + return 0 + } + return UserDefaults.standard.value(forKey: "ad_DocCount") as! Int + } + class func setIsDoc4Time(strId: Int) + { + UserDefaults.standard.setValue(strId, forKey: "ad_DocCount") + UserDefaults.standard.synchronize() + } + + class func getIsOCROneTime() -> Int{ + if UserDefaults.standard.object(forKey: "ad_OCRcount") == nil{ + return 0 + } + return UserDefaults.standard.value(forKey: "ad_OCRcount") as! Int + } + class func setIsOCROneTime(strId: Int) + { + UserDefaults.standard.setValue(strId, forKey: "ad_OCRcount") + UserDefaults.standard.synchronize() + } + + class func setIsChangeLayout(type: Bool){ + UserDefaults.standard.setValue(type, forKey: "isChangeLayout") + UserDefaults.standard.synchronize() + } + class func getIsChangeLayout() -> Bool{ + if UserDefaults.standard.object(forKey: "isChangeLayout") == nil{ + setIsChangeLayout(type: false) + return false + } + return UserDefaults.standard.value(forKey: "isChangeLayout") as! Bool + } + + class func setIsPasscode(type: Bool){ + UserDefaults.standard.setValue(type, forKey: "isPasscode") + UserDefaults.standard.synchronize() + } + + class func getIsPasscode() -> Bool{ + if UserDefaults.standard.object(forKey: "isPasscode") == nil{ + setIsPasscode(type: false) + return false + } + return UserDefaults.standard.value(forKey: "isPasscode") as! Bool + } + + class func setIsFaceID(type: Bool){ + UserDefaults.standard.setValue(type, forKey: "isFaceID") + UserDefaults.standard.synchronize() + } + + class func getIsFaceID() -> Bool{ + if UserDefaults.standard.object(forKey: "isFaceID") == nil{ + setIsFaceID(type: false) + return false + } + return UserDefaults.standard.value(forKey: "isFaceID") as! Bool + } + + + class func setIsTouchID(type: Bool){ + UserDefaults.standard.setValue(type, forKey: "isTouchID") + UserDefaults.standard.synchronize() + } + + class func getIsTouchID() -> Bool{ + if UserDefaults.standard.object(forKey: "isTouchID") == nil{ + setIsTouchID(type: false) + return false + } + return UserDefaults.standard.value(forKey: "isTouchID") as! Bool + } + +} + + +let aloaderSpinnerMarginSide : CGFloat = 35.0 +let aloaderSpinnerMarginTop : CGFloat = 20.0 +let aloaderTitleMargin : CGFloat = 5.0 + +let maxCount = 6 + + +open class ProcessLoader : UIView { + + fileprivate var coverView : UIView? + fileprivate var titleLabel : UILabel? + fileprivate var loadingView : SwiftLoadingView? + fileprivate var animated : Bool = true + fileprivate var canUpdated = false + fileprivate var title: String? + fileprivate var speed = 1 + + fileprivate var config : Config = Config() { + didSet { + self.loadingView?.config = config + } + } + + @objc func rotated(_ notification: Notification) { + + let loader = ProcessLoader.sharedInstance + + let height : CGFloat = UIScreen.main.bounds.size.height + let width : CGFloat = UIScreen.main.bounds.size.width + let center : CGPoint = CGPoint(x: width / 2.0, y: height / 2.0) + + loader.center = center + loader.coverView?.frame = UIScreen.main.bounds + } + + override open var frame : CGRect { + didSet { + self.update() + } + } + + class var sharedInstance: ProcessLoader { + struct Singleton { + static let instance = ProcessLoader(frame: CGRect(origin: CGPoint(x: 0,y: 0),size: CGSize(width: Config().size,height: Config().size))) + } + return Singleton.instance + } + + open class func show(animated: Bool) { + self.show(title: nil, animated: animated) + } + + open class func show(title: String?, animated : Bool) { + + let currentWindow : UIWindow = UIApplication.shared.keyWindow! + + let loader = ProcessLoader.sharedInstance + loader.canUpdated = true + loader.animated = animated + loader.title = title + loader.update() + + let height : CGFloat = UIScreen.main.bounds.size.height + let width : CGFloat = UIScreen.main.bounds.size.width + let center : CGPoint = CGPoint(x: width / 2.0, y: height / 2.0) + + loader.center = center + + if (loader.superview == nil) { + loader.coverView = UIView(frame: currentWindow.bounds) + loader.coverView?.backgroundColor = loader.config.foregroundColor.withAlphaComponent(loader.config.foregroundAlpha) + + currentWindow.addSubview(loader.coverView!) + currentWindow.addSubview(loader) + loader.start() + } + } + + open class func hide() { + + let loader = ProcessLoader.sharedInstance + NotificationCenter.default.removeObserver(loader) + + loader.stop() + } + + public class func setConfig(config : Config) { + let loader = ProcessLoader.sharedInstance + loader.config = config + loader.frame = CGRect(origin: CGPoint(x: 0, y: 0),size: CGSize(width: loader.config.size, height: loader.config.size)) + } + + private func setup() { + self.alpha = 0 + self.update() + } + + private func start() { + self.loadingView?.start() + + if (self.animated) { + UIView.animate(withDuration: 0.3, animations: { () -> Void in + self.alpha = 1 + }, completion: { (finished) -> Void in + + }); + } else { + self.alpha = 1 + } + } + + private func stop() { + + DispatchQueue.main.async { + if (self.animated) { + UIView.animate(withDuration: 0.3, animations: { () -> Void in + self.alpha = 0 + }, completion: { (finished) -> Void in + self.removeFromSuperview() + self.coverView?.removeFromSuperview() + self.loadingView?.stop() + }); + } else { + self.alpha = 0 + self.removeFromSuperview() + self.coverView?.removeFromSuperview() + self.loadingView?.stop() + } + } + } + + private func update() { + self.backgroundColor = self.config.backgroundColor + self.layer.cornerRadius = self.config.cornerRadius + let loadingViewSize = self.frame.size.width - (aloaderSpinnerMarginSide * 2) + + if (self.loadingView == nil) { + self.loadingView = SwiftLoadingView(frame: self.frameForSpinner()) + self.addSubview(self.loadingView!) + } else { + self.loadingView?.frame = self.frameForSpinner() + } + + if (self.titleLabel == nil) { + self.titleLabel = UILabel(frame: CGRect(origin: CGPoint(x: aloaderTitleMargin, y: aloaderSpinnerMarginTop + loadingViewSize), size: CGSize(width: self.frame.width - aloaderTitleMargin*2, height: 42.0))) + self.addSubview(self.titleLabel!) + self.titleLabel?.numberOfLines = 1 + self.titleLabel?.textAlignment = NSTextAlignment.center + self.titleLabel?.adjustsFontSizeToFitWidth = true + } else { + self.titleLabel?.frame = CGRect(origin: CGPoint(x: aloaderTitleMargin, y: aloaderSpinnerMarginTop + loadingViewSize), size: CGSize(width: self.frame.width - aloaderTitleMargin*2, height: 42.0)) + } + + self.titleLabel?.font = self.config.titleTextFont + self.titleLabel?.textColor = self.config.titleTextColor + self.titleLabel?.text = self.title + + self.titleLabel?.isHidden = self.title == nil + } + + func frameForSpinner() -> CGRect { + let loadingViewSize = self.frame.size.width - (aloaderSpinnerMarginSide * 2) + + if (self.title == nil) { + let yOffset = (self.frame.size.height - loadingViewSize) / 2 + return CGRect(origin: CGPoint(x: aloaderSpinnerMarginSide, y: yOffset), size: CGSize(width: loadingViewSize, height: loadingViewSize)) + } + return CGRect(origin: CGPoint(x: aloaderSpinnerMarginSide, y: aloaderSpinnerMarginTop), size: CGSize(width: loadingViewSize, height: loadingViewSize)) + } + + override init(frame: CGRect) { + super.init(frame: frame) + self.setup() + } + + required public init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + } + + class SwiftLoadingView : UIView { + + fileprivate var speed : Int? + fileprivate var lineWidth : Float? + fileprivate var lineTintColor : UIColor? + fileprivate var backgroundLayer : CAShapeLayer? + fileprivate var isSpinning : Bool? + + var config : Config = Config() { + didSet { + self.update() + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + self.setup() + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + } + + func setup() { + self.backgroundColor = UIColor.clear + self.lineWidth = fmaxf(Float(self.frame.size.width) * 0.025, 1) + + self.backgroundLayer = CAShapeLayer() + self.backgroundLayer?.strokeColor = self.config.spinnerColor.cgColor + self.backgroundLayer?.fillColor = self.backgroundColor?.cgColor + self.backgroundLayer?.lineCap = CAShapeLayerLineCap.round + self.backgroundLayer?.lineWidth = CGFloat(self.lineWidth!) + self.layer.addSublayer(self.backgroundLayer!) + } + + func update() { + self.lineWidth = self.config.spinnerLineWidth + self.speed = self.config.speed + + self.backgroundLayer?.lineWidth = CGFloat(self.lineWidth!) + self.backgroundLayer?.strokeColor = self.config.spinnerColor.cgColor + } + + override func draw(_ rect: CGRect) { + self.backgroundLayer?.frame = self.bounds + } + + func drawBackgroundCircle(_ partial : Bool) { + let startAngle : CGFloat = .pi / CGFloat(2.0) + var endAngle : CGFloat = (2.0 * .pi) + startAngle + + let center : CGPoint = CGPoint(x: self.bounds.size.width / 2,y: self.bounds.size.height / 2) + let radius : CGFloat = (CGFloat(self.bounds.size.width) - CGFloat(self.lineWidth!)) / CGFloat(2.0) + + let processBackgroundPath : UIBezierPath = UIBezierPath() + processBackgroundPath.lineWidth = CGFloat(self.lineWidth!) + + if (partial) { + endAngle = (1.8 * .pi) + startAngle + } + + processBackgroundPath.addArc(withCenter: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true) + self.backgroundLayer?.path = processBackgroundPath.cgPath; + } + + func start() { + self.isSpinning? = true + self.drawBackgroundCircle(true) + + let rotationAnimation : CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.z") + rotationAnimation.toValue = NSNumber(value: .pi * 2.0) + rotationAnimation.duration = 1; + rotationAnimation.isCumulative = true; + rotationAnimation.repeatCount = HUGE; + self.backgroundLayer?.add(rotationAnimation, forKey: "rotationAnimation") + } + + func stop() { + self.drawBackgroundCircle(false) + self.backgroundLayer?.removeAllAnimations() + self.isSpinning? = false + } + } + + public struct Config { + public var size : CGFloat = 120.0 + public var spinnerColor = BGColor + public var spinnerLineWidth :Float = 1.0 + public var titleTextColor = UIColor.black + public var speed :Int = 1 + public var titleTextFont : UIFont = UIFont.boldSystemFont(ofSize: 16.0) + public var backgroundColor = FontColor + public var foregroundColor = UIColor.clear + public var foregroundAlpha:CGFloat = 0.0 + public var cornerRadius : CGFloat = 10.0 + public init() {} + } +} + +extension UIView { + + func roundCorners(corners: UIRectCorner, radius: CGFloat) { + let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) + let mask = CAShapeLayer() + mask.path = path.cgPath + layer.mask = mask + } + + func addShadow(offset: CGSize, color: UIColor, radius: CGFloat, opacity: Float) { + layer.masksToBounds = false + layer.shadowOffset = offset + layer.shadowColor = color.cgColor + layer.shadowRadius = radius + layer.shadowOpacity = opacity + + let backgroundCGColor = backgroundColor?.cgColor + backgroundColor = nil + layer.backgroundColor = backgroundCGColor + } + + + func addFixShadow() { + layer.masksToBounds = false + layer.shadowOffset = CGSize.init(width: 2.0, height: 2.0) + layer.shadowColor = ShadowColor.cgColor + layer.shadowRadius = 4.0 + layer.shadowOpacity = 0.5 + + let backgroundCGColor = backgroundColor?.cgColor + backgroundColor = nil + layer.backgroundColor = backgroundCGColor + } +} + +extension Array { + mutating func remove(at indexes: [Int]) { + for index in indexes.sorted(by: >) { + remove(at: index) + } + } +} + +extension Sequence where Element: Hashable { + func uniqued() -> [Element] { + var set = Set<Element>() + return filter { set.insert($0).inserted } + } +} + +extension UIViewController { + + func showAlertWithTitle( alertTitle : String , msg:String ) + { + let alert = UIAlertController(title:alertTitle, message: msg, preferredStyle: .alert) + let action = UIAlertAction(title: "OK", style: .cancel, handler: nil) + alert.addAction(action) + self.present(alert, animated: true, completion: nil) + + } + + func OpenPhotosPicker(_ self : UIViewController){ + + let TLController = TLPhotosPickerViewController() + TLController.delegate = self as? TLPhotosPickerViewControllerDelegate + TLController.didExceedMaximumNumberOfSelection = { [weak self] (picker) in + + let alert = UIAlertController(title: "", message: "Exceed Maximum Number Of Selection", preferredStyle: .alert) + alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil)) + self!.present(alert, animated: true, completion: nil) + } + + var configure = TLPhotosPickerConfigure() + configure.numberOfColumn = 3 + configure.usedCameraButton = false + configure.mediaType = .image + configure.maxSelectedAssets = 50 + TLController.configure = configure + TLController.selectedAssets.removeAll() + TLController.logDelegate = self as? TLPhotosPickerLogDelegate + + if let popoverController = TLController.popoverPresentationController { + popoverController.sourceView = self.view + popoverController.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0) + } + TLController.modalPresentationStyle = .fullScreen + self.present(TLController, animated: true, completion: nil) + } +} + + +extension UIApplication +{ + class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? { + if let navigationController = controller as? UINavigationController { + return topViewController(controller: navigationController.visibleViewController) + } + if let tabController = controller as? UITabBarController { + if let selected = tabController.selectedViewController { + return topViewController(controller: selected) + } + } + if let presented = controller?.presentedViewController { + return topViewController(controller: presented) + } + return controller + } + + class func getTopViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? { + + if let nav = base as? UINavigationController { + return getTopViewController(base: nav.visibleViewController) + + } else if let tab = base as? UITabBarController, let selected = tab.selectedViewController { + return getTopViewController(base: selected) + + } else if let presented = base?.presentedViewController { + return getTopViewController(base: presented) + } + return base + } +} + + +extension UIColor { + + public convenience init?(hexString: String) { + var cString: String = hexString.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased() + + if (cString.hasPrefix("#")) { + if let range = cString.range(of: cString) { + cString = cString.substring(from: cString.index(range.lowerBound, offsetBy: 1)) + } + } + + if ((cString.count) != 6) { + self.init(white: 0.2, alpha: 1) + return + } + + var rgbValue: UInt32 = 0 + Scanner(string: cString).scanHexInt32(&rgbValue) + + self.init( + red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, + green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, + blue: CGFloat(rgbValue & 0x0000FF) / 255.0, + alpha: CGFloat(1.0) + ) + } +} + +extension UIView { + + var height:CGFloat{return self.bounds.size.height} + var width:CGFloat{return self.bounds.size.width} + var x:CGFloat{return self.frame.origin.x} + var y:CGFloat{return self.frame.origin.y} + + func MoveToXwithDuration(toX:CGFloat,duration:Double) { + UIView.animate(withDuration: duration) { + self.frame.origin.x = toX + } + } + + func MoveToYwithDuration(toY:CGFloat,duration:Double) { + + UIView.animate(withDuration: duration) { + self.frame.origin.y = toY + } + } + + @IBInspectable + var cornerRadiuss: CGFloat { + get { + return layer.cornerRadius + } + set { + layer.cornerRadius = newValue + } + } + + @IBInspectable + var borderWidth: CGFloat { + get + { + return layer.borderWidth + } + set + { + layer.borderWidth = newValue + } + } + + @IBInspectable + var borderColor: UIColor? { + get { + if let color = layer.borderColor { + return UIColor(cgColor: color) + } + return nil + } + set { + if let color = newValue { + layer.borderColor = color.cgColor + } else { + layer.borderColor = nil + } + } + } + + //FIND The parent view from UIVIEW + var parentViewController: UIViewController? { + var parentResponder: UIResponder? = self + while parentResponder != nil { + parentResponder = parentResponder!.next + if let viewController = parentResponder as? UIViewController { + return viewController + } + } + return nil + } + + func TakeScreenshot() -> UIImage { + + UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, UIScreen.main.scale) + drawHierarchy(in: self.bounds, afterScreenUpdates: true) + let image = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + if (image != nil) + { + return image! + } + return UIImage() + } +} + +extension Int +{ + var FloatValue:CGFloat{return CGFloat(self)} + var DoubleValue:Double{return Double(self)} +} + + +extension UIImage{ + + var height:CGFloat{return self.size.height} + var width:CGFloat{return self.size.width} + + func resizeImage(targetSize: CGSize) -> UIImage? { + let size = self.size + + let widthRatio = targetSize.width / size.width + let heightRatio = targetSize.height / size.height + + // Figure out what our orientation is, and use that to form the rectangle + var newSize: CGSize + if(widthRatio > heightRatio) { + newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio) + } else { + newSize = CGSize(width: size.width * widthRatio, height: size.height * widthRatio) + } + + // This is the rect that we've calculated out and this is what is actually used below + let rect = CGRect(origin: .zero, size: newSize) + + // Actually do the resizing to the rect using the ImageContext stuff + UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0) + self.draw(in: rect) + let newImage = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + + return newImage + } + + func BlurImage(value:NSNumber) -> UIImage { + + let context = CIContext(options: [CIContextOption.useSoftwareRenderer:true]) + let CIImage = CoreImage.CIImage(image:self) + let blurFilter = CIFilter(name: "CIGaussianBlur") + blurFilter?.setValue(CIImage, forKey: kCIInputImageKey) + blurFilter?.setValue(value, forKey: "inputRadius") + let imageRef = context.createCGImage((blurFilter?.outputImage)!, from: (CIImage?.extent)!) + + let newImage = UIImage(cgImage:imageRef!) + return newImage + } + + func fixImageOrientation()->UIImage { + UIGraphicsBeginImageContext(self.size) + self.draw(at: .zero) + let newImage = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + return newImage ?? self + } +} + +extension String +{ + var toInteger:Int?{ + get{ + return Int(self) + } + } + + var toDouble:Double?{ + get{ + return Double(self) + } + } + + var toFloat:Float?{ + get{ + return Float(self) + } + } + + var toBool:Bool?{ + get + { + if self == "1" + { + return "1" == self ? true : false + } + return "true" == self ? true : false + } + } +} + +extension CGFloat +{ + var toInt:Int?{ + get{ + return Int(self) + } + } +} + + +struct ImageHeaderData{ + static var PNG: [UInt8] = [0x89] + static var JPEG: [UInt8] = [0xFF] + static var GIF: [UInt8] = [0x47] + static var TIFF_01: [UInt8] = [0x49] + static var TIFF_02: [UInt8] = [0x4D] +} + +enum ImageFormat{ + case Unknown, PNG, JPEG, GIF, TIFF +} + + +extension NSData{ + var imageFormat: ImageFormat{ + var buffer = [UInt8](repeating: 0, count: 1) + self.getBytes(&buffer, range: NSRange(location: 0,length: 1)) + if buffer == ImageHeaderData.PNG + { + return .PNG + } else if buffer == ImageHeaderData.JPEG + { + return .JPEG + } else if buffer == ImageHeaderData.GIF + { + return .GIF + } else if buffer == ImageHeaderData.TIFF_01 || buffer == ImageHeaderData.TIFF_02{ + return .TIFF + } else{ + return .Unknown + } + } +} diff --git a/MiniScanner/Modules/EditViewController/CustomCells/PagerImageCollectionViewCell/PagerImageCollectionViewCell.swift b/MiniScanner/Modules/EditViewController/CustomCells/PagerImageCollectionViewCell/PagerImageCollectionViewCell.swift index ea9c7ae..8c2661f 100644 --- a/MiniScanner/Modules/EditViewController/CustomCells/PagerImageCollectionViewCell/PagerImageCollectionViewCell.swift +++ b/MiniScanner/Modules/EditViewController/CustomCells/PagerImageCollectionViewCell/PagerImageCollectionViewCell.swift @@ -7,7 +7,6 @@ // import UIKit -import FSPagerView class PagerImageCollectionViewCell: UICollectionViewCell { // MARK: - Outlets @IBOutlet weak var cellImageView: UIImageView! diff --git a/MiniScanner/Modules/EditViewController/CustomViews/BannerView.swift b/MiniScanner/Modules/EditViewController/CustomViews/BannerView.swift index ce49434..4197331 100644 --- a/MiniScanner/Modules/EditViewController/CustomViews/BannerView.swift +++ b/MiniScanner/Modules/EditViewController/CustomViews/BannerView.swift @@ -7,12 +7,12 @@ // import UIKit -import FSPagerView protocol BannerViewDelegate { func updateSelectedIndex(index: Int) func delete(index: Int) func preview(index: Int) + func update(session: MultiPageScanSession?) } class BannerView: UIView { @@ -28,6 +28,10 @@ class BannerView: UIView { } } + var signatureImage: UIImage! + var signAllDoc: Bool = false + var donePressed: Bool = false + var isEditing: Bool = false fileprivate let transformerTypes: [FSPagerViewTransformerType] = [.crossFading, .zoomOut, .depth, @@ -37,6 +41,7 @@ class BannerView: UIView { .invertedFerrisWheel, .coverFlow, .cubic] + var options:ImageScannerOptions! fileprivate var typeIndex = 0 { didSet { @@ -67,7 +72,7 @@ class BannerView: UIView { // MARK: - Properties - var scanSession:MultiPageScanSession? + var scanSession: MultiPageScanSession? // MARK: - Init @@ -101,7 +106,7 @@ class BannerView: UIView { // MARK: - Methods private func clearUI() { view.backgroundColor = .clear - + self.options = ImageScannerOptions() } @@ -110,6 +115,28 @@ class BannerView: UIView { self.scanSession = session clearUI() } + func reloadSignature(with : UIImage, isAll: Bool = false) { + self.signatureImage = with + self.signAllDoc = isAll + pagerView.reloadData() + } + + func saveSignarure() { + donePressed = true + let cell = pagerView.cellForItem(at: pagerView.currentIndex) + cell?.selectedStickerView1?.showEditing = false + let image = cell?.contentView.TakeScreenshot() + cell?.selectedStickerView1?.removeFromSuperview() + self.scanSession?.remove(index: pagerView.currentIndex) + + let scannedItem = ScannedItem(originalImage: image ?? UIImage(), quad: nil) + scannedItem.colorOption = self.options.defaultColorRenderOption + scannedItem.rotation = 180 + scannedItem.render { (_) in } + self.scanSession?.add(item: scannedItem, at: pagerView.currentIndex) + cell?.imageView?.image = image + delegate?.update(session: self.scanSession) + } } @@ -122,16 +149,30 @@ extension BannerView: FSPagerViewDataSource,FSPagerViewDelegate { let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index) cell.index = index cell.delegate = self + if let item = scanSession?.scannedItems[index] { cell.imageView?.image = item.renderedImage?.retrieveImage() } + if isEditing { + if signAllDoc { + if cell.sign == nil { + cell.sign = signatureImage + } + } else { + if index == pagerView.currentIndex { + if cell.sign == nil { + cell.sign = signatureImage + } + } + } + } + return cell } func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int) { delegate?.updateSelectedIndex(index: targetIndex) } - } extension BannerView: FSPagerViewCellDelegate { diff --git a/MiniScanner/Modules/EditViewController/CustomViews/BannerView.xib b/MiniScanner/Modules/EditViewController/CustomViews/BannerView.xib index e6de6b7..e2b0840 100644 --- a/MiniScanner/Modules/EditViewController/CustomViews/BannerView.xib +++ b/MiniScanner/Modules/EditViewController/CustomViews/BannerView.xib @@ -20,7 +20,7 @@ <rect key="frame" x="0.0" y="0.0" width="393" height="645"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> - <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Qub-hE-fqd" customClass="FSPagerView" customModule="FSPagerView"> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Qub-hE-fqd" customClass="FSPagerView" customModule="MiniScanner" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="393" height="645"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/> </view> diff --git a/MiniScanner/Modules/EditViewController/EditViewController.swift b/MiniScanner/Modules/EditViewController/EditViewController.swift index 8b133e5..04f7f75 100644 --- a/MiniScanner/Modules/EditViewController/EditViewController.swift +++ b/MiniScanner/Modules/EditViewController/EditViewController.swift @@ -11,6 +11,7 @@ import LNExtensionExecutor import NBBottomSheet import QuickLook import AVKit +import EPSignature public protocol EditViewControllerDelegate: NSObjectProtocol { func editViewController(_ editViewController: EditViewController, finished session: MultiPageScanSession) @@ -32,7 +33,10 @@ public class EditViewController: UIViewController { var selectedFolder: AppConfigurator.Folder? private var localFileManager: LocalFileManager? private var fileURL: URL? + var options:ImageScannerOptions! + var signatureImage = UIImage() + var isAll: Bool = false lazy private var activityIndicator: UIActivityIndicatorView = { let activityIndicator = UIActivityIndicatorView(style: .large) activityIndicator.color = .white @@ -41,8 +45,6 @@ public class EditViewController: UIViewController { return activityIndicator }() - - // MARK: - LifeCycle public override func viewDidLoad() { super.viewDidLoad() @@ -57,7 +59,32 @@ public class EditViewController: UIViewController { continueButton.setTitleColor(.white, for: .normal) continueButton.layer.cornerRadius = 10 localFileManager = LocalFileManager() - + options = ImageScannerOptions() + } + + @objc func onTouchDoneButton() { + self.banner.donePressed = true + if let items = scanSession?.scannedItems { + let cell = banner.pagerView.cellForItemat(index: self.banner.pagerView.currentIndex) + cell?.selectedStickerView1?.showEditing = false + + cell?.trashButton.isHidden = true + cell?.previewButton.isHidden = true + let image = cell?.contentView.TakeScreenshot() + cell?.trashButton.isHidden = false + cell?.previewButton.isHidden = false + cell?.selectedStickerView1?.removeFromSuperview() + + if let img = image { + let scannedItem = ScannedItem(originalImage: img, renderImage: img, quad: nil) + scannedItem.colorOption = self.options.defaultColorRenderOption + scannedItem.rotation = 180 + self.scanSession = self.scanSession?.replaceAndGet(item: scannedItem, at: banner.pagerView.currentIndex) + self.banner.scanSession = self.scanSession + self.banner.pagerView.reloadData() + updatePageLabel() + } + } } @IBAction func backIndex(_ sender: UIButton) { @@ -94,7 +121,7 @@ public class EditViewController: UIViewController { let configuration = NBBottomSheetConfiguration(animationDuration: 0.4, sheetSize: .fixed(322)) let bottomSheetController = NBBottomSheetController(configuration: configuration) - bottomSheetController.present(popup, on: self) + bottomSheetController.present(popup, on: self) } public init(scanSession: MultiPageScanSession){ @@ -175,7 +202,7 @@ public class EditViewController: UIViewController { self.present(shareController, animated: true, completion: nil) self.activityIndicator.stopAnimating() } - + } // MARK: - TABBAR ACTION @@ -183,10 +210,20 @@ public class EditViewController: UIViewController { } + @IBAction func signatureTapped(_ sender: UIButton) { + let signatureVC = EPSignatureViewController(signatureDelegate: self, showsDate: true, showsSaveSignatureOption: true) + let nav = UINavigationController(rootViewController: signatureVC) + nav.modalPresentationStyle = .fullScreen + self.present(nav, animated: true, completion: nil) + } } // MARK: - BannerViewDelegate extension EditViewController: BannerViewDelegate { + func update(session: MultiPageScanSession?) { + self.scanSession = session + } + func preview(index: Int) { let previewController = PreviewImageViewController() if let image = scanSession?.scannedItems[index].renderedImage?.retrieveImage() { @@ -197,7 +234,7 @@ extension EditViewController: BannerViewDelegate { func delete(index: Int) { let alertController = UIAlertController(title: "Alert", message: "Are you sure you want to delete this image?", preferredStyle: .alert) - + let okAction = UIAlertAction(title: "Yes", style: .default) { (action) in self.scanSession?.remove(index: index) if index != 0 { @@ -215,11 +252,11 @@ extension EditViewController: BannerViewDelegate { } self.dismiss(animated: true) } - + let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (action) in self.dismiss(animated: true) } - + alertController.addAction(okAction) alertController.addAction(cancelAction) self.present(alertController, animated: true, completion: nil) @@ -232,7 +269,7 @@ extension EditViewController: BannerViewDelegate { private func saveFileAndShare(with: String, name: String) { activityIndicator.startAnimating() - + var images = [URL]() for index in 0..<(scanSession?.scannedItems.count ?? 0) { if let url = scanSession?.scannedItems[index].renderedImage { @@ -269,7 +306,7 @@ extension EditViewController: ShareSheetViewControllerDelegate { DispatchQueue.main.async { self.saveFileAndShare(with: ShareOptions.gmail, name: name) } - + } func printTapped() { @@ -303,8 +340,8 @@ extension EditViewController: ShareSheetViewControllerDelegate { let shareController = UIActivityViewController(activityItems: self.payload, applicationActivities: nil) self.present(shareController, animated: true, completion: nil) self.activityIndicator.stopAnimating() - - + + }) } } @@ -318,7 +355,7 @@ extension EditViewController: ShareSheetViewControllerDelegate { } } print("images: \(images)") - if let folder = selectedFolder { + if let folder = selectedFolder { PDFManager.createMultiPDFPage(from: images, localFileManager: localFileManager, folder: folder, name: name, { self.activityIndicator.stopAnimating() self.navigationController?.popViewController(animated: true) @@ -337,3 +374,48 @@ extension EditViewController: QLPreviewControllerDataSource { return fileURL! as QLPreviewItem } } + +// MARK: - EPSignatureDelegate +extension EditViewController: EPSignatureDelegate { + public func epSignature(_: EPSignatureViewController, didCancel error : NSError) { + print("User canceled") + } + + public func epSignature(_: EPSignatureViewController, didSign signatureImage : UIImage, boundingRect: CGRect) { + self.dismiss(animated: true) { + self.banner.donePressed = false + self.banner.isEditing = true + self.signatureImage = signatureImage + let alertController = UIAlertController(title: "", message: "Do you want to sign:", preferredStyle: .alert) + + let allAction = UIAlertAction(title: "All document", style: .default) { (action) in + self.banner.signatureImage = signatureImage + self.banner.signAllDoc = true + self.banner.pagerView.reloadData() + + let doneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.done, target: self, action: #selector(self.onTouchDoneButton)) + self.navigationItem.rightBarButtonItem = doneButton + self.dismiss(animated: true) + } + + let currentAction = UIAlertAction(title: "Current page", style: .default) { (action) in + self.banner.signatureImage = signatureImage + self.banner.signAllDoc = false + self.banner.pagerView.reloadData() + + let doneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.done, target: self, action: #selector(self.onTouchDoneButton)) + self.navigationItem.rightBarButtonItem = doneButton + self.dismiss(animated: true) + } + let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (action) in + self.banner.isEditing = false + self.dismiss(animated: true) + } + + alertController.addAction(allAction) + alertController.addAction(currentAction) + alertController.addAction(cancelAction) + self.present(alertController, animated: true, completion: nil) + } + } +} diff --git a/MiniScanner/Modules/EditViewController/EditViewController.xib b/MiniScanner/Modules/EditViewController/EditViewController.xib index 5c2a541..f6ecf3f 100644 --- a/MiniScanner/Modules/EditViewController/EditViewController.xib +++ b/MiniScanner/Modules/EditViewController/EditViewController.xib @@ -99,7 +99,7 @@ </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Direct Share" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontForContentSizeCategory="YES" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Kl7-O6-xwc"> - <rect key="frame" x="166" y="13" width="98.333333333333314" height="22"/> + <rect key="frame" x="171" y="13" width="88.333333333333314" height="22"/> <fontDescription key="fontDescription" name="Poppins-Medium" family="Poppins" pointSize="16"/> <nil key="textColor"/> <nil key="highlightedColor"/> @@ -228,6 +228,9 @@ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="1gC-XS-O2e"> <rect key="frame" x="0.0" y="0.0" width="82" height="90"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> + <connections> + <action selector="signatureTapped:" destination="-1" eventType="touchUpInside" id="oKV-wj-LNT"/> + </connections> </button> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> @@ -288,7 +291,7 @@ </constraints> </imageView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="edit" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qsI-va-wrT"> - <rect key="frame" x="0.0" y="52" width="82" height="24"/> + <rect key="frame" x="0.0" y="52" width="82" height="20"/> <fontDescription key="fontDescription" name="Poppins-Regular" family="Poppins" pointSize="17"/> <nil key="textColor"/> <nil key="highlightedColor"/> diff --git a/MiniScanner/Supporting Files/.DS_Store b/MiniScanner/Supporting Files/.DS_Store index 4305f7734bae3905870154284d7bffee466c2663..c2fa1916ae96cee75a48220af50e8511e972e506 100644 GIT binary patch delta 897 zcmb7CO-lk%6uqM@f+Wq<S}05u(L(&nigsxU1qFr??QGI%92jTR><bB9xT^?xd;da+ zxN^~=KhdV&(X!5)T$CA2GrYN%xpVHBd(UZZG}E(0BqY!CQ6drPI1Z04N2}~>h316$ zPP*?D=DQA8*p~27lJ@A3RFdhEHpw8Js#HPLaLdR-bcTvbr&Qh1jNFN4obYboxJ7KU zf_tHR;P%@ClYn1S&V;2&BE^IcS~F>8T4=KeudiG4J_+&^?SezWNq|wMA^=rH&Od;B zXQM|jPQIHLc!?}@V0Z3@XJsuG6r<~_H$kzs9*YFU_-dSq)5~=W4KyX1$r;6xNl2+z zYqUjUYiqD3zWm<N!*k*%vOa3&qLH@%9fd3vzW(Yl`2N^X-IV+yQ_(d;SMa%j6Mz|1 zQ;-all#uDBidopCf=V8e@w!4;+D1jfn@^JzhUCJ;LvroG9Vxnk%rZJu7YAzp?ymrE z!NM~yokn|X%FaiEl_&5>aXWX)Z+7PN?|W>YCST%Z3=!dxmHhXt=js2;l}QVh7#eff Fl^?Nt!mj`T delta 118 zcmZn(XmOBWU|?W$DortDU;r^WfEYvza8E20o2aMAD6uhMH$S7qW*z~3rpZ%8B{we+ zl40KbL-Z8m<T+Aj1(|_rfk1*ANVtNuZ7lrGJegl5kb@Co7{lavo@tZ4M2ld0P5}Uo CWg9U7 diff --git a/MiniScanner/Supporting Files/Assets.xcassets/close.imageset/Contents.json b/MiniScanner/Supporting Files/Assets.xcassets/close.imageset/Contents.json new file mode 100644 index 0000000..acb0efb --- /dev/null +++ b/MiniScanner/Supporting Files/Assets.xcassets/close.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "close.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MiniScanner/Supporting Files/Assets.xcassets/close.imageset/close.png b/MiniScanner/Supporting Files/Assets.xcassets/close.imageset/close.png new file mode 100644 index 0000000000000000000000000000000000000000..97b961b4d8697e22a5b53dd3e5124af5c850acfb GIT binary patch literal 3262 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 literal 0 HcmV?d00001 diff --git a/MiniScanner/Supporting Files/Assets.xcassets/resize.imageset/Contents.json b/MiniScanner/Supporting Files/Assets.xcassets/resize.imageset/Contents.json new file mode 100644 index 0000000..c83c48d --- /dev/null +++ b/MiniScanner/Supporting Files/Assets.xcassets/resize.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "resize.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MiniScanner/Supporting Files/Assets.xcassets/resize.imageset/resize.png b/MiniScanner/Supporting Files/Assets.xcassets/resize.imageset/resize.png new file mode 100644 index 0000000000000000000000000000000000000000..911f9384ea8897e410975ab8632a475ce2d60d2d GIT binary patch literal 2599 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 literal 0 HcmV?d00001 diff --git a/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSession.swift b/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSession.swift index 86039cf..fbc9168 100644 --- a/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSession.swift +++ b/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSession.swift @@ -38,6 +38,13 @@ public class ScannedItem{ self.colorOption = colorOption } + public init(originalImage:UIImage, renderImage: UIImage, quad:Quadrilateral? = nil, colorOption:ScannedItemColorOption = .color) { + self.originalImage = filePath().saveImage(image: originalImage.withFixedOrientation()) + self.quad = quad + self.colorOption = colorOption + self.renderedImage = filePath().saveImage(image: renderImage.withFixedOrientation()) + } + public func render(completion: @escaping (_ image:URL?)->Void){ ScannedItemRenderer().render(scannedItem: self) { (image) in self.renderedImage = self.filePath().saveImage(image: image?.withFixedOrientation()) @@ -62,10 +69,27 @@ public class MultiPageScanSession { self.scannedItems.append(item) } + public func add(item: ScannedItem, at: Int) { + self.scannedItems.insert(item, at: at) + } + public func remove(index:Int){ self.scannedItems.remove(at: index) } + public func replace(with item: ScannedItem, at: Int) { + if (scannedItems.indices.contains(at)) == true { + scannedItems[at] = item + } + } + + public func replaceAndGet(item: ScannedItem, at: Int) -> MultiPageScanSession{ + if (scannedItems.indices.contains(at)) == true { + scannedItems[at] = item + } + return self + } + } extension ScannedItem { diff --git a/MiniScanner/Supporting Files/Info.plist b/MiniScanner/Supporting Files/Info.plist index 328f2af..7648ba4 100644 --- a/MiniScanner/Supporting Files/Info.plist +++ b/MiniScanner/Supporting Files/Info.plist @@ -70,12 +70,5 @@ <array> <string>UIInterfaceOrientationPortrait</string> </array> - <key>UISupportedInterfaceOrientations~ipad</key> - <array> - <string>UIInterfaceOrientationLandscapeLeft</string> - <string>UIInterfaceOrientationLandscapeRight</string> - <string>UIInterfaceOrientationPortrait</string> - <string>UIInterfaceOrientationPortraitUpsideDown</string> - </array> </dict> </plist> diff --git a/MiniScanner/Supporting Files/LogoAnimationView/.DS_Store b/MiniScanner/Supporting Files/LogoAnimationView/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**<q8>++&mCkOWA81W14cNZ<zv;LbK1Poaz?KmsK2CSc!( z0ynLxE!0092;Krf2c+FF_Fe*7ECH>lEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0<F0fCPF1$Cyrb|F7^5{eNG?83~ZUUlGt@xh*qZDeu<Z%US-OSsOPv j)R!Z4KLME7ReXlK;d!wEw5GODWMKRea10D2@KpjYNUI8I literal 0 HcmV?d00001 diff --git a/MiniScanner/Supporting Files/LogoAnimationView/StickerView.swift b/MiniScanner/Supporting Files/LogoAnimationView/StickerView.swift new file mode 100755 index 0000000..e07326b --- /dev/null +++ b/MiniScanner/Supporting Files/LogoAnimationView/StickerView.swift @@ -0,0 +1,417 @@ +// +// StickerView.swift +// StickerView +// +// Created by Edgar Sia on 1/12/18. +// Copyright © 2018 Edgar Sia. All rights reserved. +// + +import UIKit + +enum StickerViewHandler:Int { + case close = 0 + case rotate + case flip +} + +enum StickerViewPosition:Int { + case topLeft = 0 + case topRight + case bottomLeft + case bottomRight +} + +@inline(__always) func CGRectGetCenter(_ rect:CGRect) -> CGPoint { + return CGPoint(x: rect.midX, y: rect.midY) +} + +@inline(__always) func CGRectScale(_ rect:CGRect, wScale:CGFloat, hScale:CGFloat) -> CGRect { + return CGRect(x: rect.origin.x, y: rect.origin.y, width: rect.size.width * wScale, height: rect.size.height * hScale) +} + +@inline(__always) func CGAffineTransformGetAngle(_ t:CGAffineTransform) -> CGFloat { + return atan2(t.b, t.a) +} + +@inline(__always) func CGPointGetDistance(point1:CGPoint, point2:CGPoint) -> CGFloat { + let fx = point2.x - point1.x + let fy = point2.y - point1.y + return sqrt(fx * fx + fy * fy) +} + +@objc protocol StickerViewDelegate { + @objc func stickerViewDidBeginMoving(_ stickerView: StickerView) + @objc func stickerViewDidChangeMoving(_ stickerView: StickerView) + @objc func stickerViewDidEndMoving(_ stickerView: StickerView) + @objc func stickerViewDidBeginRotating(_ stickerView: StickerView) + @objc func stickerViewDidChangeRotating(_ stickerView: StickerView) + @objc func stickerViewDidEndRotating(_ stickerView: StickerView) + @objc func stickerViewDidClose(_ stickerView: StickerView) + @objc func stickerViewDidTap(_ stickerView: StickerView) +} + +open class StickerView: UIView { + var delegate: StickerViewDelegate! + /// The contentView inside the sticker view. + var contentView:UIView! + /// Enable the close handler or not. Default value is YES. + var enableClose:Bool = true { + didSet { + if self.showEditing { + self.setEnableClose(self.enableClose) + } + } + } + /// Enable the rotate/resize handler or not. Default value is YES. + var enableRotate:Bool = true{ + didSet { + if self.showEditing { + self.setEnableRotate(self.enableRotate) + } + } + } + /// Enable the flip handler or not. Default value is YES. + var enableFlip:Bool = true + /// Show close and rotate/resize handlers or not. Default value is YES. + var showEditing:Bool = true { + didSet { + if self.showEditing { + self.setEnableClose(self.enableClose) + self.setEnableRotate(self.enableRotate) + self.setEnableFlip(self.enableFlip) + self.contentView?.layer.borderWidth = 1 + } + else { + self.setEnableClose(false) + self.setEnableRotate(false) + self.setEnableFlip(false) + self.contentView?.layer.borderWidth = 0 + } + } + } + + /// Minimum value for the shorter side while resizing. Default value will be used if not set. + private var _minimumSize:NSInteger = 0 + var minimumSize:NSInteger { + set { + _minimumSize = max(newValue, self.defaultMinimumSize) + } + get { + return _minimumSize + } + } + /// Color of the outline border. Default: brown color. + private var _outlineBorderColor:UIColor = .clear + var outlineBorderColor:UIColor { + set { + _outlineBorderColor = newValue + self.contentView?.layer.borderColor = _outlineBorderColor.cgColor + } + get { + return _outlineBorderColor + } + } + /// A convenient property for you to store extra information. + var userInfo:Any? + + + init(contentView: UIView) { + self.defaultInset = 11 + self.defaultMinimumSize = 4 * self.defaultInset + + var frame = contentView.frame + frame = CGRect(x: 0, y: 0, width: frame.size.width + CGFloat(self.defaultInset) * 2, height: frame.size.height + CGFloat(self.defaultInset) * 2) + super.init(frame: frame) + self.backgroundColor = UIColor.clear + self.addGestureRecognizer(self.moveGesture) + self.addGestureRecognizer(self.tapGesture) + + // Setup content view + self.contentView = contentView + self.contentView.center = CGRectGetCenter(self.bounds) + self.contentView.isUserInteractionEnabled = false + self.contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + self.contentView.layer.allowsEdgeAntialiasing = true + self.addSubview(self.contentView) + + // Setup editing handlers + self.setPosition(.topLeft, forHandler: .close) + self.addSubview(self.closeImageView) + self.setPosition(.bottomRight, forHandler: .rotate) + self.addSubview(self.rotateImageView) + self.setPosition(.bottomLeft, forHandler: .flip) + self.addSubview(self.flipImageView) + + self.showEditing = true + self.enableClose = true + self.enableRotate = true + self.enableFlip = false + + self.minimumSize = self.defaultMinimumSize + self.outlineBorderColor = .white + } + + required public init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func setImage(_ image:UIImage, forHandler handler:StickerViewHandler) { + switch handler { + case .close: + self.closeImageView.image = image + case .rotate: + self.rotateImageView.image = image + case .flip: + self.flipImageView.image = image + } + } + + func setPosition(_ position:StickerViewPosition, forHandler handler:StickerViewHandler) { + let origin = self.contentView.frame.origin + let size = self.contentView.frame.size + + var handlerView:UIImageView? + switch handler { + case .close: + handlerView = self.closeImageView + case .rotate: + handlerView = self.rotateImageView + case .flip: + handlerView = self.flipImageView + } + + switch position { + case .topLeft: + handlerView?.center = origin + handlerView?.autoresizingMask = [.flexibleRightMargin, .flexibleBottomMargin] + case .topRight: + handlerView?.center = CGPoint(x: origin.x + size.width, y: origin.y) + handlerView?.autoresizingMask = [.flexibleLeftMargin, .flexibleBottomMargin] + case .bottomLeft: + handlerView?.center = CGPoint(x: origin.x, y: origin.y + size.height) + handlerView?.autoresizingMask = [.flexibleRightMargin, .flexibleTopMargin] + case .bottomRight: + handlerView?.center = CGPoint(x: origin.x + size.width, y: origin.y + size.height) + handlerView?.autoresizingMask = [.flexibleLeftMargin, .flexibleTopMargin] + } + + handlerView?.tag = position.rawValue + } + + /** + * Customize handler's size + * + * @param size Handler's size + */ + func setHandlerSize(_ size:Int) { + if size <= 0 { + return + } + + self.defaultInset = NSInteger(round(Float(size) / 2)) + self.defaultMinimumSize = 4 * self.defaultInset + self.minimumSize = max(self.minimumSize, self.defaultMinimumSize) + + let originalCenter = self.center + let originalTransform = self.transform + var frame = self.contentView.frame + frame = CGRect(x: 0, y: 0, width: frame.size.width + CGFloat(self.defaultInset) * 2, height: frame.size.height + CGFloat(self.defaultInset) * 2) + + self.contentView.removeFromSuperview() + + self.transform = CGAffineTransform.identity + self.frame = frame + + self.contentView.center = CGRectGetCenter(self.bounds) + self.addSubview(self.contentView) + self.sendSubviewToBack(self.contentView) + + let handlerFrame = CGRect(x: 0, y: 0, width: self.defaultInset * 2, height: self.defaultInset * 2) + self.closeImageView.frame = handlerFrame + self.setPosition(StickerViewPosition(rawValue: self.closeImageView.tag)!, forHandler: .close) + self.rotateImageView.frame = handlerFrame + self.setPosition(StickerViewPosition(rawValue: self.rotateImageView.tag)!, forHandler: .rotate) + self.flipImageView.frame = handlerFrame + self.setPosition(StickerViewPosition(rawValue: self.flipImageView.tag)!, forHandler: .flip) + + self.center = originalCenter + self.transform = originalTransform + } + + /** + * Default value + */ + private var defaultInset:NSInteger + private var defaultMinimumSize:NSInteger + + /** + * Variables for moving view + */ + private var beginningPoint = CGPoint.zero + private var beginningCenter = CGPoint.zero + + /** + * Variables for rotating and resizing view + */ + private var initialBounds = CGRect.zero + private var initialDistance:CGFloat = 0 + private var deltaAngle:CGFloat = 0 + + private lazy var moveGesture = { + return UIPanGestureRecognizer(target: self, action: #selector(handleMoveGesture(_:))) + }() + private lazy var rotateImageView:UIImageView = { + let rotateImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20)) + rotateImageView.cornerRadiuss = 10 + rotateImageView.tintColor = UIColor.black + rotateImageView.contentMode = UIView.ContentMode.scaleAspectFit + rotateImageView.backgroundColor = UIColor.white + rotateImageView.isUserInteractionEnabled = true + rotateImageView.addGestureRecognizer(self.rotateGesture) + + return rotateImageView + }() + private lazy var rotateGesture = { + return UIPanGestureRecognizer(target: self, action: #selector(handleRotateGesture(_:))) + }() + private lazy var closeImageView:UIImageView = { + let closeImageview = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20)) + closeImageview.cornerRadiuss = 10 + closeImageview.tintColor = UIColor.black + closeImageview.contentMode = UIView.ContentMode.scaleAspectFit + closeImageview.backgroundColor = UIColor.white + closeImageview.isUserInteractionEnabled = true + closeImageview.addGestureRecognizer(self.closeGesture) + return closeImageview + }() + private lazy var closeGesture = { + return UITapGestureRecognizer(target: self, action: #selector(handleCloseGesture(_:))) + }() + private lazy var flipImageView:UIImageView = { + let flipImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: self.defaultInset * 2, height: self.defaultInset * 2)) + flipImageView.contentMode = UIView.ContentMode.scaleAspectFit + flipImageView.backgroundColor = UIColor.clear + flipImageView.isUserInteractionEnabled = true + flipImageView.addGestureRecognizer(self.flipGesture) + return flipImageView + }() + private lazy var flipGesture = { + return UITapGestureRecognizer(target: self, action: #selector(handleFlipGesture(_:))) + }() + private lazy var tapGesture = { + return UITapGestureRecognizer(target: self, action: #selector(handleTapGesture(_:))) + }() + // MARK: - Gesture Handlers + @objc + func handleMoveGesture(_ recognizer: UIPanGestureRecognizer) { + let touchLocation = recognizer.location(in: self.superview) + switch recognizer.state { + case .began: + self.beginningPoint = touchLocation + self.beginningCenter = self.center + if let delegate = self.delegate { + delegate.stickerViewDidBeginMoving(self) + } + case .changed: + self.center = CGPoint(x: self.beginningCenter.x + (touchLocation.x - self.beginningPoint.x), y: self.beginningCenter.y + (touchLocation.y - self.beginningPoint.y)) + if let delegate = self.delegate { + delegate.stickerViewDidChangeMoving(self) + } + case .ended: + self.center = CGPoint(x: self.beginningCenter.x + (touchLocation.x - self.beginningPoint.x), y: self.beginningCenter.y + (touchLocation.y - self.beginningPoint.y)) + if let delegate = self.delegate { + delegate.stickerViewDidEndMoving(self) + } + default: + break + } + } + + @objc + func handleRotateGesture(_ recognizer: UIPanGestureRecognizer) { + let touchLocation = recognizer.location(in: self.superview) + let center = self.center + + switch recognizer.state { + case .began: + self.deltaAngle = CGFloat(atan2f(Float(touchLocation.y - center.y), Float(touchLocation.x - center.x))) - CGAffineTransformGetAngle(self.transform) + self.initialBounds = self.bounds + self.initialDistance = CGPointGetDistance(point1: center, point2: touchLocation) + if let delegate = self.delegate { + delegate.stickerViewDidBeginRotating(self) + } + case .changed: + let angle = atan2f(Float(touchLocation.y - center.y), Float(touchLocation.x - center.x)) + let angleDiff = Float(self.deltaAngle) - angle + self.transform = CGAffineTransform(rotationAngle: CGFloat(-angleDiff)) + + var scale = CGPointGetDistance(point1: center, point2: touchLocation) / self.initialDistance + let minimumScale = CGFloat(self.minimumSize) / min(self.initialBounds.size.width, self.initialBounds.size.height) + scale = max(scale, minimumScale) + let scaledBounds = CGRectScale(self.initialBounds, wScale: scale, hScale: scale) + self.bounds = scaledBounds + self.setNeedsDisplay() + + if let delegate = self.delegate { + delegate.stickerViewDidChangeRotating(self) + } + case .ended: + if let delegate = self.delegate { + delegate.stickerViewDidEndRotating(self) + } + default: + break + } + } + + @objc + func handleCloseGesture(_ recognizer: UITapGestureRecognizer) { + if let delegate = self.delegate { + delegate.stickerViewDidClose(self) + } + self.removeFromSuperview() + } + + @objc + func handleFlipGesture(_ recognizer: UITapGestureRecognizer) { + UIView.animate(withDuration: 0.3) { + self.contentView.transform = self.contentView.transform.scaledBy(x: -1, y: 1) + } + } + + @objc + func handleTapGesture(_ recognizer: UITapGestureRecognizer) { + if let delegate = self.delegate { + delegate.stickerViewDidTap(self) + } + } + + // MARK: - Private Methods + private func setEnableClose(_ enableClose:Bool) { + self.closeImageView.isHidden = !enableClose + self.closeImageView.isUserInteractionEnabled = enableClose + } + + private func setEnableRotate(_ enableRotate:Bool) { + self.rotateImageView.isHidden = !enableRotate + self.rotateImageView.isUserInteractionEnabled = enableRotate + } + + private func setEnableFlip(_ enableFlip:Bool) { + self.flipImageView.isHidden = !enableFlip + self.flipImageView.isUserInteractionEnabled = enableFlip + } +} + +extension StickerView: UIGestureRecognizerDelegate { + public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool { + /** + * ref: http://stackoverflow.com/questions/19095165/should-superviews-gesture-cancel-subviews-gesture-in-ios-7/ + * + * The `gestureRecognizer` would be either closeGestureRecognizer or rotateGestureRecognizer, + * `otherGestureRecognizer` should work only when `gestureRecognizer` is failed. + * So, we always return YES here. + */ + return true + } +} diff --git a/MiniScanner/Supporting Files/LogoAnimationView/UIView+Constraints.swift b/MiniScanner/Supporting Files/LogoAnimationView/UIView+Constraints.swift new file mode 100755 index 0000000..992e1c7 --- /dev/null +++ b/MiniScanner/Supporting Files/LogoAnimationView/UIView+Constraints.swift @@ -0,0 +1,21 @@ +// +// UIView+Constraints.swift +// AnimatedGifLaunchScreen-Example +// +// Created by Amer Hukic on 13/09/2018. +// Copyright © 2018 Amer Hukic. All rights reserved. +// + +import UIKit + +extension UIView { + + func pinEdgesToSuperView() { + guard let superView = superview else { return } + translatesAutoresizingMaskIntoConstraints = false + topAnchor.constraint(equalTo: superView.topAnchor).isActive = true + leftAnchor.constraint(equalTo: superView.leftAnchor).isActive = true + bottomAnchor.constraint(equalTo: superView.bottomAnchor).isActive = true + rightAnchor.constraint(equalTo: superView.rightAnchor).isActive = true + } +} diff --git a/MiniScanner/Supporting Files/MyExtention.swift b/MiniScanner/Supporting Files/MyExtention.swift new file mode 100755 index 0000000..fdf6fc4 --- /dev/null +++ b/MiniScanner/Supporting Files/MyExtention.swift @@ -0,0 +1,762 @@ +import UIKit +import Foundation +import CoreLocation +import QuartzCore +import CoreGraphics +import SystemConfiguration + +let SCREEN_WIDTH = UIScreen.main.bounds.width +let SCREEN_HEIGHT = UIScreen.main.bounds.height +let storyBoard = UIStoryboard.init(name: "Main", bundle: nil) +let appDelegate = UIApplication.shared.delegate as! AppDelegate + +let BANNER_ADID = "ca-app-pub-3940256099942544/2934735716" +let FULL_ADID = "ca-app-pub-3940256099942544/4411468910" +let APPOPENADID = "ca-app-pub-3940256099942544/5662855259" +let APP_NATIVE = "ca-app-pub-3940256099942544/3986624511" + +let appID = "app ID" +let devURL = "developer URL" +let Mail_ID = "support mail" +var RateURL : String = "app URL" + +var AppName = "Cam Scanner" +var PDFFileName = "FinalPDF" + +let ShadowColor = UIColor.init(named: "ShadowColor")! +let FontColor = UIColor.init(named: "FontColor")! +let BGColor = UIColor.init(named: "BGColor")! +let ThemeColor = UIColor.init(named: "ThemeColor")! + +var bottomPadding: CGFloat = UIApplication.shared.keyWindow?.safeAreaInsets.bottom ?? 0.0 +var topPadding: CGFloat = UIApplication.shared.keyWindow?.safeAreaInsets.top ?? 0.0 + +class MyFunc: NSObject +{ + func convertImageToBase64(image: UIImage) -> String { + let imageData = image.pngData()! + return imageData.base64EncodedString(options: Data.Base64EncodingOptions.lineLength64Characters) + } + + func convertBase64ToImage(imageString: String) -> UIImage { + let imageData = Data(base64Encoded: imageString, options: Data.Base64DecodingOptions.ignoreUnknownCharacters)! + return UIImage(data: imageData)! + } +} + +class UserDefaultMgr +{ + class func setSortType(strId: Int) + { + UserDefaults.standard.setValue(strId, forKey: "sortType") + UserDefaults.standard.synchronize() + } + class func getSortType() -> Int{ + if UserDefaults.standard.object(forKey: "sortType") == nil{ + return 0 + } + return UserDefaults.standard.value(forKey: "sortType") as! Int + } + + + class func getIsDoc4Time() -> Int{ + if UserDefaults.standard.object(forKey: "ad_DocCount") == nil{ + return 0 + } + return UserDefaults.standard.value(forKey: "ad_DocCount") as! Int + } + class func setIsDoc4Time(strId: Int) + { + UserDefaults.standard.setValue(strId, forKey: "ad_DocCount") + UserDefaults.standard.synchronize() + } + + class func getIsOCROneTime() -> Int{ + if UserDefaults.standard.object(forKey: "ad_OCRcount") == nil{ + return 0 + } + return UserDefaults.standard.value(forKey: "ad_OCRcount") as! Int + } + class func setIsOCROneTime(strId: Int) + { + UserDefaults.standard.setValue(strId, forKey: "ad_OCRcount") + UserDefaults.standard.synchronize() + } + + class func setIsChangeLayout(type: Bool){ + UserDefaults.standard.setValue(type, forKey: "isChangeLayout") + UserDefaults.standard.synchronize() + } + class func getIsChangeLayout() -> Bool{ + if UserDefaults.standard.object(forKey: "isChangeLayout") == nil{ + setIsChangeLayout(type: false) + return false + } + return UserDefaults.standard.value(forKey: "isChangeLayout") as! Bool + } + + class func setIsPasscode(type: Bool){ + UserDefaults.standard.setValue(type, forKey: "isPasscode") + UserDefaults.standard.synchronize() + } + + class func getIsPasscode() -> Bool{ + if UserDefaults.standard.object(forKey: "isPasscode") == nil{ + setIsPasscode(type: false) + return false + } + return UserDefaults.standard.value(forKey: "isPasscode") as! Bool + } + + class func setIsFaceID(type: Bool){ + UserDefaults.standard.setValue(type, forKey: "isFaceID") + UserDefaults.standard.synchronize() + } + + class func getIsFaceID() -> Bool{ + if UserDefaults.standard.object(forKey: "isFaceID") == nil{ + setIsFaceID(type: false) + return false + } + return UserDefaults.standard.value(forKey: "isFaceID") as! Bool + } + + + class func setIsTouchID(type: Bool){ + UserDefaults.standard.setValue(type, forKey: "isTouchID") + UserDefaults.standard.synchronize() + } + + class func getIsTouchID() -> Bool{ + if UserDefaults.standard.object(forKey: "isTouchID") == nil{ + setIsTouchID(type: false) + return false + } + return UserDefaults.standard.value(forKey: "isTouchID") as! Bool + } + +} + + +let aloaderSpinnerMarginSide : CGFloat = 35.0 +let aloaderSpinnerMarginTop : CGFloat = 20.0 +let aloaderTitleMargin : CGFloat = 5.0 + +let maxCount = 6 + + +open class ProcessLoader : UIView { + + fileprivate var coverView : UIView? + fileprivate var titleLabel : UILabel? + fileprivate var loadingView : SwiftLoadingView? + fileprivate var animated : Bool = true + fileprivate var canUpdated = false + fileprivate var title: String? + fileprivate var speed = 1 + + fileprivate var config : Config = Config() { + didSet { + self.loadingView?.config = config + } + } + + @objc func rotated(_ notification: Notification) { + + let loader = ProcessLoader.sharedInstance + + let height : CGFloat = UIScreen.main.bounds.size.height + let width : CGFloat = UIScreen.main.bounds.size.width + let center : CGPoint = CGPoint(x: width / 2.0, y: height / 2.0) + + loader.center = center + loader.coverView?.frame = UIScreen.main.bounds + } + + override open var frame : CGRect { + didSet { + self.update() + } + } + + class var sharedInstance: ProcessLoader { + struct Singleton { + static let instance = ProcessLoader(frame: CGRect(origin: CGPoint(x: 0,y: 0),size: CGSize(width: Config().size,height: Config().size))) + } + return Singleton.instance + } + + open class func show(animated: Bool) { + self.show(title: nil, animated: animated) + } + + open class func show(title: String?, animated : Bool) { + + let currentWindow : UIWindow = UIApplication.shared.keyWindow! + + let loader = ProcessLoader.sharedInstance + loader.canUpdated = true + loader.animated = animated + loader.title = title + loader.update() + + let height : CGFloat = UIScreen.main.bounds.size.height + let width : CGFloat = UIScreen.main.bounds.size.width + let center : CGPoint = CGPoint(x: width / 2.0, y: height / 2.0) + + loader.center = center + + if (loader.superview == nil) { + loader.coverView = UIView(frame: currentWindow.bounds) + loader.coverView?.backgroundColor = loader.config.foregroundColor.withAlphaComponent(loader.config.foregroundAlpha) + + currentWindow.addSubview(loader.coverView!) + currentWindow.addSubview(loader) + loader.start() + } + } + + open class func hide() { + + let loader = ProcessLoader.sharedInstance + NotificationCenter.default.removeObserver(loader) + + loader.stop() + } + + public class func setConfig(config : Config) { + let loader = ProcessLoader.sharedInstance + loader.config = config + loader.frame = CGRect(origin: CGPoint(x: 0, y: 0),size: CGSize(width: loader.config.size, height: loader.config.size)) + } + + private func setup() { + self.alpha = 0 + self.update() + } + + private func start() { + self.loadingView?.start() + + if (self.animated) { + UIView.animate(withDuration: 0.3, animations: { () -> Void in + self.alpha = 1 + }, completion: { (finished) -> Void in + + }); + } else { + self.alpha = 1 + } + } + + private func stop() { + + DispatchQueue.main.async { + if (self.animated) { + UIView.animate(withDuration: 0.3, animations: { () -> Void in + self.alpha = 0 + }, completion: { (finished) -> Void in + self.removeFromSuperview() + self.coverView?.removeFromSuperview() + self.loadingView?.stop() + }); + } else { + self.alpha = 0 + self.removeFromSuperview() + self.coverView?.removeFromSuperview() + self.loadingView?.stop() + } + } + } + + private func update() { + self.backgroundColor = self.config.backgroundColor + self.layer.cornerRadius = self.config.cornerRadius + let loadingViewSize = self.frame.size.width - (aloaderSpinnerMarginSide * 2) + + if (self.loadingView == nil) { + self.loadingView = SwiftLoadingView(frame: self.frameForSpinner()) + self.addSubview(self.loadingView!) + } else { + self.loadingView?.frame = self.frameForSpinner() + } + + if (self.titleLabel == nil) { + self.titleLabel = UILabel(frame: CGRect(origin: CGPoint(x: aloaderTitleMargin, y: aloaderSpinnerMarginTop + loadingViewSize), size: CGSize(width: self.frame.width - aloaderTitleMargin*2, height: 42.0))) + self.addSubview(self.titleLabel!) + self.titleLabel?.numberOfLines = 1 + self.titleLabel?.textAlignment = NSTextAlignment.center + self.titleLabel?.adjustsFontSizeToFitWidth = true + } else { + self.titleLabel?.frame = CGRect(origin: CGPoint(x: aloaderTitleMargin, y: aloaderSpinnerMarginTop + loadingViewSize), size: CGSize(width: self.frame.width - aloaderTitleMargin*2, height: 42.0)) + } + + self.titleLabel?.font = self.config.titleTextFont + self.titleLabel?.textColor = self.config.titleTextColor + self.titleLabel?.text = self.title + + self.titleLabel?.isHidden = self.title == nil + } + + func frameForSpinner() -> CGRect { + let loadingViewSize = self.frame.size.width - (aloaderSpinnerMarginSide * 2) + + if (self.title == nil) { + let yOffset = (self.frame.size.height - loadingViewSize) / 2 + return CGRect(origin: CGPoint(x: aloaderSpinnerMarginSide, y: yOffset), size: CGSize(width: loadingViewSize, height: loadingViewSize)) + } + return CGRect(origin: CGPoint(x: aloaderSpinnerMarginSide, y: aloaderSpinnerMarginTop), size: CGSize(width: loadingViewSize, height: loadingViewSize)) + } + + override init(frame: CGRect) { + super.init(frame: frame) + self.setup() + } + + required public init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + } + + class SwiftLoadingView : UIView { + + fileprivate var speed : Int? + fileprivate var lineWidth : Float? + fileprivate var lineTintColor : UIColor? + fileprivate var backgroundLayer : CAShapeLayer? + fileprivate var isSpinning : Bool? + + var config : Config = Config() { + didSet { + self.update() + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + self.setup() + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + } + + func setup() { + self.backgroundColor = UIColor.clear + self.lineWidth = fmaxf(Float(self.frame.size.width) * 0.025, 1) + + self.backgroundLayer = CAShapeLayer() + self.backgroundLayer?.strokeColor = self.config.spinnerColor.cgColor + self.backgroundLayer?.fillColor = self.backgroundColor?.cgColor + self.backgroundLayer?.lineCap = CAShapeLayerLineCap.round + self.backgroundLayer?.lineWidth = CGFloat(self.lineWidth!) + self.layer.addSublayer(self.backgroundLayer!) + } + + func update() { + self.lineWidth = self.config.spinnerLineWidth + self.speed = self.config.speed + + self.backgroundLayer?.lineWidth = CGFloat(self.lineWidth!) + self.backgroundLayer?.strokeColor = self.config.spinnerColor.cgColor + } + + override func draw(_ rect: CGRect) { + self.backgroundLayer?.frame = self.bounds + } + + func drawBackgroundCircle(_ partial : Bool) { + let startAngle : CGFloat = .pi / CGFloat(2.0) + var endAngle : CGFloat = (2.0 * .pi) + startAngle + + let center : CGPoint = CGPoint(x: self.bounds.size.width / 2,y: self.bounds.size.height / 2) + let radius : CGFloat = (CGFloat(self.bounds.size.width) - CGFloat(self.lineWidth!)) / CGFloat(2.0) + + let processBackgroundPath : UIBezierPath = UIBezierPath() + processBackgroundPath.lineWidth = CGFloat(self.lineWidth!) + + if (partial) { + endAngle = (1.8 * .pi) + startAngle + } + + processBackgroundPath.addArc(withCenter: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true) + self.backgroundLayer?.path = processBackgroundPath.cgPath; + } + + func start() { + self.isSpinning? = true + self.drawBackgroundCircle(true) + + let rotationAnimation : CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.z") + rotationAnimation.toValue = NSNumber(value: .pi * 2.0) + rotationAnimation.duration = 1; + rotationAnimation.isCumulative = true; + rotationAnimation.repeatCount = HUGE; + self.backgroundLayer?.add(rotationAnimation, forKey: "rotationAnimation") + } + + func stop() { + self.drawBackgroundCircle(false) + self.backgroundLayer?.removeAllAnimations() + self.isSpinning? = false + } + } + + public struct Config { + public var size : CGFloat = 120.0 + public var spinnerColor = BGColor + public var spinnerLineWidth :Float = 1.0 + public var titleTextColor = UIColor.black + public var speed :Int = 1 + public var titleTextFont : UIFont = UIFont.boldSystemFont(ofSize: 16.0) + public var backgroundColor = FontColor + public var foregroundColor = UIColor.clear + public var foregroundAlpha:CGFloat = 0.0 + public var cornerRadius : CGFloat = 10.0 + public init() {} + } +} + +extension UIView { + + func roundCorners(corners: UIRectCorner, radius: CGFloat) { + let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) + let mask = CAShapeLayer() + mask.path = path.cgPath + layer.mask = mask + } + + func addShadow(offset: CGSize, color: UIColor, radius: CGFloat, opacity: Float) { + layer.masksToBounds = false + layer.shadowOffset = offset + layer.shadowColor = color.cgColor + layer.shadowRadius = radius + layer.shadowOpacity = opacity + + let backgroundCGColor = backgroundColor?.cgColor + backgroundColor = nil + layer.backgroundColor = backgroundCGColor + } + + + func addFixShadow() { + layer.masksToBounds = false + layer.shadowOffset = CGSize.init(width: 2.0, height: 2.0) + layer.shadowColor = ShadowColor.cgColor + layer.shadowRadius = 4.0 + layer.shadowOpacity = 0.5 + + let backgroundCGColor = backgroundColor?.cgColor + backgroundColor = nil + layer.backgroundColor = backgroundCGColor + } +} + +extension Array { + mutating func remove(at indexes: [Int]) { + for index in indexes.sorted(by: >) { + remove(at: index) + } + } +} + +extension Sequence where Element: Hashable { + func uniqued() -> [Element] { + var set = Set<Element>() + return filter { set.insert($0).inserted } + } +} + +extension UIViewController { + + func showAlertWithTitle( alertTitle : String , msg:String ) + { + let alert = UIAlertController(title:alertTitle, message: msg, preferredStyle: .alert) + let action = UIAlertAction(title: "OK", style: .cancel, handler: nil) + alert.addAction(action) + self.present(alert, animated: true, completion: nil) + + } +} + + +extension UIApplication +{ + class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? { + if let navigationController = controller as? UINavigationController { + return topViewController(controller: navigationController.visibleViewController) + } + if let tabController = controller as? UITabBarController { + if let selected = tabController.selectedViewController { + return topViewController(controller: selected) + } + } + if let presented = controller?.presentedViewController { + return topViewController(controller: presented) + } + return controller + } + + class func getTopViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? { + + if let nav = base as? UINavigationController { + return getTopViewController(base: nav.visibleViewController) + + } else if let tab = base as? UITabBarController, let selected = tab.selectedViewController { + return getTopViewController(base: selected) + + } else if let presented = base?.presentedViewController { + return getTopViewController(base: presented) + } + return base + } +} + + +extension UIColor { + + public convenience init?(hexString: String) { + var cString: String = hexString.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased() + + if (cString.hasPrefix("#")) { + if let range = cString.range(of: cString) { + cString = cString.substring(from: cString.index(range.lowerBound, offsetBy: 1)) + } + } + + if ((cString.count) != 6) { + self.init(white: 0.2, alpha: 1) + return + } + + var rgbValue: UInt32 = 0 + Scanner(string: cString).scanHexInt32(&rgbValue) + + self.init( + red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, + green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, + blue: CGFloat(rgbValue & 0x0000FF) / 255.0, + alpha: CGFloat(1.0) + ) + } +} + +extension UIView { + + var height:CGFloat{return self.bounds.size.height} + var width:CGFloat{return self.bounds.size.width} + var x:CGFloat{return self.frame.origin.x} + var y:CGFloat{return self.frame.origin.y} + + func MoveToXwithDuration(toX:CGFloat,duration:Double) { + UIView.animate(withDuration: duration) { + self.frame.origin.x = toX + } + } + + func MoveToYwithDuration(toY:CGFloat,duration:Double) { + + UIView.animate(withDuration: duration) { + self.frame.origin.y = toY + } + } + + @IBInspectable + var cornerRadiuss: CGFloat { + get { + return layer.cornerRadius + } + set { + layer.cornerRadius = newValue + } + } + + @IBInspectable + var borderWidth: CGFloat { + get + { + return layer.borderWidth + } + set + { + layer.borderWidth = newValue + } + } + + @IBInspectable + var borderColor: UIColor? { + get { + if let color = layer.borderColor { + return UIColor(cgColor: color) + } + return nil + } + set { + if let color = newValue { + layer.borderColor = color.cgColor + } else { + layer.borderColor = nil + } + } + } + + //FIND The parent view from UIVIEW + var parentViewController: UIViewController? { + var parentResponder: UIResponder? = self + while parentResponder != nil { + parentResponder = parentResponder!.next + if let viewController = parentResponder as? UIViewController { + return viewController + } + } + return nil + } + + func TakeScreenshot() -> UIImage { + + UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, UIScreen.main.scale) + drawHierarchy(in: self.bounds, afterScreenUpdates: true) + let image = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + if (image != nil) + { + return image! + } + return UIImage() + } +} + +extension Int +{ + var FloatValue:CGFloat{return CGFloat(self)} + var DoubleValue:Double{return Double(self)} +} + + +extension UIImage{ + + var height:CGFloat{return self.size.height} + var width:CGFloat{return self.size.width} + + func resizeImage(targetSize: CGSize) -> UIImage? { + let size = self.size + + let widthRatio = targetSize.width / size.width + let heightRatio = targetSize.height / size.height + + // Figure out what our orientation is, and use that to form the rectangle + var newSize: CGSize + if(widthRatio > heightRatio) { + newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio) + } else { + newSize = CGSize(width: size.width * widthRatio, height: size.height * widthRatio) + } + + // This is the rect that we've calculated out and this is what is actually used below + let rect = CGRect(origin: .zero, size: newSize) + + // Actually do the resizing to the rect using the ImageContext stuff + UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0) + self.draw(in: rect) + let newImage = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + + return newImage + } + + func BlurImage(value:NSNumber) -> UIImage { + + let context = CIContext(options: [CIContextOption.useSoftwareRenderer:true]) + let CIImage = CoreImage.CIImage(image:self) + let blurFilter = CIFilter(name: "CIGaussianBlur") + blurFilter?.setValue(CIImage, forKey: kCIInputImageKey) + blurFilter?.setValue(value, forKey: "inputRadius") + let imageRef = context.createCGImage((blurFilter?.outputImage)!, from: (CIImage?.extent)!) + + let newImage = UIImage(cgImage:imageRef!) + return newImage + } + + func fixImageOrientation()->UIImage { + UIGraphicsBeginImageContext(self.size) + self.draw(at: .zero) + let newImage = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + return newImage ?? self + } +} + +extension String +{ + var toInteger:Int?{ + get{ + return Int(self) + } + } + + var toDouble:Double?{ + get{ + return Double(self) + } + } + + var toFloat:Float?{ + get{ + return Float(self) + } + } + + var toBool:Bool?{ + get + { + if self == "1" + { + return "1" == self ? true : false + } + return "true" == self ? true : false + } + } +} + +extension CGFloat +{ + var toInt:Int?{ + get{ + return Int(self) + } + } +} + + +struct ImageHeaderData{ + static var PNG: [UInt8] = [0x89] + static var JPEG: [UInt8] = [0xFF] + static var GIF: [UInt8] = [0x47] + static var TIFF_01: [UInt8] = [0x49] + static var TIFF_02: [UInt8] = [0x4D] +} + +enum ImageFormat{ + case Unknown, PNG, JPEG, GIF, TIFF +} + + +extension NSData{ + var imageFormat: ImageFormat{ + var buffer = [UInt8](repeating: 0, count: 1) + self.getBytes(&buffer, range: NSRange(location: 0,length: 1)) + if buffer == ImageHeaderData.PNG + { + return .PNG + } else if buffer == ImageHeaderData.JPEG + { + return .JPEG + } else if buffer == ImageHeaderData.GIF + { + return .GIF + } else if buffer == ImageHeaderData.TIFF_01 || buffer == ImageHeaderData.TIFF_02{ + return .TIFF + } else{ + return .Unknown + } + } +} diff --git a/Pods/FSPagerView/Sources/FSPageControl.swift b/MiniScanner/Supporting Files/Sources/FSPageControl.swift similarity index 100% rename from Pods/FSPagerView/Sources/FSPageControl.swift rename to MiniScanner/Supporting Files/Sources/FSPageControl.swift diff --git a/Pods/FSPagerView/Sources/FSPageViewLayout.swift b/MiniScanner/Supporting Files/Sources/FSPageViewLayout.swift similarity index 100% rename from Pods/FSPagerView/Sources/FSPageViewLayout.swift rename to MiniScanner/Supporting Files/Sources/FSPageViewLayout.swift diff --git a/Pods/FSPagerView/Sources/FSPageViewTransformer.swift b/MiniScanner/Supporting Files/Sources/FSPageViewTransformer.swift similarity index 99% rename from Pods/FSPagerView/Sources/FSPageViewTransformer.swift rename to MiniScanner/Supporting Files/Sources/FSPageViewTransformer.swift index 2878679..7f46771 100644 --- a/Pods/FSPagerView/Sources/FSPageViewTransformer.swift +++ b/MiniScanner/Supporting Files/Sources/FSPageViewTransformer.swift @@ -26,8 +26,8 @@ open class FSPagerViewTransformer: NSObject { open internal(set) weak var pagerView: FSPagerView? open internal(set) var type: FSPagerViewTransformerType - open var minimumScale: CGFloat = 0.65 - open var minimumAlpha: CGFloat = 0.6 + @objc open var minimumScale: CGFloat = 0.65 + @objc open var minimumAlpha: CGFloat = 0.6 @objc public init(type: FSPagerViewTransformerType) { diff --git a/Pods/FSPagerView/Sources/FSPagerCollectionView.swift b/MiniScanner/Supporting Files/Sources/FSPagerCollectionView.swift similarity index 100% rename from Pods/FSPagerView/Sources/FSPagerCollectionView.swift rename to MiniScanner/Supporting Files/Sources/FSPagerCollectionView.swift diff --git a/Pods/FSPagerView/Sources/FSPagerView.swift b/MiniScanner/Supporting Files/Sources/FSPagerView.swift similarity index 97% rename from Pods/FSPagerView/Sources/FSPagerView.swift rename to MiniScanner/Supporting Files/Sources/FSPagerView.swift index 7fb17d9..32d00cd 100644 --- a/Pods/FSPagerView/Sources/FSPagerView.swift +++ b/MiniScanner/Supporting Files/Sources/FSPagerView.swift @@ -477,10 +477,24 @@ open class FSPagerView: UIView,UICollectionViewDataSource,UICollectionViewDelega /// Reloads all of the data for the collection view. @objc(reloadData) open func reloadData() { - self.collectionViewLayout.needsReprepare = true; + self.collectionViewLayout.needsReprepare = true self.collectionView.reloadData() + self.collectionView.layoutIfNeeded() } + open func getCell(at: Int) -> FSPagerViewCell { + if let cell = self.collectionView.cellForItem(at: IndexPath(row: at, section: 0)) as? FSPagerViewCell { + return cell + } + return FSPagerViewCell() + } + + open func reloadData(at: Int) { + let index = IndexPath(row: at, section: 0) + self.collectionView.reloadItems(at: [index]) + } + + /// Selects the item at the specified index and optionally scrolls it into view. /// /// - Parameters: @@ -549,6 +563,11 @@ open class FSPagerView: UIView,UICollectionViewDataSource,UICollectionViewDelega return self.collectionView.cellForItem(at: indexPath) as? FSPagerViewCell } + open func cellForItemat(index: Int) -> FSPagerViewCell? { + let indexPath = IndexPath(row: index, section: 0) + return self.collectionView.cellForItem(at: indexPath) as? FSPagerViewCell + } + // MARK: - Private functions fileprivate func commonInit() { diff --git a/Pods/FSPagerView/Sources/FSPagerViewCell.swift b/MiniScanner/Supporting Files/Sources/FSPagerViewCell.swift similarity index 67% rename from Pods/FSPagerView/Sources/FSPagerViewCell.swift rename to MiniScanner/Supporting Files/Sources/FSPagerViewCell.swift index 832de15..9b4b55c 100644 --- a/Pods/FSPagerView/Sources/FSPagerViewCell.swift +++ b/MiniScanner/Supporting Files/Sources/FSPagerViewCell.swift @@ -17,6 +17,32 @@ open class FSPagerViewCell: UICollectionViewCell { open var delegate: FSPagerViewCellDelegate? open var index: Int? + open var sign: UIImage! { + didSet { + loadCaptureSignature(sign ?? UIImage()) + } + } + var session: MultiPageScanSession? + + private var selectedStickerView:StickerView? + + var selectedStickerView1:StickerView? { + get { + return selectedStickerView + } + set { + if selectedStickerView != newValue { + if let selectedStickerView = selectedStickerView { + selectedStickerView.showEditing = false + } + selectedStickerView = newValue + } + if let selectedStickerView = selectedStickerView { + selectedStickerView.showEditing = true + selectedStickerView.superview?.bringSubviewToFront(selectedStickerView) + } + } + } /// Returns the label used for the main textual content of the pager view cell. @objc @@ -108,6 +134,8 @@ open class FSPagerViewCell: UICollectionViewCell { } } + + open override var isSelected: Bool { set { super.isSelected = newValue @@ -188,4 +216,81 @@ open class FSPagerViewCell: UICollectionViewCell { } } + func grayscale(image: UIImage) -> UIImage? + { + let context = CIContext(options: nil) + if let filter = CIFilter(name: "CIPhotoEffectNoir") { + filter.setValue(CIImage(image: image), forKey: kCIInputImageKey) + if let output = filter.outputImage { + if let cgImage = context.createCGImage(output, from: output.extent) { + return UIImage(cgImage: cgImage) + } + } + } + return nil + } + + func loadCaptureSignature(_ cropImage : UIImage) + { + let grayImg = grayscale(image: cropImage) + let newImage = grayImg + + let imageSize = CGSize(width: 125, height: 125) + + let testImage = UIImageView() + testImage.frame.size = imageSize + testImage.contentMode = .scaleAspectFit + testImage.image = newImage + + let stickerView = StickerView.init(contentView: testImage) + stickerView.center = contentView.center + stickerView.delegate = self + if let exitIcon = UIImage(named: "close"), + let rotateIcon = UIImage(named: "resize") { + stickerView.setImage(exitIcon, forHandler: StickerViewHandler.close) + stickerView.setImage(rotateIcon, forHandler: StickerViewHandler.rotate) + } + + stickerView.showEditing = false + + self.selectedStickerView1 = stickerView + if let sign = self.selectedStickerView1 { + contentView.addSubview(sign) + } + } +} +extension FSPagerViewCell: StickerViewDelegate { + func stickerViewDidBeginMoving(_ stickerView: StickerView) { + return + } + + func stickerViewDidChangeMoving(_ stickerView: StickerView) { + return + } + + func stickerViewDidEndMoving(_ stickerView: StickerView) { + return + } + + func stickerViewDidBeginRotating(_ stickerView: StickerView) { + return + } + + func stickerViewDidChangeRotating(_ stickerView: StickerView) { + return + } + + func stickerViewDidEndRotating(_ stickerView: StickerView) { + return + } + + func stickerViewDidClose(_ stickerView: StickerView) { + return + } + + func stickerViewDidTap(_ stickerView: StickerView) { + selectedStickerView1?.showEditing = !(selectedStickerView1?.showEditing ?? false) + } + + } diff --git a/Pods/FSPagerView/Sources/FSPagerViewLayoutAttributes.swift b/MiniScanner/Supporting Files/Sources/FSPagerViewLayoutAttributes.swift similarity index 100% rename from Pods/FSPagerView/Sources/FSPagerViewLayoutAttributes.swift rename to MiniScanner/Supporting Files/Sources/FSPagerViewLayoutAttributes.swift diff --git a/Pods/FSPagerView/Sources/FSPagerViewObjcCompat.h b/MiniScanner/Supporting Files/Sources/FSPagerViewObjcCompat.h similarity index 100% rename from Pods/FSPagerView/Sources/FSPagerViewObjcCompat.h rename to MiniScanner/Supporting Files/Sources/FSPagerViewObjcCompat.h diff --git a/Pods/FSPagerView/Sources/FSPagerViewObjcCompat.m b/MiniScanner/Supporting Files/Sources/FSPagerViewObjcCompat.m similarity index 100% rename from Pods/FSPagerView/Sources/FSPagerViewObjcCompat.m rename to MiniScanner/Supporting Files/Sources/FSPagerViewObjcCompat.m diff --git a/Podfile b/Podfile index 754b27a..64a9519 100644 --- a/Podfile +++ b/Podfile @@ -10,7 +10,6 @@ target 'MiniScanner' do pod 'IQKeyboardManagerSwift' pod 'ImagePicker' pod 'NBBottomSheet' - pod 'FSPagerView' pod 'EPSignature' diff --git a/Podfile.lock b/Podfile.lock index d3193b9..6649453 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,6 +1,5 @@ PODS: - EPSignature (1.0.6) - - FSPagerView (0.8.3) - ImagePicker (3.2.0) - IQKeyboardManagerSwift (7.0.3) - LanguageManager-iOS (1.2.7) @@ -8,7 +7,6 @@ PODS: DEPENDENCIES: - EPSignature - - FSPagerView - ImagePicker - IQKeyboardManagerSwift - LanguageManager-iOS @@ -17,7 +15,6 @@ DEPENDENCIES: SPEC REPOS: trunk: - EPSignature - - FSPagerView - ImagePicker - IQKeyboardManagerSwift - LanguageManager-iOS @@ -25,12 +22,11 @@ SPEC REPOS: SPEC CHECKSUMS: EPSignature: 3fa3b520c80717b98019723faa60a41794b03fbc - FSPagerView: 670405b2f18e2a87fa37f20b00de783e562c25a8 ImagePicker: 1d950bbb2422548ed58791b4ec7f42fe42920511 IQKeyboardManagerSwift: f9c5dc36cba16ddd2e51fa7d51c34a2e083029b5 LanguageManager-iOS: 6b2dbb3793445827114708f0759b76e96932d7c8 NBBottomSheet: aa7a52809b2d7b193f733247b8ce391a59904372 -PODFILE CHECKSUM: 23ea4bb572ed7de088aee5894c2fe160357b3d96 +PODFILE CHECKSUM: 55e1d258d6921724b2dcc8fa7966f2e028ae9600 COCOAPODS: 1.14.3 diff --git a/Pods/FSPagerView/README-OBJECTIVE-C.md b/Pods/FSPagerView/README-OBJECTIVE-C.md deleted file mode 100644 index ee4cbd7..0000000 --- a/Pods/FSPagerView/README-OBJECTIVE-C.md +++ /dev/null @@ -1,416 +0,0 @@ - - -[](#) <br/> -[](http://cocoadocs.org/docsets/FSPagerView) -[](http://cocoadocs.org/docsets/FSPagerView) -[](https://github.com/Carthage/Carthage) -[](https://swift.org/package-manager/) - -|[<b>SWIFT</b>](https://github.com/WenchaoD/FSPagerView/blob/master/README.md)|<b>OBJECTIVE-C</b>| -|---|---| - -**FSPagerView** is an elegant Screen Slide Library implemented primarily with ***UICollectionView***. It is extremely helpful for making Bannerã€Product Showã€Welcome/Guide Pagesã€Screen/ViewController Sliders. - -## Features -* ***Infinite*** scrolling. -* ***Automatic*** Sliding. -* Support ***Horizontal*** and ***Vertical*** paging. -* Fully customizable item, with predefined banner-style item. -* Fully customizable ***page control***. -* Rich build-in 3D transformers. -* ***Simple*** and ***Delightful*** api usage. -* Support **SWIFT** and **OBJECTIVE-C**. - -## Demo1 Banner - -| Banner | -|---| -| | - -### automaticSlidingInterval -The time interval of automatic sliding. 0 means disabling automatic sliding. Default is 0. - -**e.g.** - -```objc -pagerView.automaticSlidingInterval = 3.0; -``` - - -### isInfinite -A boolean value indicates whether the pager view has infinite number of items. Default is false. - -**e.g.** - -```objc -pagerView.isInfinite = YES; -``` - -### decelerationDistance -An unsigned integer value that determines the paging distance of the pager view, which indicates the number of passing items during the deceleration. When the value of this property is FSPagerViewAutomaticDistance, the actual 'distance' is automatically calculated according to the scrolling speed of the pager view. Default is 1. - -**e.g.** - -```objc -pagerView.decelerationDistance = 2 -``` - -### itemSize -The item size of the pager view. When the value of this property is FSPagerViewAutomaticSize, the items fill the entire visible area of the pager view. Default is FSPagerViewAutomaticSize. - - -**e.g.** - -```objc -pagerView.itemSize = CGSizeMake(200, 180); -``` - -### interitemSpacing -The spacing to use between items in the pager view. Default is 0. - -**e.g.** - -```objc -pagerView.interitemSpacing = 10; -``` - -## Demo2 - Transformers - -|Cross Fading| -|---| -|  | - -```objc -pagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeCrossFading]; -``` ---- - - - -|Zoom Out| -|---| -|  | - -```objc -pagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeZoomOut]; -``` ---- - - -|Depth| -|---| -|  | - -```objc -pagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeDepth]; -``` ---- - - -|Linear| -|---| -|  | - -```objc -pagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeLinear]; -``` ---- - - -|Overlap| -|---| -|  | - -```objc -pagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeOverlap]; -``` ---- - - -|Ferris Wheel| -|------| -|  | - -```objc -pagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeFerrisWheel]; -``` ---- - - -|Inverted Ferris Wheel| -|------| -|  | - -```objc -pagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeInvertedFerrisWheel]; -``` ---- - - -|Cover Flow| -|------| -|  | -```objc -pagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeCoverFlow]; -``` ---- - -|Cubic| -|------| -|  | -```objc -pagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeCubic]; -``` ---- - - -> Customize your own transformer by subclassing`FSPagerViewTransformer.` - - -## Demo3 Page Control -|Page Control| -|---| -| -| - -### numberOfPages -The number of page indicators of the page control. Default is 0. - -**e.g.** - -```objc -pageControl.numberOfPages = 5; -``` - -### currentPage -The current page, highlighted by the page control. Default is 0. - -**e.g.** - -```objc -pageControl.currentPage = 1; -``` -### contentHorizontalAlignment -The horizontal alignment of content within the control’s bounds. Default is center. - -**e.g.** - -```objc -pageControl.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight; -``` - -### setStrokeColor:forState: -Sets the stroke color for page indicators to use for the specified state. (selected/normal). - -**e.g.** - -```objc -[pageControl setStrokeColor:[UIColor greenColor] forState:UIControlStateNormal]; -[pageControl setStrokeColor:[UIColor yellowColor] forState:UIControlStateSelected]; -``` - - -### setFillColor:forState: -Sets the fill color for page indicators to use for the specified state. (selected/normal). - -**e.g.** - -```objc -[pageControl setFillColor:[UIColor grayColor] forState:UIControlStateNormal]; -[pageControl setFillColor:[UIColor whiteColor] forState:UIControlStateSelected]; -``` - -### setImage:forState: -Sets the image for page indicators to use for the specified state. (selected/normal). - -**e.g.** - -```objc -[pageControl setImage:[UIImage imageNamed:@"image1"] forState:UIControlStateNormal]; -[pageControl setImage:[UIImage imageNamed:@"image2"] forState:UIControlStateSelected]; -``` - -### setPath:forState: -Sets the path for page indicators to use for the specified state. (selected/normal). - -**e.g.** - -```objc -[pageControl setPath:[UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 8, 8)] forState:UIControlStateNormal]; -[pageControl setPath: [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 8, 8)] forState:UIControlStateSelected]; -``` - -## Installation -* Manually -* Cocoapods -* Carthage - -### Manually -1. ***[Download](#)*** the source code. -2. Extract the zip file, simply drag folder ***Sources*** into your project. -3. Make sure ***Copy items if needed*** is checked. - -### Cocoapods -```ruby -use_frameworks! -target '<Your Target Name>' do - pod 'FSPagerView' -end -``` - -### Carthage -```ruby -github "WenchaoD/FSPagerView" -``` - -## Tutorial -* [Getting started](#getting_started) -* [Implement FSPagerViewDataSource](#implement_fspagerviewdatasource) -* [Implement FSPagerViewDelegate](#implement_fspagerviewdelegate) - -### 1. Getting started <a id='getting_started'></a> - -* Getting started with code - -```objc -// Create a pager view -FSPagerView *pagerView = [[FSPagerView alloc] initWithFrame:frame1]; -pagerView.dataSource = self; -pagerView.delegate = self; -[pagerView registerClass:[FSPagerViewCell class] forCellWithReuseIdentifier:@"cell"]; -[self.view addSubview:pagerView]; -// Create a page control -FSPageControl *pageControl = [[FSPageControl alloc] initWithFrame:frame2]; -[self.view addSubview:pageControl]; -``` - -* Getting started with Interface Builder <br/> -1ã€Simply drag **UIView** instance into your View Controller, Change the `Custom Class` to `FSPagerView`. (Or `FSPageControl`) <br/> -2ã€Link the `dataSource` and `delegate` property of **FSPagerView** to your View Controller. <br/> -3ã€Register a cell class. - -```objc -- (void)viewDidLoad -{ - [super viewDidLoad]; - [self.pagerView registerClass:[FSPagerViewCell class] forCellWithReuseIdentifier:@"cell"]; -} -``` - - -### 2. Implement FSPagerViewDataSource <a id='implement_fspagerviewdatasource'></a> -```objc -- (NSInteger)numberOfItemsInpagerView:(FSPagerView *)pagerView -{ - return numberOfItems; -} - -- (FSPagerViewCell *)pagerView:(FSPagerView *)pagerView cellForItemAtIndex:(NSInteger)index -{ - FSPagerViewCell *cell = [pagerView dequeueReusableCellWithReuseIdentifier:@"cell" atIndex:index]; - cell.imageView.image = ...; - cell.textLabel.text = ...; - return cell; -} -``` - -### 3. Implement FSPagerViewDelegate <a id='implement_fspagerviewdelegate'></a> - -```objc -- (BOOL)pagerView:(FSPagerView *)pagerView shouldHighlightItemAtIndex:(NSInteger)index; -``` -> Asks the delegate if the item should be highlighted during tracking. - ---- - -```objc -- (void)pagerView:(FSPagerView *)pagerView didHighlightItemAtIndex:(NSInteger)index; -``` -> Tells the delegate that the item at the specified index was highlighted. - ---- - -```objc -- (BOOL)pagerView:(FSPagerView *)pagerView shouldSelectItemAtIndex:(NSInteger)index; -``` -> Asks the delegate if the specified item should be selected. - ---- - -```objc -- (void)pagerView:(FSPagerView *)pagerView didSelectItemAtIndex:(NSInteger)index; -``` -> Tells the delegate that the item at the specified index was selected. - ---- - -```objc -- (void)pagerView:(FSPagerView *)pagerView willDisplayCell:(FSPagerViewCell *)cell forItemAtIndex:(NSInteger)index; -``` -> Tells the delegate that the specified cell is about to be displayed in the pager view. - ---- - -```objc -- (void)pagerView:(FSPagerView *)pagerView didEndDisplayingCell:(FSPagerViewCell *)cell forItemAtIndex:(NSInteger)index; -``` -> Tells the delegate that the specified cell was removed from the pager view. - ---- - -```objc -- (void)pagerViewWillBeginDragging:(FSPagerView *)pagerView; -``` -> Tells the delegate when the pager view is about to start scrolling the content. - ---- - -```objc -- (void)pagerViewWillEndDragging:(FSPagerView *) pagerView targetIndex:(NSInteger)index: -``` -> Tells the delegate when the user finishes scrolling the content. - ---- - -```objc -- (void)pagerViewDidScroll:(FSPagerView *)pagerView; -``` -> Tells the delegate when the user scrolls the content view within the receiver. - ---- - -```objc -- (void)pagerViewDidEndScrollAnimation:(FSPagerView *)pagerView; -``` -> Tells the delegate when a scrolling animation in the pager view concludes. - ---- - -```objc -- (void)pagerViewDidEndDecelerating:(FSPagerView *)pagerView; -``` -> Tells the delegate that the pager view has ended decelerating the scrolling movement. - ---- - -## <a id="support"></a>Support this repo -* ***Star*** this repo <a href="#"><img style="margin-bottom:-12px" width="72" alt="star" src="https://cloud.githubusercontent.com/assets/5186464/15383105/fcf9cdf0-1dc2-11e6-88db-bf221042a584.png"></a> -<br/> - -* Buy me a ***Coffee***. â˜•ï¸ - - <a href="https://www.paypal.me/WenchaoD" target="_blank"><img src="https://www.paypalobjects.com/webstatic/i/logo/rebrand/ppcom.svg" width="100" height="40" style="margin-bottom:-15px;"></a> | - <a href="https://user-images.githubusercontent.com/5186464/45949944-46960480-c030-11e8-9e90-30b015698cf6.png" target="_blank"><img src="http://a1.mzstatic.com/us/r30/Purple49/v4/50/16/b3/5016b341-39c1-b47b-2994-d7e23823baed/icon175x175.png" width="40" height="40" style="margin-bottom:-15px;-webkit-border-radius:10px;border:1px solid rgba(30, 154, 236, 1);"></a> | - <a href="https://cloud.githubusercontent.com/assets/5186464/15096872/b06f3a3a-153c-11e6-89f9-2e9c7b88ef42.png" target="_blank"><img src="http://a4.mzstatic.com/us/r30/Purple49/v4/23/31/14/233114f8-2e8d-7b63-8dc5-85d29893061e/icon175x175.jpeg" height="40" width="40" style="margin-bottom:-15px; -webkit-border-radius: 10px;border:1px solid rgba(43, 177, 0, 1)"></a> - ---- - -## Author -* ***å¾®åšï¼š[@WenchaoD](http://weibo.com/WenchaoD)*** -* ***Twitter: [@WenchaoD](https://twitter.com/WenchaoD)*** -* Other repos: - * ***[FSCalendar](https://github.com/WenchaoD/FSCalendar)*** - ---- - -# [Documentation](http://cocoadocs.org/docsets/FSPagerView) \ No newline at end of file diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index d3193b9..6649453 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -1,6 +1,5 @@ PODS: - EPSignature (1.0.6) - - FSPagerView (0.8.3) - ImagePicker (3.2.0) - IQKeyboardManagerSwift (7.0.3) - LanguageManager-iOS (1.2.7) @@ -8,7 +7,6 @@ PODS: DEPENDENCIES: - EPSignature - - FSPagerView - ImagePicker - IQKeyboardManagerSwift - LanguageManager-iOS @@ -17,7 +15,6 @@ DEPENDENCIES: SPEC REPOS: trunk: - EPSignature - - FSPagerView - ImagePicker - IQKeyboardManagerSwift - LanguageManager-iOS @@ -25,12 +22,11 @@ SPEC REPOS: SPEC CHECKSUMS: EPSignature: 3fa3b520c80717b98019723faa60a41794b03fbc - FSPagerView: 670405b2f18e2a87fa37f20b00de783e562c25a8 ImagePicker: 1d950bbb2422548ed58791b4ec7f42fe42920511 IQKeyboardManagerSwift: f9c5dc36cba16ddd2e51fa7d51c34a2e083029b5 LanguageManager-iOS: 6b2dbb3793445827114708f0759b76e96932d7c8 NBBottomSheet: aa7a52809b2d7b193f733247b8ce391a59904372 -PODFILE CHECKSUM: 23ea4bb572ed7de088aee5894c2fe160357b3d96 +PODFILE CHECKSUM: 55e1d258d6921724b2dcc8fa7966f2e028ae9600 COCOAPODS: 1.14.3 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 47cd7ab..a55087a 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,368 +7,338 @@ objects = { /* Begin PBXBuildFile section */ - 014ADEB344680FBC5C6D76E16B255CAC /* Pods-MiniScanner-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 123ADF4A6B2F1DEBA5B7482D4983B685 /* Pods-MiniScanner-dummy.m */; }; - 028F3BD1F76536182769D7FA2BB26457 /* ImageStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47978E33AA1FE786BB675EA3F66DE381 /* ImageStack.swift */; }; - 047539EBA967BC7505B53F36E1A2836A /* focusIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = A2A1F3E9AD6E574C81576EFC109E4F56 /* focusIcon@3x.png */; }; - 0615219BFD2EBBE27FF41C2C8816791E /* IQTextFieldViewInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 309F127A50B023B6041C44942C9079DE /* IQTextFieldViewInfo.swift */; }; - 0718CCD0E19136B8DB2A7D4C6585E3ED /* LanguageManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8434491D5623794FFD75623AC5720E3C /* LanguageManager.swift */; }; - 08822D4E49DB8618D27BAEDED7911733 /* IQKeyboardManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = A230ED28736A611DEEC851620E6444DE /* IQKeyboardManager+Internal.swift */; }; - 08C234F2981017EEF271582022F339F3 /* IQUIView+IQKeyboardToolbarDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A7457CB008481373FBC626968AD770 /* IQUIView+IQKeyboardToolbarDeprecated.swift */; }; - 0A4DB572ACD97EC492C4E93A0FFB2E47 /* IQTextFieldViewListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DB66972AE146B779F56CFD49B324220 /* IQTextFieldViewListener.swift */; }; - 0C99571A708CA382A984BDEDA5AE25D5 /* selectedImageGallery@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6214DC5E72470BE3105210D7465B90A /* selectedImageGallery@3x.png */; }; - 1021FCA162D086E55DE8D6926F8DA215 /* ImageGalleryViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 689EF9768E3E18B833DD776EAD893408 /* ImageGalleryViewCell.swift */; }; - 103FE4EEFF1BE8BAD0FA047987AFED74 /* IQUIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE1348270A5A7F3FDEFAC32D8E89686A /* IQUIView+Hierarchy.swift */; }; - 10D1A87F45AFB52D2B34D9ABA1A86105 /* UIImageView+Direction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5761D7B5C5A856ED4D8A03F284C8771F /* UIImageView+Direction.swift */; }; - 14063E1AF70EDDC9F33C8E08DCA0BEF3 /* IQPreviousNextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE7235727A466A9B7BF8342CC42C4B91 /* IQPreviousNextView.swift */; }; - 14638F89550DD287F122C4C8968289F4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C54FCF3DBFE97D4603C0EACF18FA0D04 /* Foundation.framework */; }; - 154362EFC8EC0F61F54E24B09266DEB1 /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7136D2DF9E35BE04AE50612BF8809136 /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift */; }; - 178BF9CAADACBF4E8FE49574A848C12A /* NBBottomSheetPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5B4DA5F338896C639DBDA08FCCC486 /* NBBottomSheetPresentationController.swift */; }; - 1948830F0F143F2897657B9D75895EFA /* VideoInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA1D8FBFBA4E4BE6EC7D55255DE3EFBC /* VideoInfoView.swift */; }; - 1A7787DB0275CF4A44CA312DD3BA5D33 /* EPSignatureViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2D93C4B3BEDE27E7A936E76984B03C35 /* EPSignatureViewController.xib */; }; + 028F3BD1F76536182769D7FA2BB26457 /* ImageStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7EA56260324998EC43B70CD2092E1FB /* ImageStack.swift */; }; + 0615219BFD2EBBE27FF41C2C8816791E /* IQTextFieldViewInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = E34B4735C7461EBF9AEEC896DEB27C33 /* IQTextFieldViewInfo.swift */; }; + 0718CCD0E19136B8DB2A7D4C6585E3ED /* LanguageManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8292FC683D8C22C77C5F637AF2836FA /* LanguageManager.swift */; }; + 08822D4E49DB8618D27BAEDED7911733 /* IQKeyboardManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB94CC5B3F453AA0801700167152FCA1 /* IQKeyboardManager+Internal.swift */; }; + 08C234F2981017EEF271582022F339F3 /* IQUIView+IQKeyboardToolbarDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E6FDE31134B7541747D1E89E52E225A /* IQUIView+IQKeyboardToolbarDeprecated.swift */; }; + 09F4E3A6DED312368CE8E037A171BD70 /* selectedImageGallery@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 081BAFFE15D81F33E77489E60A036BE7 /* selectedImageGallery@3x.png */; }; + 0A4DB572ACD97EC492C4E93A0FFB2E47 /* IQTextFieldViewListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F6826627BFA6A69002524426F8CFFB7 /* IQTextFieldViewListener.swift */; }; + 1021FCA162D086E55DE8D6926F8DA215 /* ImageGalleryViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC4CEA5F2332B5B286CA6B73D2643EF /* ImageGalleryViewCell.swift */; }; + 103FE4EEFF1BE8BAD0FA047987AFED74 /* IQUIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55EBF017F6625B593286F47CFEB1FA3 /* IQUIView+Hierarchy.swift */; }; + 10D1A87F45AFB52D2B34D9ABA1A86105 /* UIImageView+Direction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7927C464AC094A95C8B864DF6A0B1D06 /* UIImageView+Direction.swift */; }; + 14063E1AF70EDDC9F33C8E08DCA0BEF3 /* IQPreviousNextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 187B8EDBE8957C190B1EB7C8F949ED80 /* IQPreviousNextView.swift */; }; + 154362EFC8EC0F61F54E24B09266DEB1 /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F0A5164AA0CCC729C8EA5166760BA9E /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift */; }; + 178BF9CAADACBF4E8FE49574A848C12A /* NBBottomSheetPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D47766C4492BAF84E069DF6E3DD758 /* NBBottomSheetPresentationController.swift */; }; + 1948830F0F143F2897657B9D75895EFA /* VideoInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E924FDDE7F7B51AEC552C94D9C9AD6 /* VideoInfoView.swift */; }; + 19BA03143F6B7CCC7F6D3A5000333763 /* ON@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7488E11EF92CBFCB3965EA6F8020E701 /* ON@3x.png */; }; + 1A7787DB0275CF4A44CA312DD3BA5D33 /* EPSignatureViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 56C1C453B74E770D4AC56A090051BCF5 /* EPSignatureViewController.xib */; }; + 1B1937CEB4E9DF65238702771B4232B4 /* video@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 45C50C21EF30A0239628BA0E14464BCE /* video@3x.png */; }; 1BBD42E84E62842B6EA186CEF24BBF45 /* ImagePicker.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 97AA160F23F0CBEDDAF212103E762FC7 /* ImagePicker.bundle */; }; - 1BBED45FEDD4AF437A762909E4937019 /* CameraMan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B78794BA632342FFC447557E4671B16 /* CameraMan.swift */; }; - 1C3881B0113D3219398154E16AA4413C /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C332B0108C87436290C293E043023A /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift */; }; - 1D5090C638CFC6ABA603A73B2D890CC7 /* Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB2BF5C6F33D3DA91B2EB11B23EEE3FE /* Helper.swift */; }; + 1BBED45FEDD4AF437A762909E4937019 /* CameraMan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 297D96869095AA06F276F3DA5DD575B7 /* CameraMan.swift */; }; + 1C3881B0113D3219398154E16AA4413C /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5EDE1D4720CA7A048A32667F968ED10 /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift */; }; + 1D5090C638CFC6ABA603A73B2D890CC7 /* Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8016BAC4075F40E70BE2133125B01BF5 /* Helper.swift */; }; + 1ECC8F5583B658DA5BC4F8D29132213F /* Pods-MiniScanner-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 123ADF4A6B2F1DEBA5B7482D4983B685 /* Pods-MiniScanner-dummy.m */; }; 23D11E770DF137CBF802A30E2B19C054 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C54FCF3DBFE97D4603C0EACF18FA0D04 /* Foundation.framework */; }; - 24C699F9653980B77F44634EF44641C1 /* IQKeyboardInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69FC816770553B761090561AE8707674 /* IQKeyboardInfo.swift */; }; - 267C4C6C182CC853990C78F13C5318CE /* TopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FF2B9AD02F97A175585504BA5B7F448 /* TopView.swift */; }; - 29C03EAF5C27DC851118AEC88ABEC151 /* FSPagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3703BDC76205E7D102F2BF32B3D8ACC /* FSPagerView.swift */; }; - 2E4A914423BA1B263C96C3BBC43E2245 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C63F26DA7ECAFB44B0A5DD0BC0E2F89 /* UIKit.framework */; }; - 2F7AE7DED85C12F45995DA2DF033641C /* ON@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = BC0F20E077483A5E6339C4C6304E6507 /* ON@3x.png */; }; - 3402A26F7BBA359E410BEB33C8B74254 /* NBBottomSheetTransitioningDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BB9A00426C7107F694592F19527BE69 /* NBBottomSheetTransitioningDelegate.swift */; }; - 3452528F3B9B79AD67D45FEA174F71E4 /* IQUICollectionView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4C85B9AE116359EBFD1959406B32999 /* IQUICollectionView+Additions.swift */; }; - 34BDB069A96125DAF2FEF6FF93A3F6AF /* IQToolbarPlaceholderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92CEF8FFA7885B7EC96C4120D507A08F /* IQToolbarPlaceholderConfiguration.swift */; }; - 35699581E68E1E6F640C681EEDEEE2B6 /* EPSignature-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A7BA040D977C503D2A8C2D9BF404E21C /* EPSignature-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3573FA382FBE08F99039CED491DB9FF0 /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C94B5C4512123F377D23B93F1FA23097 /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3806469B2739BBFA16083760004ED9B4 /* ImageGalleryViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E62A4882567E433682E9D7925C2BDA73 /* ImageGalleryViewDataSource.swift */; }; - 38CBE3196BDD577B5E72BC65508A77F8 /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B5D88BFE14997FA9B22FA4A4B8CD6DA /* IQTextView.swift */; }; - 38FD95DCC2D02D5B78BE9AEE48DBDF25 /* ConstraintsSetup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E44A8883A35E6A01365B1C682A1164D /* ConstraintsSetup.swift */; }; + 24C699F9653980B77F44634EF44641C1 /* IQKeyboardInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F3317C2A83E43FF75DFCFD3FAEB3669 /* IQKeyboardInfo.swift */; }; + 267C4C6C182CC853990C78F13C5318CE /* TopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B71FD6B5A8AC626259BE6B97226F81FB /* TopView.swift */; }; + 28658B67B33D0AF1A396F70CF4C416FD /* cameraIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 843CD6046BA80BCDF11AE4FAC807D29B /* cameraIcon@3x.png */; }; + 3402A26F7BBA359E410BEB33C8B74254 /* NBBottomSheetTransitioningDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7F7A4EA7A5659C2F78D04CC218E1440 /* NBBottomSheetTransitioningDelegate.swift */; }; + 3452528F3B9B79AD67D45FEA174F71E4 /* IQUICollectionView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92470A870676C63A27509F38301D521C /* IQUICollectionView+Additions.swift */; }; + 34BDB069A96125DAF2FEF6FF93A3F6AF /* IQToolbarPlaceholderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3B5F550C3AA900D117E22291DE5D67C /* IQToolbarPlaceholderConfiguration.swift */; }; + 35699581E68E1E6F640C681EEDEEE2B6 /* EPSignature-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A36BA6D882CE68172CAE63D99BCB5BA /* EPSignature-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3573FA382FBE08F99039CED491DB9FF0 /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8147290C4A326DADC3F305533BD64023 /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3806469B2739BBFA16083760004ED9B4 /* ImageGalleryViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5054DCBC2013F1894FA0EE7D6D99005 /* ImageGalleryViewDataSource.swift */; }; + 38CBE3196BDD577B5E72BC65508A77F8 /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A6291B42FA169A1C1919CB49B0B8509 /* IQTextView.swift */; }; + 38FD95DCC2D02D5B78BE9AEE48DBDF25 /* ConstraintsSetup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 290501CF6F70FA1835207284AF05BEE5 /* ConstraintsSetup.swift */; }; 3CCAA73182C09F77A88AFFA24E96DBB6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C54FCF3DBFE97D4603C0EACF18FA0D04 /* Foundation.framework */; }; - 3E21C9612D00C6B92D3FCE3589917729 /* UIView+Direction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 586B6FC37EB8231AC7C24C1CC2776384 /* UIView+Direction.swift */; }; - 4017CF2B3EE45E7E579E68E6FCFBF732 /* IQKeyboardManager+UIKeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A5338232CA701AD47A2EA3B534BD224 /* IQKeyboardManager+UIKeyboardNotification.swift */; }; - 40987E046BAD603A58CA00B9A7648588 /* FSPageViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5F711A94EB088CF457F893E60C568B4 /* FSPageViewLayout.swift */; }; - 42B931814C7B25871333D5DA9A0E2A41 /* IQKeyboardReturnKeyHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = E21781AECFBC7371F2118155ACE5C3C7 /* IQKeyboardReturnKeyHandler.swift */; }; - 4695B952627B345252A52CB26B7747CC /* OFF@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2E2B400DD678EA303FAFFBEF32CBCA41 /* OFF@3x.png */; }; - 488A767CF7494D169BFB886EDC470F5D /* FSPageViewTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B909C40450F7213C478AE50F7E2D18A9 /* FSPageViewTransformer.swift */; }; - 48A4D5E4D954CB4212E540A92570BBF0 /* UIView+Swizzling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EF3F9326AE21BCEED16E14D0872FE9C /* UIView+Swizzling.swift */; }; + 3E21C9612D00C6B92D3FCE3589917729 /* UIView+Direction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B432B6773BE3F0B4A6976820602F07A /* UIView+Direction.swift */; }; + 4017CF2B3EE45E7E579E68E6FCFBF732 /* IQKeyboardManager+UIKeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2DB0BCD57E720CE97C1C3CE74B75024 /* IQKeyboardManager+UIKeyboardNotification.swift */; }; + 42B931814C7B25871333D5DA9A0E2A41 /* IQKeyboardReturnKeyHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC4B66ABF37EFD118BC08264BBCA6461 /* IQKeyboardReturnKeyHandler.swift */; }; + 48A4D5E4D954CB4212E540A92570BBF0 /* UIView+Swizzling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 252B706186B99322E0DA5829FCC7D43C /* UIView+Swizzling.swift */; }; 4CDBAE55660ED186441E9E4EDE6B3D31 /* IQKeyboardManagerSwift.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8D8069D3964814114ACEC3084C010B59 /* IQKeyboardManagerSwift.bundle */; }; - 50374D59C8ED3AE3E41C30F25859F981 /* ImagePickerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21142CC27FC93E41241CC8948B1EE25C /* ImagePickerController.swift */; }; - 54BAE903D82C39392943869866252D93 /* IQNSArray+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1DC2A0ED79E1179E28CE75BFECCDA82 /* IQNSArray+Sort.swift */; }; - 597994C3AE8908B1E462BC03AC8C23FB /* IQKeyboardManagerCompatible.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5483FEE1B87041C4751EA1D4F3EF54 /* IQKeyboardManagerCompatible.swift */; }; + 50374D59C8ED3AE3E41C30F25859F981 /* ImagePickerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9067705903BD2E8C3EC9BD8EBF709221 /* ImagePickerController.swift */; }; + 54BAE903D82C39392943869866252D93 /* IQNSArray+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62160BE00E3966D4D52808B89DE0B1B3 /* IQNSArray+Sort.swift */; }; + 597994C3AE8908B1E462BC03AC8C23FB /* IQKeyboardManagerCompatible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49FC6FE3F43F76CA598D3253A1731EEB /* IQKeyboardManagerCompatible.swift */; }; + 5C4E571F3ADE020356DAF5143816FC55 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = A532EFEAAE9EEAA7CFA7DF04C7E1808B /* PrivacyInfo.xcprivacy */; }; 5D35C19C362961F919BE9820991D761E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C54FCF3DBFE97D4603C0EACF18FA0D04 /* Foundation.framework */; }; - 5F0469C5B154DC20B844EA2A9B7F8D42 /* IQPlaceholderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE58805A3FAC71C6A5782C1B1BB08069 /* IQPlaceholderable.swift */; }; - 5F62DAE67CF97B7C42471EA91B79AA9A /* IQTextFieldViewInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23B7EBFBD51FC4710CDE4AFAE46E8860 /* IQTextFieldViewInfoModel.swift */; }; - 61A0C05934861A0EACC1549F2419289A /* AUTO@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 664FCD8539D02C2C7ABBA15E9666F2B9 /* AUTO@3x.png */; }; - 6418A8A5D32E73D898AB155952180B0C /* LanguageManager-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DA4B76FEC2A143DA2EFFC6D3F7FB7B5A /* LanguageManager-iOS-dummy.m */; }; - 674C6B2E317E657D8EAD3CC73F608540 /* IQKeyboardManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEB26DB8656A60C8AE2B83EF56A1149 /* IQKeyboardManager+Debug.swift */; }; - 69C7244F5E0D41CF59E5ADC8952F8D0D /* FSPagerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842BA45676E86EFC650EFC7B33D1572F /* FSPagerViewCell.swift */; }; - 6D55C34EF7CE4718D8B2FE6CE95C5674 /* DefaultsKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 615EB6B3844737F49004E6E4A8F968A0 /* DefaultsKeys.swift */; }; - 6F875A0983E3FB0E0CC0BDA6376F73E8 /* String+Localiz.swift in Sources */ = {isa = PBXBuildFile; fileRef = 398208613C39BD5EF043841FA4CBF884 /* String+Localiz.swift */; }; - 6FAA62F8C663AAEDAB170956E9A298CC /* ImageGalleryLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54A9B08BB29EC7935F6A8F8ACD56BEB0 /* ImageGalleryLayout.swift */; }; - 701904768C60A3F9060518DD58EC2882 /* IQToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 926EAAA6426204DE1DF8D36D2E13EA74 /* IQToolbar.swift */; }; - 71B7397ADA300CDE41CB406BE694A8A2 /* cameraIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8F9A6C68497A6CFFB3FAA52682750752 /* cameraIcon@3x.png */; }; - 733CF7F19636AFF4A97708DFDE0AE53C /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BA790DC54E7A009FDDBBC07056093C41 /* IQKeyboardManagerSwift-dummy.m */; }; - 7399F0854271981516AA79727A0A06C8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C54FCF3DBFE97D4603C0EACF18FA0D04 /* Foundation.framework */; }; - 743ED1DCEC16DC2E7FAD8FBDD276EC8F /* ImagePicker-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DD48D4FC5BD3A99772F4FE6FDB643898 /* ImagePicker-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F0469C5B154DC20B844EA2A9B7F8D42 /* IQPlaceholderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3DC4A4D35E057E5F76427C838E3E495 /* IQPlaceholderable.swift */; }; + 5F62DAE67CF97B7C42471EA91B79AA9A /* IQTextFieldViewInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00AA2070B1A7F8ECC88B6E7F0EEB2167 /* IQTextFieldViewInfoModel.swift */; }; + 6418A8A5D32E73D898AB155952180B0C /* LanguageManager-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BF809679D3CFFBC72878EC9BFEA90F5E /* LanguageManager-iOS-dummy.m */; }; + 674C6B2E317E657D8EAD3CC73F608540 /* IQKeyboardManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B1D47B8C43A0DA0A05A410655A28153 /* IQKeyboardManager+Debug.swift */; }; + 6D55C34EF7CE4718D8B2FE6CE95C5674 /* DefaultsKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DDA4537FCBE11326C1D65EA43B3CC6D /* DefaultsKeys.swift */; }; + 6F875A0983E3FB0E0CC0BDA6376F73E8 /* String+Localiz.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D01E52DE74EF3C733B94F1E045CCD77 /* String+Localiz.swift */; }; + 6FAA62F8C663AAEDAB170956E9A298CC /* ImageGalleryLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84969C2137D2629DFFC29942F8B97FEB /* ImageGalleryLayout.swift */; }; + 701904768C60A3F9060518DD58EC2882 /* IQToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76805C9416BA1FC318E025ACA3B95EF /* IQToolbar.swift */; }; + 733CF7F19636AFF4A97708DFDE0AE53C /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D4270A3541F22B881BD953A68F6E73F9 /* IQKeyboardManagerSwift-dummy.m */; }; + 743ED1DCEC16DC2E7FAD8FBDD276EC8F /* ImagePicker-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF5381B2554B2BB1D7949E3B9A7DF79 /* ImagePicker-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7586D1882B962E1E31C28CC6396668B3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C63F26DA7ECAFB44B0A5DD0BC0E2F89 /* UIKit.framework */; }; - 784DF7F278DC988FEEECB999A9ADFCBB /* BottomContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A4F7BDE573EF1AD77F082087EBBC731 /* BottomContainerView.swift */; }; - 797DF46337EAC66E47C5ADAF32515524 /* NBBottomSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = E711836675BD919C63BEB7A0930B72B4 /* NBBottomSheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 784DF7F278DC988FEEECB999A9ADFCBB /* BottomContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F84A913AFEF518DF42A997F74EC8260 /* BottomContainerView.swift */; }; + 797DF46337EAC66E47C5ADAF32515524 /* NBBottomSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = C6AEEFA5613E0B7BF8F6425A154D6EC9 /* NBBottomSheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7B2263CFC47393D3FB5CD8D5F7EB57AD /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C63F26DA7ECAFB44B0A5DD0BC0E2F89 /* UIKit.framework */; }; - 7DB7E0E519A315B78D72BF7C63C64E30 /* ButtonPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = B021EB40B85B76049C30C2D063F0870D /* ButtonPicker.swift */; }; - 8086BD2DB5F1A0CC88E4F3386570A21C /* IQUITextFieldView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79655C283B54B5F907790F4E79C388EF /* IQUITextFieldView+Additions.swift */; }; - 8234444617FD513B81095D920BFA796B /* NBConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C698FD30D248D272DAE2F242C5D62EA2 /* NBConfiguration.swift */; }; - 82950EE4BDD57F74749742A3E1566073 /* IQKeyboardManager+UITextFieldViewNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EFB4A164AE952F817BA0A6FCE622791 /* IQKeyboardManager+UITextFieldViewNotification.swift */; }; - 829A79A8C324697D5A619C029AEB0063 /* CameraView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 343F83F1A08E56F19D01674A9BA4DC53 /* CameraView.swift */; }; - 852E6AB133CF7BDE7DE7D836AE201868 /* Languages.swift in Sources */ = {isa = PBXBuildFile; fileRef = CACF959977B91C5F65F381B36C452B6D /* Languages.swift */; }; - 8EAF267614A5AB6196921C15E719AE35 /* NBBottomSheetDismissalTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1DF93E2C3692DABCE7DF9D4735D2645 /* NBBottomSheetDismissalTransition.swift */; }; - 8ED2E941DF0803C8AA331D0D8C722615 /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 065FDC013F6128B451B9F622F8A98C11 /* IQBarButtonItem.swift */; }; - 8FDA28363A5E49017498FD69AAA8F59F /* IQKeyboardListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1BD1A58666D6C0FD408F4DB3ADC8107 /* IQKeyboardListener.swift */; }; - 907FCA3049CAAF64B579D08D339D118D /* IQBarButtonItemConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DA62F8724EC161B523761C4D312EE6A /* IQBarButtonItemConfiguration.swift */; }; - 91611428D06F5E61CECF70A53E6DA6C6 /* FSPagerViewObjcCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = F047971CD665BC407A8DAA32AD3A9B98 /* FSPagerViewObjcCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 93C0AD77AB416AE90A6BD03E44A9B684 /* EPSignature-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B3FCB83859385DB3694F04D44B40FE18 /* EPSignature-dummy.m */; }; - 94F893223EB4C1C0F829C17900114AFA /* IQUIScrollView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8A8D208D764CFAC89604E6813F1444E /* IQUIScrollView+Additions.swift */; }; - 9517FE286FAA3C856DC6C1B6F91F48CF /* Pods-MiniScanner-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E8A070B594D65627DD64F5ABC65D271 /* Pods-MiniScanner-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 960957461D403847E92AF1825B4D8506 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = B638343F1BC71A9A9CD3A6D6CA749DC7 /* PrivacyInfo.xcprivacy */; }; + 7DB7E0E519A315B78D72BF7C63C64E30 /* ButtonPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4648CA1088D11129C0BDD49912D6FAB /* ButtonPicker.swift */; }; + 8086BD2DB5F1A0CC88E4F3386570A21C /* IQUITextFieldView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 116DA05004680C76EAB707C0943392EB /* IQUITextFieldView+Additions.swift */; }; + 8234444617FD513B81095D920BFA796B /* NBConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD46A963E6CCE8CD900BA8A7331D7D8C /* NBConfiguration.swift */; }; + 82950EE4BDD57F74749742A3E1566073 /* IQKeyboardManager+UITextFieldViewNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0DA73612FA4F954FCE02EA0ADACE634 /* IQKeyboardManager+UITextFieldViewNotification.swift */; }; + 829A79A8C324697D5A619C029AEB0063 /* CameraView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC2ECE9C7A88988A534C8F7590F3AB64 /* CameraView.swift */; }; + 852E6AB133CF7BDE7DE7D836AE201868 /* Languages.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2B28EA5FE2C09FCEF4DF47D34186FB7 /* Languages.swift */; }; + 8AE718666177B657AE0BBD08AF829DD1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C54FCF3DBFE97D4603C0EACF18FA0D04 /* Foundation.framework */; }; + 8D935C83E5D7B42A4C6439FFA767CE24 /* AUTO@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = EB8D9081C43164E02C60F65C02702B8E /* AUTO@3x.png */; }; + 8EAF267614A5AB6196921C15E719AE35 /* NBBottomSheetDismissalTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97037D70AD7F37FBCDB7561DA20D7D2D /* NBBottomSheetDismissalTransition.swift */; }; + 8ED2E941DF0803C8AA331D0D8C722615 /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88000230AEFE1CF1FC184347AAE598B /* IQBarButtonItem.swift */; }; + 8FDA28363A5E49017498FD69AAA8F59F /* IQKeyboardListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 400224F8C71E7053C79E8D5E509534F4 /* IQKeyboardListener.swift */; }; + 907FCA3049CAAF64B579D08D339D118D /* IQBarButtonItemConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419AB69B674D6C318AC58EE6D9AFF102 /* IQBarButtonItemConfiguration.swift */; }; + 93C0AD77AB416AE90A6BD03E44A9B684 /* EPSignature-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E24E6B8D32E615F0FEF0A78F3C181A09 /* EPSignature-dummy.m */; }; + 94F893223EB4C1C0F829C17900114AFA /* IQUIScrollView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5E1D310DD754E122DEEE009481A2D6 /* IQUIScrollView+Additions.swift */; }; 98A4D0D5928A35C7DB3D9272187789A8 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3DF46AD6E25D68DB361974528992221 /* CoreGraphics.framework */; }; - 9A00A25ED34A7687C62B02EBB76C1248 /* IQKeyboardConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B700D2C4CED5ED22050429C7997CF1FE /* IQKeyboardConfiguration.swift */; }; - 9E704111CAAACBF64155A576FC337323 /* LanguageManager-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = ED50ABC97C7298629CFFE2835E5645AE /* LanguageManager-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9F78D56352F7D932DCEBE416C668C7BA /* IQKeyboardManager+ToolbarActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F23D0E0AE3BDC7AE6A7D331A0FF5AF6 /* IQKeyboardManager+ToolbarActions.swift */; }; - A4AE2538C33D06CB8C70D5FF35A65D98 /* EPSignatureViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF61B6A70C39B0ACDA33B583642A26EE /* EPSignatureViewController.swift */; }; - A5E69CC013C4311C8AF52C7F7AB095C9 /* IQUITableView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B0BFC63CD2F3B0DF56912D4F54E8 /* IQUITableView+Additions.swift */; }; - AE7D065E1D48171258FD8F07F7CD592C /* IQKeyboardManagerConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC43EDC562847626ACF7B4E93E5462EF /* IQKeyboardManagerConstants.swift */; }; - AF715064CF6458D3D89BB563DFDB00C6 /* UIButton+Direction.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4D36302D2F7234AEEC28003C3244EB4 /* UIButton+Direction.swift */; }; - B0E87F4E370B3A0CD14B50D219AE7B0B /* StackView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8CA0DD8AA6C4033E65CAA6FE83870F1 /* StackView.swift */; }; + 9A00A25ED34A7687C62B02EBB76C1248 /* IQKeyboardConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 297848FCF8FE33D0DA0FDA6C8B1F5CC3 /* IQKeyboardConfiguration.swift */; }; + 9E704111CAAACBF64155A576FC337323 /* LanguageManager-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3510141CBBD30B465F757E0A8E2B1097 /* LanguageManager-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9F78D56352F7D932DCEBE416C668C7BA /* IQKeyboardManager+ToolbarActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9651F46100B3C105EE27B92C1DFFCEC /* IQKeyboardManager+ToolbarActions.swift */; }; + A213B981B47C6B4734589B6ED9469132 /* OFF@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 18CC4F437D7A0F3454C4F89BD6CE0AEC /* OFF@3x.png */; }; + A4AE2538C33D06CB8C70D5FF35A65D98 /* EPSignatureViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1A5BF586C35098EC908E7870B407170 /* EPSignatureViewController.swift */; }; + A5E69CC013C4311C8AF52C7F7AB095C9 /* IQUITableView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 619978A0C0036454C22A81173BAA5A6A /* IQUITableView+Additions.swift */; }; + AE7D065E1D48171258FD8F07F7CD592C /* IQKeyboardManagerConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9F19506C84032240A21541F9EFCA895 /* IQKeyboardManagerConstants.swift */; }; + AF715064CF6458D3D89BB563DFDB00C6 /* UIButton+Direction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4E6D4AE8BCE2646794F28F0E24A08D1 /* UIButton+Direction.swift */; }; + B0E87F4E370B3A0CD14B50D219AE7B0B /* StackView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 467961922684B2F4C4295CBE0C9CD940 /* StackView.swift */; }; B1A786B1A2F11EBD1BF77305EEB710F5 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2EE6749FC108D414ECB83B77EF11BD86 /* QuartzCore.framework */; }; - B1BFC54288364884DDEAE75027BABE1A /* IQActiveConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 831781174B420BA2000C5A20F9B1A155 /* IQActiveConfiguration.swift */; }; - B9CF878085ABA2991A9C6F12F9B9DAB3 /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB37A30323A7D2ED16581BA15B8351D /* IQTitleBarButtonItem.swift */; }; + B1BFC54288364884DDEAE75027BABE1A /* IQActiveConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FE3DE7F264E30C392DCECA7921DAEF2 /* IQActiveConfiguration.swift */; }; + B9CF878085ABA2991A9C6F12F9B9DAB3 /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A100F9EA89810A00541755ECD7BBB307 /* IQTitleBarButtonItem.swift */; }; BD0139B5F1C96514CB66C4310AAF1DF5 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56B28C4E9F718651E6E1B010F31566EB /* AVFoundation.framework */; }; - C116540980BCB8D0E54215D9E8C7AD78 /* video@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5D646977F7C0DA29D63C4E18D9DD6630 /* video@3x.png */; }; - C85C11573FFE927A84AD0C8BE456AD81 /* FSPagerViewLayoutAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 891FABB9A51285F499148E921B1A8E24 /* FSPagerViewLayoutAttributes.swift */; }; - CA6D6333D723B4391BD689F68FCF23DF /* EPSignatureView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE559964BD58119769FB19BB95144A6A /* EPSignatureView.swift */; }; - CA8CFC49D2338D41DA4E83F941867CEB /* ImagePicker-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AAF24BB95964A47FF71115DCACE5CC1 /* ImagePicker-dummy.m */; }; + C884AFFEC6B0F6540E8A5593250D5741 /* Pods-MiniScanner-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E8A070B594D65627DD64F5ABC65D271 /* Pods-MiniScanner-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA6D6333D723B4391BD689F68FCF23DF /* EPSignatureView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 452182903F9A76184461CC377DB62A70 /* EPSignatureView.swift */; }; + CA8CFC49D2338D41DA4E83F941867CEB /* ImagePicker-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FD2850880C4A8033AED333F5DFAE328 /* ImagePicker-dummy.m */; }; CC897E71556348377B4C31307E208C80 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C54FCF3DBFE97D4603C0EACF18FA0D04 /* Foundation.framework */; }; - CC96488C33BFB3BCEE4A665A438CAC36 /* IQUIViewController+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B35CF76304163C551A5E4B592066D0D /* IQUIViewController+Additions.swift */; }; - CE2C6FD104092EA3F2F0A357C72460A8 /* FSPagerView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 01ACC366C89CCCD7C9CF3E69462AC2A7 /* FSPagerView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D2A598E7174826A7B04036E7AC8AA3B6 /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D0027E6314671B943C4497115466711 /* Storage.swift */; }; - D3D1F63C30E95311B687FA924B872C15 /* IQKeyboardManager+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F2207491E92F152C27D2B4A764A6A93 /* IQKeyboardManager+Deprecated.swift */; }; - D46F90A0F6FC8F1D2AA4129BC2A934DD /* NBBottomSheet-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1935C8E9966B3C94DD69B219D3DBFBD0 /* NBBottomSheet-dummy.m */; }; + CC96488C33BFB3BCEE4A665A438CAC36 /* IQUIViewController+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5598E57D63117C1B54ADBB7A187B232 /* IQUIViewController+Additions.swift */; }; + D2A598E7174826A7B04036E7AC8AA3B6 /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCB418B4C0BF451B734FFA48AAD9ADF6 /* Storage.swift */; }; + D3D1F63C30E95311B687FA924B872C15 /* IQKeyboardManager+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C5E34F15E4BBDA3480406FF35C1903 /* IQKeyboardManager+Deprecated.swift */; }; + D46F90A0F6FC8F1D2AA4129BC2A934DD /* NBBottomSheet-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AD71C20FAD4FE7E08FA8091857A2FDCB /* NBBottomSheet-dummy.m */; }; D4BB4D928CB44E6CE753BEA14E5AC918 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C54FCF3DBFE97D4603C0EACF18FA0D04 /* Foundation.framework */; }; - D8322CBE73400EE4382D1A042D2D53D3 /* IQUIView+IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DF9BB8A2089DB5AEEA4B43132D0B074 /* IQUIView+IQKeyboardToolbar.swift */; }; - D88C2EA8ACCC0DE031D9E7A768062E2C /* IQKeyboardManager+Toolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88DFD4B8DC15592A7CD38D8AD9C01668 /* IQKeyboardManager+Toolbar.swift */; }; - DE3B5070A41194C21898D92DBFFCBE4C /* IQRootControllerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24533AECDB8F27FACE2D96631FC3F307 /* IQRootControllerConfiguration.swift */; }; - E483FA24409A56AAEDF8A1DEC5F55F16 /* UIImage+NextPrevious.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC7F01FAC278F9B096CFFD78497206CF /* UIImage+NextPrevious.swift */; }; - E8770A941545BB190D76BF7E5262797D /* IQToolbarConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A9AA0FBABA9E9EEF6521C23B2031158 /* IQToolbarConfiguration.swift */; }; - EA280E998F6C42AE8492336F762F92D5 /* EPExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E288979D79A43A7925DB41055CDD376 /* EPExtensions.swift */; }; - EA89DFEFE15FAD82868C74E94F6F1B75 /* FSPagerViewObjcCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = B7F2D378ED96DA779D964000E6DECED9 /* FSPagerViewObjcCompat.m */; }; - EBB5F245DBEEB13D48F09E0DD75A6C95 /* IQKeyboardManager+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2209E8AC4BD6C9607BD14A1D48B3FBB3 /* IQKeyboardManager+Position.swift */; }; - ECA11CD4E20DFCA3327CB006B10A3DB8 /* FSPagerCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E9452E6ADBDB9FF5D00CEDC3ED637F3 /* FSPagerCollectionView.swift */; }; - ECFE64B0759EFA4F555994B6CDCED624 /* AssetManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F6DD614B85D0662209A3ADCFA367295 /* AssetManager.swift */; }; - F2562CFCEC42E2989BADC7E823F2C9C3 /* FSPageControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6D6492D4AE05CD36F797199E44F1805 /* FSPageControl.swift */; }; - F2AF558F96F3C43C3E4C747E45E5637C /* LocationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAA72CEA94002E53D03EC7DCC0E59413 /* LocationManager.swift */; }; - F2ED9C9337B84D1E42E67BF7F7DAD72C /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90C7704EF389F83C731970D2CDF6595B /* Configuration.swift */; }; - F56475ACE1A1CFE322DBFA35CDA1A204 /* NBBottomSheetConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8059AF588641259180B6DAD45BEF496B /* NBBottomSheetConfiguration.swift */; }; - F6702D89104E55C112FE16943BE7D41A /* FSPagerView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A54F7427340E254B559EC1244CA2E45 /* FSPagerView-dummy.m */; }; - F681FB74C756E0AAFFDC0D414EBD8FA0 /* IQScrollViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 545688259B1D4CD8A59AF3D7E0AFE7B9 /* IQScrollViewConfiguration.swift */; }; - F7C3A4FED58118F9ADC5B4AF9A10B9FC /* ViewDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EA72F0B0DD57B9D078AF8EFCE412455 /* ViewDirection.swift */; }; - F7E2900D9AF732C627F184A258F48DF0 /* NBBottomSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A60D99B014C4219B8F7BF725B9648E36 /* NBBottomSheetController.swift */; }; - F9DE1A3C506E506F4DA4B7714359E8D1 /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B4086624F01B0B30DDB90F23478F288 /* IQKeyboardManager.swift */; }; - FB0A76B10B5927494469B16B28CF2B9A /* NBBottomSheetPresentationTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AA92C612F872EADC2BC40A15E01DB23 /* NBBottomSheetPresentationTransition.swift */; }; - FDEFBFB34E35A4BB332264E0CACCF5D8 /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32A5E10DAD7E67CBAFB25E12CF020274 /* IQInvocation.swift */; }; - FE4936BFE1B6B6A9E8136010E413A24B /* NBBottomSheet-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 65E35E2A8DCF85A60B0EF9389B0495AE /* NBBottomSheet-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF8C6AC907C8F4B527F9A0CBDBCC7F92 /* ImageGalleryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE5D7D46BA438C135B812D0C145CBE6C /* ImageGalleryView.swift */; }; + D8322CBE73400EE4382D1A042D2D53D3 /* IQUIView+IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB5F2D5DFB52DE92C94A23801BAC451C /* IQUIView+IQKeyboardToolbar.swift */; }; + D88C2EA8ACCC0DE031D9E7A768062E2C /* IQKeyboardManager+Toolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1229814968DD5876FBA87DDA81C5B8F /* IQKeyboardManager+Toolbar.swift */; }; + DE3B5070A41194C21898D92DBFFCBE4C /* IQRootControllerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 878EC7606D056CAB26A578762AF922D7 /* IQRootControllerConfiguration.swift */; }; + E483FA24409A56AAEDF8A1DEC5F55F16 /* UIImage+NextPrevious.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEB8E045AED5393DCC7FA1C76AB59AB8 /* UIImage+NextPrevious.swift */; }; + E8770A941545BB190D76BF7E5262797D /* IQToolbarConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3243FB397BF2AFE225A1FC09542DBF5D /* IQToolbarConfiguration.swift */; }; + EA280E998F6C42AE8492336F762F92D5 /* EPExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9D8E28679896AEA1627BA66F8580C2 /* EPExtensions.swift */; }; + EBB5F245DBEEB13D48F09E0DD75A6C95 /* IQKeyboardManager+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05DDE99E61633BB77D72F46FD10F71BC /* IQKeyboardManager+Position.swift */; }; + ECFE64B0759EFA4F555994B6CDCED624 /* AssetManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9E511B375EE87D380DE8D4B00AE28F4 /* AssetManager.swift */; }; + F2AF558F96F3C43C3E4C747E45E5637C /* LocationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D01404D467A420F82D2829CE6CD8BB4 /* LocationManager.swift */; }; + F2ED9C9337B84D1E42E67BF7F7DAD72C /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A6AE173040683BAF2BF0ACE7CB13A0A /* Configuration.swift */; }; + F56475ACE1A1CFE322DBFA35CDA1A204 /* NBBottomSheetConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = A72C2CB61DAC20DBF7210307C41485C5 /* NBBottomSheetConfiguration.swift */; }; + F681FB74C756E0AAFFDC0D414EBD8FA0 /* IQScrollViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 486835CC5D14C1EA193F8575CA89FDCC /* IQScrollViewConfiguration.swift */; }; + F7C3A4FED58118F9ADC5B4AF9A10B9FC /* ViewDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC259076A4D444F235DABE44D7425021 /* ViewDirection.swift */; }; + F7E2900D9AF732C627F184A258F48DF0 /* NBBottomSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54323777101C6AB180A413C0B2DB23B9 /* NBBottomSheetController.swift */; }; + F9DE1A3C506E506F4DA4B7714359E8D1 /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A353C25676960291A3718B5AFDB81A33 /* IQKeyboardManager.swift */; }; + FB0A76B10B5927494469B16B28CF2B9A /* NBBottomSheetPresentationTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B378319A98BB422CBDBE14796C501A /* NBBottomSheetPresentationTransition.swift */; }; + FDEFBFB34E35A4BB332264E0CACCF5D8 /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A12B5A63F2CB09B7D22B7E2F4A2210EB /* IQInvocation.swift */; }; + FE4936BFE1B6B6A9E8136010E413A24B /* NBBottomSheet-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 389AA43304A03366FC2510859AA7DCBA /* NBBottomSheet-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FF74A846B2EEC0D52379B48D7963D8C0 /* focusIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9FC1B2AF5635D8020B43F30629EC2712 /* focusIcon@3x.png */; }; + FF8C6AC907C8F4B527F9A0CBDBCC7F92 /* ImageGalleryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21D53725C7625527BF97643CF7655C26 /* ImageGalleryView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0473CB2089AEB22D5A94042369CBE127 /* PBXContainerItemProxy */ = { + 19D95F1858EF2D6E80811860CFD6BF92 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 01CB8D6098C21E12CE735619344DE81E; - remoteInfo = ImagePicker; + remoteGlobalIDString = 727C2007A89D1AD73613E3E2E22998E5; + remoteInfo = NBBottomSheet; }; - 195F278E699A41C19ED473B0310CAC62 /* PBXContainerItemProxy */ = { + 6CD75698768741DC0335DCB2F06CB5BC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 3CAF5EBFE5D1550CFF58AEC93594990A; - remoteInfo = EPSignature; + remoteGlobalIDString = 982A68D37F5DCBC1FC1FDC0BB2F0EB8E; + remoteInfo = "IQKeyboardManagerSwift-IQKeyboardManagerSwift"; }; - 35F75C3FB936C4BE71A7B3A5CE8352DE /* PBXContainerItemProxy */ = { + 8292BF480C5137113C3A6C342933F986 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 75F1EA88CB9544AB5CBE20DEC9A011AE; remoteInfo = "LanguageManager-iOS"; }; - 368B8A0D7A211FB1D8031E50553E22B1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 982A68D37F5DCBC1FC1FDC0BB2F0EB8E; - remoteInfo = "IQKeyboardManagerSwift-IQKeyboardManagerSwift"; - }; - 86BCB3533B3E4CC4A62FDD4F9D7AEF5C /* PBXContainerItemProxy */ = { + D06F098EB5FE1B281549C568AA85EEA9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 614D1818852890AC7D3CDF68D512C370; remoteInfo = "ImagePicker-ImagePicker"; }; - AE6E02E3D311CB4AEC5F673F47B2F7DE /* PBXContainerItemProxy */ = { + D96B4C07AAAD52B947C6F8CFEF7E8807 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = D4F8239FB329387A8476B964D92D92E7; - remoteInfo = FSPagerView; + remoteGlobalIDString = B490E7485944099E16C9CBD79119D1D4; + remoteInfo = IQKeyboardManagerSwift; }; - C3EEE11D57DF83B4A602A0BB6B6D5420 /* PBXContainerItemProxy */ = { + F3097459B372082D9C20BEF06209FBD6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = B490E7485944099E16C9CBD79119D1D4; - remoteInfo = IQKeyboardManagerSwift; + remoteGlobalIDString = 3CAF5EBFE5D1550CFF58AEC93594990A; + remoteInfo = EPSignature; }; - F39E3FCE8EA4C0F8CBCC8FCA9435B319 /* PBXContainerItemProxy */ = { + FBE5961EEB250DF2DACF4F88C36BCC1E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 727C2007A89D1AD73613E3E2E22998E5; - remoteInfo = NBBottomSheet; + remoteGlobalIDString = 01CB8D6098C21E12CE735619344DE81E; + remoteInfo = ImagePicker; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 01ACC366C89CCCD7C9CF3E69462AC2A7 /* FSPagerView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FSPagerView-umbrella.h"; sourceTree = "<group>"; }; - 01FB3E845976BA7356CB95994A0420CD /* IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardManagerSwift-Info.plist"; sourceTree = "<group>"; }; - 04420AA069E60E2676B1C8145D489AFE /* IQKeyboardManagerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.release.xcconfig; sourceTree = "<group>"; }; - 065FDC013F6128B451B9F622F8A98C11 /* IQBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift; sourceTree = "<group>"; }; - 085D4171A3F780C04EFB71FBC8E635E1 /* LanguageManager-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "LanguageManager-iOS.modulemap"; sourceTree = "<group>"; }; + 00AA2070B1A7F8ECC88B6E7F0EEB2167 /* IQTextFieldViewInfoModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextFieldViewInfoModel.swift; path = IQKeyboardManagerSwift/ReturnKeyHandler/IQTextFieldViewInfoModel.swift; sourceTree = "<group>"; }; + 00B378319A98BB422CBDBE14796C501A /* NBBottomSheetPresentationTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NBBottomSheetPresentationTransition.swift; path = NBBottomSheet/NBBottomSheet/Sources/NBBottomSheetPresentationTransition.swift; sourceTree = "<group>"; }; + 02E924FDDE7F7B51AEC552C94D9C9AD6 /* VideoInfoView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoInfoView.swift; path = Source/ImageGallery/VideoInfoView.swift; sourceTree = "<group>"; }; + 05DDE99E61633BB77D72F46FD10F71BC /* IQKeyboardManager+Position.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Position.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Position.swift"; sourceTree = "<group>"; }; + 081BAFFE15D81F33E77489E60A036BE7 /* selectedImageGallery@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "selectedImageGallery@3x.png"; path = "Images/selectedImageGallery@3x.png"; sourceTree = "<group>"; }; + 0A36BA6D882CE68172CAE63D99BCB5BA /* EPSignature-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "EPSignature-umbrella.h"; sourceTree = "<group>"; }; + 0AF6D83B6BEECA27C12EB10E96CF4A52 /* ResourceBundle-ImagePicker-ImagePicker-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-ImagePicker-ImagePicker-Info.plist"; sourceTree = "<group>"; }; + 0B1626D50D1FBDF5976CCCE6F16928A1 /* NBBottomSheet-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "NBBottomSheet-Info.plist"; sourceTree = "<group>"; }; + 0CB32F67F5B5E9A2C263A017E98041AC /* NBBottomSheet-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NBBottomSheet-prefix.pch"; sourceTree = "<group>"; }; + 0CBC68B38C0421EC0AE36B43FB2C7636 /* ImagePicker.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ImagePicker.release.xcconfig; sourceTree = "<group>"; }; 0E8A070B594D65627DD64F5ABC65D271 /* Pods-MiniScanner-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MiniScanner-umbrella.h"; sourceTree = "<group>"; }; - 0EFB4A164AE952F817BA0A6FCE622791 /* IQKeyboardManager+UITextFieldViewNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UITextFieldViewNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+UITextFieldViewNotification.swift"; sourceTree = "<group>"; }; - 0F47FB5E28EE8C8342B1776D813D1A4C /* FSPagerView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FSPagerView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 116DA05004680C76EAB707C0943392EB /* IQUITextFieldView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITextFieldView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUITextFieldView+Additions.swift"; sourceTree = "<group>"; }; 123ADF4A6B2F1DEBA5B7482D4983B685 /* Pods-MiniScanner-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MiniScanner-dummy.m"; sourceTree = "<group>"; }; - 13CD760B3298D3E6B007FC21AEFDEF16 /* LanguageManager-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "LanguageManager-iOS-Info.plist"; sourceTree = "<group>"; }; - 1935C8E9966B3C94DD69B219D3DBFBD0 /* NBBottomSheet-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NBBottomSheet-dummy.m"; sourceTree = "<group>"; }; - 1B4086624F01B0B30DDB90F23478F288 /* IQKeyboardManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManager.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager.swift; sourceTree = "<group>"; }; - 1BB9A00426C7107F694592F19527BE69 /* NBBottomSheetTransitioningDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NBBottomSheetTransitioningDelegate.swift; path = NBBottomSheet/NBBottomSheet/Sources/NBBottomSheetTransitioningDelegate.swift; sourceTree = "<group>"; }; + 17EF00C659AFF94B598E7501E2992350 /* ImagePicker.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ImagePicker.modulemap; sourceTree = "<group>"; }; + 180962FC6F75908EC73049ADB28FC887 /* ImagePicker-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ImagePicker-Info.plist"; sourceTree = "<group>"; }; + 187B8EDBE8957C190B1EB7C8F949ED80 /* IQPreviousNextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPreviousNextView.swift; path = IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift; sourceTree = "<group>"; }; + 18CC4F437D7A0F3454C4F89BD6CE0AEC /* OFF@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "OFF@3x.png"; path = "Images/OFF@3x.png"; sourceTree = "<group>"; }; 1C63F26DA7ECAFB44B0A5DD0BC0E2F89 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 1E288979D79A43A7925DB41055CDD376 /* EPExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EPExtensions.swift; path = Pod/Classes/EPExtensions.swift; sourceTree = "<group>"; }; - 1EF3F9326AE21BCEED16E14D0872FE9C /* UIView+Swizzling.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Swizzling.swift"; path = "LanguageManager-iOS/Classes/Helpers/Extensions/UIView+Swizzling.swift"; sourceTree = "<group>"; }; - 21142CC27FC93E41241CC8948B1EE25C /* ImagePickerController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePickerController.swift; path = Source/ImagePickerController.swift; sourceTree = "<group>"; }; + 1D01404D467A420F82D2829CE6CD8BB4 /* LocationManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocationManager.swift; path = Source/LocationManager.swift; sourceTree = "<group>"; }; + 1DA09D0759A4DDF814A83483F582ADB1 /* EPSignature-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "EPSignature-Info.plist"; sourceTree = "<group>"; }; + 2006321B115FD55474FD1B985C1979FA /* EPSignature.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = EPSignature.release.xcconfig; sourceTree = "<group>"; }; 21A62BB316C6336F03408E50D730FD01 /* Pods-MiniScanner.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MiniScanner.modulemap"; sourceTree = "<group>"; }; - 2209E8AC4BD6C9607BD14A1D48B3FBB3 /* IQKeyboardManager+Position.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Position.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Position.swift"; sourceTree = "<group>"; }; - 22FCBFA0E2A7651B248460AD3CB4DE32 /* NBBottomSheet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NBBottomSheet.debug.xcconfig; sourceTree = "<group>"; }; - 23A10D783B0ECA5BA75D4E94BDA01957 /* NBBottomSheet.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = NBBottomSheet.modulemap; sourceTree = "<group>"; }; - 23B7EBFBD51FC4710CDE4AFAE46E8860 /* IQTextFieldViewInfoModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextFieldViewInfoModel.swift; path = IQKeyboardManagerSwift/ReturnKeyHandler/IQTextFieldViewInfoModel.swift; sourceTree = "<group>"; }; - 24533AECDB8F27FACE2D96631FC3F307 /* IQRootControllerConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQRootControllerConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQRootControllerConfiguration.swift; sourceTree = "<group>"; }; - 2D93C4B3BEDE27E7A936E76984B03C35 /* EPSignatureViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = EPSignatureViewController.xib; path = Pod/Classes/EPSignatureViewController.xib; sourceTree = "<group>"; }; - 2E2B400DD678EA303FAFFBEF32CBCA41 /* OFF@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "OFF@3x.png"; path = "Images/OFF@3x.png"; sourceTree = "<group>"; }; + 21D53725C7625527BF97643CF7655C26 /* ImageGalleryView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageGalleryView.swift; path = Source/ImageGallery/ImageGalleryView.swift; sourceTree = "<group>"; }; + 252B706186B99322E0DA5829FCC7D43C /* UIView+Swizzling.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Swizzling.swift"; path = "LanguageManager-iOS/Classes/Helpers/Extensions/UIView+Swizzling.swift"; sourceTree = "<group>"; }; + 26EDF88E14046AAC34BFF99F97D23B05 /* NBBottomSheet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NBBottomSheet.release.xcconfig; sourceTree = "<group>"; }; + 290501CF6F70FA1835207284AF05BEE5 /* ConstraintsSetup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintsSetup.swift; path = Source/Extensions/ConstraintsSetup.swift; sourceTree = "<group>"; }; + 297848FCF8FE33D0DA0FDA6C8B1F5CC3 /* IQKeyboardConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQKeyboardConfiguration.swift; sourceTree = "<group>"; }; + 297D96869095AA06F276F3DA5DD575B7 /* CameraMan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CameraMan.swift; path = Source/CameraView/CameraMan.swift; sourceTree = "<group>"; }; + 2A6AE173040683BAF2BF0ACE7CB13A0A /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Source/Configuration.swift; sourceTree = "<group>"; }; + 2AC4CEA5F2332B5B286CA6B73D2643EF /* ImageGalleryViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageGalleryViewCell.swift; path = Source/ImageGallery/ImageGalleryViewCell.swift; sourceTree = "<group>"; }; + 2E9D8E28679896AEA1627BA66F8580C2 /* EPExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EPExtensions.swift; path = Pod/Classes/EPExtensions.swift; sourceTree = "<group>"; }; 2EE6749FC108D414ECB83B77EF11BD86 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 2EEF70A7586548C9681199386735B949 /* LanguageManager-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "LanguageManager-iOS.debug.xcconfig"; sourceTree = "<group>"; }; - 309F127A50B023B6041C44942C9079DE /* IQTextFieldViewInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextFieldViewInfo.swift; path = IQKeyboardManagerSwift/LIsteners/Info/IQTextFieldViewInfo.swift; sourceTree = "<group>"; }; - 30A55721765A033C43BEE85DF167DC60 /* ImagePicker.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ImagePicker.modulemap; sourceTree = "<group>"; }; - 317125123DFF6A76FF8664EF536038C2 /* ResourceBundle-ImagePicker-ImagePicker-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-ImagePicker-ImagePicker-Info.plist"; sourceTree = "<group>"; }; - 32A5E10DAD7E67CBAFB25E12CF020274 /* IQInvocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQInvocation.swift; path = IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift; sourceTree = "<group>"; }; + 3243FB397BF2AFE225A1FC09542DBF5D /* IQToolbarConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbarConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQToolbarConfiguration.swift; sourceTree = "<group>"; }; + 32CC609D1546AF3789419217412783D0 /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = "<group>"; }; 3438B9790556194C521D4C9806D29C85 /* Pods_MiniScanner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MiniScanner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 343F83F1A08E56F19D01674A9BA4DC53 /* CameraView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CameraView.swift; path = Source/CameraView/CameraView.swift; sourceTree = "<group>"; }; - 398208613C39BD5EF043841FA4CBF884 /* String+Localiz.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Localiz.swift"; path = "LanguageManager-iOS/Classes/Helpers/Extensions/String+Localiz.swift"; sourceTree = "<group>"; }; - 3AA92C612F872EADC2BC40A15E01DB23 /* NBBottomSheetPresentationTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NBBottomSheetPresentationTransition.swift; path = NBBottomSheet/NBBottomSheet/Sources/NBBottomSheetPresentationTransition.swift; sourceTree = "<group>"; }; + 3510141CBBD30B465F757E0A8E2B1097 /* LanguageManager-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LanguageManager-iOS-umbrella.h"; sourceTree = "<group>"; }; + 389AA43304A03366FC2510859AA7DCBA /* NBBottomSheet-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NBBottomSheet-umbrella.h"; sourceTree = "<group>"; }; 3B6258C4E2C1059AABC67D66F9314FE8 /* Pods-MiniScanner-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MiniScanner-acknowledgements.markdown"; sourceTree = "<group>"; }; - 3B78794BA632342FFC447557E4671B16 /* CameraMan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CameraMan.swift; path = Source/CameraView/CameraMan.swift; sourceTree = "<group>"; }; - 3C28E959FA9C6343351C3EA1ED606EBA /* EPSignature-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "EPSignature-Info.plist"; sourceTree = "<group>"; }; - 3DB66972AE146B779F56CFD49B324220 /* IQTextFieldViewListener.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextFieldViewListener.swift; path = IQKeyboardManagerSwift/LIsteners/IQTextFieldViewListener.swift; sourceTree = "<group>"; }; - 3DF9BB8A2089DB5AEEA4B43132D0B074 /* IQUIView+IQKeyboardToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+IQKeyboardToolbar.swift"; path = "IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift"; sourceTree = "<group>"; }; + 3D666C16AFD99E3736270D569B5DE2F1 /* EPSignature.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = EPSignature.modulemap; sourceTree = "<group>"; }; 3DFAC6F70B9CECADF5873F487AF082BA /* EPSignature.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EPSignature.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3E9452E6ADBDB9FF5D00CEDC3ED637F3 /* FSPagerCollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FSPagerCollectionView.swift; path = Sources/FSPagerCollectionView.swift; sourceTree = "<group>"; }; - 4105CD9664E76F34242222CF357D24ED /* FSPagerView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FSPagerView-prefix.pch"; sourceTree = "<group>"; }; - 4138C0C249C44F4ED4EF526B81270B66 /* LanguageManager-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LanguageManager-iOS-prefix.pch"; sourceTree = "<group>"; }; - 47978E33AA1FE786BB675EA3F66DE381 /* ImageStack.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageStack.swift; path = Source/BottomView/ImageStack.swift; sourceTree = "<group>"; }; - 47A7457CB008481373FBC626968AD770 /* IQUIView+IQKeyboardToolbarDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+IQKeyboardToolbarDeprecated.swift"; path = "IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbarDeprecated.swift"; sourceTree = "<group>"; }; - 490673E82DCDC51D3CF4E4936D75E6F6 /* FSPagerView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FSPagerView-Info.plist"; sourceTree = "<group>"; }; - 4A4F7BDE573EF1AD77F082087EBBC731 /* BottomContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomContainerView.swift; path = Source/BottomView/BottomContainerView.swift; sourceTree = "<group>"; }; - 4A5338232CA701AD47A2EA3B534BD224 /* IQKeyboardManager+UIKeyboardNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UIKeyboardNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+UIKeyboardNotification.swift"; sourceTree = "<group>"; }; - 4AAF24BB95964A47FF71115DCACE5CC1 /* ImagePicker-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ImagePicker-dummy.m"; sourceTree = "<group>"; }; - 4CEB26DB8656A60C8AE2B83EF56A1149 /* IQKeyboardManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Debug.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Debug.swift"; sourceTree = "<group>"; }; - 4D0027E6314671B943C4497115466711 /* Storage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Storage.swift; path = "LanguageManager-iOS/Classes/Helpers/Storage.swift"; sourceTree = "<group>"; }; - 4DA62F8724EC161B523761C4D312EE6A /* IQBarButtonItemConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItemConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQBarButtonItemConfiguration.swift; sourceTree = "<group>"; }; - 4DB37A30323A7D2ED16581BA15B8351D /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTitleBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift; sourceTree = "<group>"; }; - 4E8E62EE488350F66CC08D1D88AF14EE /* NBBottomSheet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NBBottomSheet.release.xcconfig; sourceTree = "<group>"; }; - 4EEEA55AC9C261C1EABE60EC57A5021B /* ImagePicker-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ImagePicker-Info.plist"; sourceTree = "<group>"; }; - 4F2207491E92F152C27D2B4A764A6A93 /* IQKeyboardManager+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Deprecated.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Deprecated.swift"; sourceTree = "<group>"; }; - 507C1B0C545DAAFE25BB8DD789F224EF /* FSPagerView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FSPagerView.release.xcconfig; sourceTree = "<group>"; }; - 50F1C0F59A45281CE2D310673AE0571F /* NBBottomSheet-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NBBottomSheet-prefix.pch"; sourceTree = "<group>"; }; - 545688259B1D4CD8A59AF3D7E0AFE7B9 /* IQScrollViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQScrollViewConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQScrollViewConfiguration.swift; sourceTree = "<group>"; }; - 54A9B08BB29EC7935F6A8F8ACD56BEB0 /* ImageGalleryLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageGalleryLayout.swift; path = Source/ImageGallery/ImageGalleryLayout.swift; sourceTree = "<group>"; }; + 3FD2850880C4A8033AED333F5DFAE328 /* ImagePicker-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ImagePicker-dummy.m"; sourceTree = "<group>"; }; + 400224F8C71E7053C79E8D5E509534F4 /* IQKeyboardListener.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardListener.swift; path = IQKeyboardManagerSwift/LIsteners/IQKeyboardListener.swift; sourceTree = "<group>"; }; + 419AB69B674D6C318AC58EE6D9AFF102 /* IQBarButtonItemConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItemConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQBarButtonItemConfiguration.swift; sourceTree = "<group>"; }; + 452182903F9A76184461CC377DB62A70 /* EPSignatureView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EPSignatureView.swift; path = Pod/Classes/EPSignatureView.swift; sourceTree = "<group>"; }; + 45865163BC96B7A2B481C17A0EC1D4F8 /* IQKeyboardManagerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-prefix.pch"; sourceTree = "<group>"; }; + 45B232DE9D6710FE8BF7DC25C2C80333 /* NBBottomSheet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NBBottomSheet.debug.xcconfig; sourceTree = "<group>"; }; + 45C50C21EF30A0239628BA0E14464BCE /* video@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "video@3x.png"; path = "Images/video@3x.png"; sourceTree = "<group>"; }; + 467961922684B2F4C4295CBE0C9CD940 /* StackView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StackView.swift; path = Source/BottomView/StackView.swift; sourceTree = "<group>"; }; + 472E9223ECD1656D4CD5CD1BDC50D9CA /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist"; sourceTree = "<group>"; }; + 486835CC5D14C1EA193F8575CA89FDCC /* IQScrollViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQScrollViewConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQScrollViewConfiguration.swift; sourceTree = "<group>"; }; + 48FAE289F4B7A5D4D99BDB1F74A1C163 /* LanguageManager-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "LanguageManager-iOS-Info.plist"; sourceTree = "<group>"; }; + 49FC6FE3F43F76CA598D3253A1731EEB /* IQKeyboardManagerCompatible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerCompatible.swift; path = IQKeyboardManagerSwift/IQKeyboardManagerCompatible/IQKeyboardManagerCompatible.swift; sourceTree = "<group>"; }; + 4B432B6773BE3F0B4A6976820602F07A /* UIView+Direction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Direction.swift"; path = "LanguageManager-iOS/Classes/Helpers/Extensions/UIView+Direction.swift"; sourceTree = "<group>"; }; + 4D01E52DE74EF3C733B94F1E045CCD77 /* String+Localiz.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Localiz.swift"; path = "LanguageManager-iOS/Classes/Helpers/Extensions/String+Localiz.swift"; sourceTree = "<group>"; }; + 4FE3DE7F264E30C392DCECA7921DAEF2 /* IQActiveConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQActiveConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQActiveConfiguration.swift; sourceTree = "<group>"; }; + 54323777101C6AB180A413C0B2DB23B9 /* NBBottomSheetController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NBBottomSheetController.swift; path = NBBottomSheet/NBBottomSheet/Sources/NBBottomSheetController.swift; sourceTree = "<group>"; }; 56B28C4E9F718651E6E1B010F31566EB /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/AVFoundation.framework; sourceTree = DEVELOPER_DIR; }; - 5761D7B5C5A856ED4D8A03F284C8771F /* UIImageView+Direction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImageView+Direction.swift"; path = "LanguageManager-iOS/Classes/Helpers/Extensions/UIImageView+Direction.swift"; sourceTree = "<group>"; }; - 586B6FC37EB8231AC7C24C1CC2776384 /* UIView+Direction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Direction.swift"; path = "LanguageManager-iOS/Classes/Helpers/Extensions/UIView+Direction.swift"; sourceTree = "<group>"; }; - 5D646977F7C0DA29D63C4E18D9DD6630 /* video@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "video@3x.png"; path = "Images/video@3x.png"; sourceTree = "<group>"; }; - 5FF2B9AD02F97A175585504BA5B7F448 /* TopView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TopView.swift; path = Source/TopView/TopView.swift; sourceTree = "<group>"; }; - 615EB6B3844737F49004E6E4A8F968A0 /* DefaultsKeys.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsKeys.swift; path = "LanguageManager-iOS/Classes/Constants/DefaultsKeys.swift"; sourceTree = "<group>"; }; + 56C1C453B74E770D4AC56A090051BCF5 /* EPSignatureViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = EPSignatureViewController.xib; path = Pod/Classes/EPSignatureViewController.xib; sourceTree = "<group>"; }; + 5A6291B42FA169A1C1919CB49B0B8509 /* IQTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextView.swift; path = IQKeyboardManagerSwift/IQTextView/IQTextView.swift; sourceTree = "<group>"; }; + 5B1D47B8C43A0DA0A05A410655A28153 /* IQKeyboardManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Debug.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Debug.swift"; sourceTree = "<group>"; }; + 5F8E6400E281B0FB397224FDE9690416 /* IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardManagerSwift-Info.plist"; sourceTree = "<group>"; }; + 619978A0C0036454C22A81173BAA5A6A /* IQUITableView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITableView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUITableView+Additions.swift"; sourceTree = "<group>"; }; + 62160BE00E3966D4D52808B89DE0B1B3 /* IQNSArray+Sort.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQNSArray+Sort.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQNSArray+Sort.swift"; sourceTree = "<group>"; }; + 6224FD5F7C95061A57CAFA73995B3002 /* ImagePicker.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ImagePicker.debug.xcconfig; sourceTree = "<group>"; }; 6473C16F43F7217C13AEA5FBA6C8247F /* LanguageManager_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LanguageManager_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 65E35E2A8DCF85A60B0EF9389B0495AE /* NBBottomSheet-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NBBottomSheet-umbrella.h"; sourceTree = "<group>"; }; - 664FCD8539D02C2C7ABBA15E9666F2B9 /* AUTO@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "AUTO@3x.png"; path = "Images/AUTO@3x.png"; sourceTree = "<group>"; }; - 689EF9768E3E18B833DD776EAD893408 /* ImageGalleryViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageGalleryViewCell.swift; path = Source/ImageGallery/ImageGalleryViewCell.swift; sourceTree = "<group>"; }; - 69FC816770553B761090561AE8707674 /* IQKeyboardInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardInfo.swift; path = IQKeyboardManagerSwift/LIsteners/Info/IQKeyboardInfo.swift; sourceTree = "<group>"; }; - 6C5B4DA5F338896C639DBDA08FCCC486 /* NBBottomSheetPresentationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NBBottomSheetPresentationController.swift; path = NBBottomSheet/NBBottomSheet/Sources/NBBottomSheetPresentationController.swift; sourceTree = "<group>"; }; - 7136D2DF9E35BE04AE50612BF8809136 /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnKeyHandler+TextFieldDelegate.swift"; path = "IQKeyboardManagerSwift/ReturnKeyHandler/IQKeyboardReturnKeyHandler+TextFieldDelegate.swift"; sourceTree = "<group>"; }; - 79655C283B54B5F907790F4E79C388EF /* IQUITextFieldView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITextFieldView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUITextFieldView+Additions.swift"; sourceTree = "<group>"; }; + 6B5E1D310DD754E122DEEE009481A2D6 /* IQUIScrollView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIScrollView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUIScrollView+Additions.swift"; sourceTree = "<group>"; }; + 6F6826627BFA6A69002524426F8CFFB7 /* IQTextFieldViewListener.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextFieldViewListener.swift; path = IQKeyboardManagerSwift/LIsteners/IQTextFieldViewListener.swift; sourceTree = "<group>"; }; + 7488E11EF92CBFCB3965EA6F8020E701 /* ON@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "ON@3x.png"; path = "Images/ON@3x.png"; sourceTree = "<group>"; }; + 7927C464AC094A95C8B864DF6A0B1D06 /* UIImageView+Direction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImageView+Direction.swift"; path = "LanguageManager-iOS/Classes/Helpers/Extensions/UIImageView+Direction.swift"; sourceTree = "<group>"; }; 798C61760B9BC4B07BC60D42FCC09855 /* Pods-MiniScanner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MiniScanner.release.xcconfig"; sourceTree = "<group>"; }; - 7A54F7427340E254B559EC1244CA2E45 /* FSPagerView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FSPagerView-dummy.m"; sourceTree = "<group>"; }; - 7BB12D707BA745ED62C48151519D0E76 /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = "<group>"; }; + 7C9ABFFD091844286C2E85A20189BF7A /* IQKeyboardManagerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.debug.xcconfig; sourceTree = "<group>"; }; 7CC191E7994C3C7161A6641B457C9166 /* Pods-MiniScanner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MiniScanner.debug.xcconfig"; sourceTree = "<group>"; }; - 7F23D0E0AE3BDC7AE6A7D331A0FF5AF6 /* IQKeyboardManager+ToolbarActions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ToolbarActions.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+ToolbarActions.swift"; sourceTree = "<group>"; }; - 7F6DD614B85D0662209A3ADCFA367295 /* AssetManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssetManager.swift; path = Source/AssetManager.swift; sourceTree = "<group>"; }; - 8059AF588641259180B6DAD45BEF496B /* NBBottomSheetConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NBBottomSheetConfiguration.swift; path = NBBottomSheet/NBBottomSheet/Sources/NBBottomSheetConfiguration.swift; sourceTree = "<group>"; }; - 82E4B4BB461879C2730CD6E789150CB8 /* ImagePicker-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ImagePicker-prefix.pch"; sourceTree = "<group>"; }; - 831781174B420BA2000C5A20F9B1A155 /* IQActiveConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQActiveConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQActiveConfiguration.swift; sourceTree = "<group>"; }; - 842BA45676E86EFC650EFC7B33D1572F /* FSPagerViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FSPagerViewCell.swift; path = Sources/FSPagerViewCell.swift; sourceTree = "<group>"; }; - 8434491D5623794FFD75623AC5720E3C /* LanguageManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LanguageManager.swift; path = "LanguageManager-iOS/Classes/Main/LanguageManager.swift"; sourceTree = "<group>"; }; - 86D4965F304A9370159F8BEE0D0951D5 /* IQKeyboardManagerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.debug.xcconfig; sourceTree = "<group>"; }; - 88DFD4B8DC15592A7CD38D8AD9C01668 /* IQKeyboardManager+Toolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Toolbar.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Toolbar.swift"; sourceTree = "<group>"; }; + 8016BAC4075F40E70BE2133125B01BF5 /* Helper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helper.swift; path = Source/Helper.swift; sourceTree = "<group>"; }; + 8147290C4A326DADC3F305533BD64023 /* IQKeyboardManagerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-umbrella.h"; sourceTree = "<group>"; }; + 843CD6046BA80BCDF11AE4FAC807D29B /* cameraIcon@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "cameraIcon@3x.png"; path = "Images/cameraIcon@3x.png"; sourceTree = "<group>"; }; + 84969C2137D2629DFFC29942F8B97FEB /* ImageGalleryLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageGalleryLayout.swift; path = Source/ImageGallery/ImageGalleryLayout.swift; sourceTree = "<group>"; }; + 878EC7606D056CAB26A578762AF922D7 /* IQRootControllerConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQRootControllerConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQRootControllerConfiguration.swift; sourceTree = "<group>"; }; 89194C84FD5E62D9D2C9F2157676FF5C /* Pods-MiniScanner-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MiniScanner-acknowledgements.plist"; sourceTree = "<group>"; }; - 891FABB9A51285F499148E921B1A8E24 /* FSPagerViewLayoutAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FSPagerViewLayoutAttributes.swift; path = Sources/FSPagerViewLayoutAttributes.swift; sourceTree = "<group>"; }; - 8A9AA0FBABA9E9EEF6521C23B2031158 /* IQToolbarConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbarConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQToolbarConfiguration.swift; sourceTree = "<group>"; }; - 8B5D88BFE14997FA9B22FA4A4B8CD6DA /* IQTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextView.swift; path = IQKeyboardManagerSwift/IQTextView/IQTextView.swift; sourceTree = "<group>"; }; - 8C6B2F7653C95633BB9449F87EB6DBD9 /* LanguageManager-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "LanguageManager-iOS.release.xcconfig"; sourceTree = "<group>"; }; + 8BA50CB662E7C23406F0B83501BA32D7 /* LanguageManager-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "LanguageManager-iOS.debug.xcconfig"; sourceTree = "<group>"; }; 8D8069D3964814114ACEC3084C010B59 /* IQKeyboardManagerSwift.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IQKeyboardManagerSwift.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 8EA72F0B0DD57B9D078AF8EFCE412455 /* ViewDirection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewDirection.swift; path = "LanguageManager-iOS/Classes/Constants/ViewDirection.swift"; sourceTree = "<group>"; }; - 8F9A6C68497A6CFFB3FAA52682750752 /* cameraIcon@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "cameraIcon@3x.png"; path = "Images/cameraIcon@3x.png"; sourceTree = "<group>"; }; - 9027793C7414B308134453884A6716FD /* ImagePicker.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ImagePicker.debug.xcconfig; sourceTree = "<group>"; }; - 90C7704EF389F83C731970D2CDF6595B /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Source/Configuration.swift; sourceTree = "<group>"; }; + 8E6FDE31134B7541747D1E89E52E225A /* IQUIView+IQKeyboardToolbarDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+IQKeyboardToolbarDeprecated.swift"; path = "IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbarDeprecated.swift"; sourceTree = "<group>"; }; + 8F0A5164AA0CCC729C8EA5166760BA9E /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnKeyHandler+TextFieldDelegate.swift"; path = "IQKeyboardManagerSwift/ReturnKeyHandler/IQKeyboardReturnKeyHandler+TextFieldDelegate.swift"; sourceTree = "<group>"; }; + 8F3317C2A83E43FF75DFCFD3FAEB3669 /* IQKeyboardInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardInfo.swift; path = IQKeyboardManagerSwift/LIsteners/Info/IQKeyboardInfo.swift; sourceTree = "<group>"; }; + 8F84A913AFEF518DF42A997F74EC8260 /* BottomContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomContainerView.swift; path = Source/BottomView/BottomContainerView.swift; sourceTree = "<group>"; }; + 9067705903BD2E8C3EC9BD8EBF709221 /* ImagePickerController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePickerController.swift; path = Source/ImagePickerController.swift; sourceTree = "<group>"; }; 91BC4F27F2DA380ABC44B3609495F0E1 /* NBBottomSheet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NBBottomSheet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 926EAAA6426204DE1DF8D36D2E13EA74 /* IQToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbar.swift; path = IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift; sourceTree = "<group>"; }; - 92CEF8FFA7885B7EC96C4120D507A08F /* IQToolbarPlaceholderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbarPlaceholderConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQToolbarPlaceholderConfiguration.swift; sourceTree = "<group>"; }; + 92470A870676C63A27509F38301D521C /* IQUICollectionView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUICollectionView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUICollectionView+Additions.swift"; sourceTree = "<group>"; }; + 97037D70AD7F37FBCDB7561DA20D7D2D /* NBBottomSheetDismissalTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NBBottomSheetDismissalTransition.swift; path = NBBottomSheet/NBBottomSheet/Sources/NBBottomSheetDismissalTransition.swift; sourceTree = "<group>"; }; 97AA160F23F0CBEDDAF212103E762FC7 /* ImagePicker.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ImagePicker.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 987CD19BC0CE18F2E00B0AD5ABF8670D /* ImagePicker.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ImagePicker.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9A0A414944257050868C6C9F38FA10DF /* FSPagerView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FSPagerView.modulemap; sourceTree = "<group>"; }; - 9B35CF76304163C551A5E4B592066D0D /* IQUIViewController+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIViewController+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUIViewController+Additions.swift"; sourceTree = "<group>"; }; + 9AAA7A084DC8F453913C80DE1E243C39 /* LanguageManager-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "LanguageManager-iOS.release.xcconfig"; sourceTree = "<group>"; }; 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; }; - 9E44A8883A35E6A01365B1C682A1164D /* ConstraintsSetup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintsSetup.swift; path = Source/Extensions/ConstraintsSetup.swift; sourceTree = "<group>"; }; - A1BD1A58666D6C0FD408F4DB3ADC8107 /* IQKeyboardListener.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardListener.swift; path = IQKeyboardManagerSwift/LIsteners/IQKeyboardListener.swift; sourceTree = "<group>"; }; - A230ED28736A611DEEC851620E6444DE /* IQKeyboardManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Internal.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Internal.swift"; sourceTree = "<group>"; }; - A2A1F3E9AD6E574C81576EFC109E4F56 /* focusIcon@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "focusIcon@3x.png"; path = "Images/focusIcon@3x.png"; sourceTree = "<group>"; }; - A4D36302D2F7234AEEC28003C3244EB4 /* UIButton+Direction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIButton+Direction.swift"; path = "LanguageManager-iOS/Classes/Helpers/Extensions/UIButton+Direction.swift"; sourceTree = "<group>"; }; - A60D99B014C4219B8F7BF725B9648E36 /* NBBottomSheetController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NBBottomSheetController.swift; path = NBBottomSheet/NBBottomSheet/Sources/NBBottomSheetController.swift; sourceTree = "<group>"; }; - A7BA040D977C503D2A8C2D9BF404E21C /* EPSignature-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "EPSignature-umbrella.h"; sourceTree = "<group>"; }; - A8A8D208D764CFAC89604E6813F1444E /* IQUIScrollView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIScrollView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUIScrollView+Additions.swift"; sourceTree = "<group>"; }; - A8D2ABDB4E2F157885C7BEE654CF6FC4 /* IQKeyboardManagerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-prefix.pch"; sourceTree = "<group>"; }; + 9DDA4537FCBE11326C1D65EA43B3CC6D /* DefaultsKeys.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsKeys.swift; path = "LanguageManager-iOS/Classes/Constants/DefaultsKeys.swift"; sourceTree = "<group>"; }; + 9FC1B2AF5635D8020B43F30629EC2712 /* focusIcon@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "focusIcon@3x.png"; path = "Images/focusIcon@3x.png"; sourceTree = "<group>"; }; + A0DA73612FA4F954FCE02EA0ADACE634 /* IQKeyboardManager+UITextFieldViewNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UITextFieldViewNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+UITextFieldViewNotification.swift"; sourceTree = "<group>"; }; + A100F9EA89810A00541755ECD7BBB307 /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTitleBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift; sourceTree = "<group>"; }; + A1229814968DD5876FBA87DDA81C5B8F /* IQKeyboardManager+Toolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Toolbar.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Toolbar.swift"; sourceTree = "<group>"; }; + A12B5A63F2CB09B7D22B7E2F4A2210EB /* IQInvocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQInvocation.swift; path = IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift; sourceTree = "<group>"; }; + A353C25676960291A3718B5AFDB81A33 /* IQKeyboardManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManager.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager.swift; sourceTree = "<group>"; }; + A3B5F550C3AA900D117E22291DE5D67C /* IQToolbarPlaceholderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbarPlaceholderConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQToolbarPlaceholderConfiguration.swift; sourceTree = "<group>"; }; + A532EFEAAE9EEAA7CFA7DF04C7E1808B /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = IQKeyboardManagerSwift/PrivacyInfo.xcprivacy; sourceTree = "<group>"; }; + A72C2CB61DAC20DBF7210307C41485C5 /* NBBottomSheetConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NBBottomSheetConfiguration.swift; path = NBBottomSheet/NBBottomSheet/Sources/NBBottomSheetConfiguration.swift; sourceTree = "<group>"; }; A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IQKeyboardManagerSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AC43EDC562847626ACF7B4E93E5462EF /* IQKeyboardManagerConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstants.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift; sourceTree = "<group>"; }; - AC7F01FAC278F9B096CFFD78497206CF /* UIImage+NextPrevious.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+NextPrevious.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/UIImage+NextPrevious.swift"; sourceTree = "<group>"; }; - AF61B6A70C39B0ACDA33B583642A26EE /* EPSignatureViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EPSignatureViewController.swift; path = Pod/Classes/EPSignatureViewController.swift; sourceTree = "<group>"; }; - B021EB40B85B76049C30C2D063F0870D /* ButtonPicker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ButtonPicker.swift; path = Source/BottomView/ButtonPicker.swift; sourceTree = "<group>"; }; + AB5F2D5DFB52DE92C94A23801BAC451C /* IQUIView+IQKeyboardToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+IQKeyboardToolbar.swift"; path = "IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift"; sourceTree = "<group>"; }; + AB94CC5B3F453AA0801700167152FCA1 /* IQKeyboardManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Internal.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Internal.swift"; sourceTree = "<group>"; }; + AC259076A4D444F235DABE44D7425021 /* ViewDirection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewDirection.swift; path = "LanguageManager-iOS/Classes/Constants/ViewDirection.swift"; sourceTree = "<group>"; }; + AD71C20FAD4FE7E08FA8091857A2FDCB /* NBBottomSheet-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NBBottomSheet-dummy.m"; sourceTree = "<group>"; }; B2968141E72EA49CC006DD4020E3386D /* Pods-MiniScanner-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MiniScanner-frameworks.sh"; sourceTree = "<group>"; }; - B3FCB83859385DB3694F04D44B40FE18 /* EPSignature-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "EPSignature-dummy.m"; sourceTree = "<group>"; }; - B5A83B1987A0D179A3EAE24B6183FF37 /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist"; sourceTree = "<group>"; }; - B638343F1BC71A9A9CD3A6D6CA749DC7 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = IQKeyboardManagerSwift/PrivacyInfo.xcprivacy; sourceTree = "<group>"; }; - B6C332B0108C87436290C293E043023A /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnKeyHandler+TextViewDelegate.swift"; path = "IQKeyboardManagerSwift/ReturnKeyHandler/IQKeyboardReturnKeyHandler+TextViewDelegate.swift"; sourceTree = "<group>"; }; - B700D2C4CED5ED22050429C7997CF1FE /* IQKeyboardConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQKeyboardConfiguration.swift; sourceTree = "<group>"; }; - B7F2D378ED96DA779D964000E6DECED9 /* FSPagerViewObjcCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSPagerViewObjcCompat.m; path = Sources/FSPagerViewObjcCompat.m; sourceTree = "<group>"; }; - B909C40450F7213C478AE50F7E2D18A9 /* FSPageViewTransformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FSPageViewTransformer.swift; path = Sources/FSPageViewTransformer.swift; sourceTree = "<group>"; }; - BA1D8FBFBA4E4BE6EC7D55255DE3EFBC /* VideoInfoView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoInfoView.swift; path = Source/ImageGallery/VideoInfoView.swift; sourceTree = "<group>"; }; - BA790DC54E7A009FDDBBC07056093C41 /* IQKeyboardManagerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManagerSwift-dummy.m"; sourceTree = "<group>"; }; - BAA72CEA94002E53D03EC7DCC0E59413 /* LocationManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocationManager.swift; path = Source/LocationManager.swift; sourceTree = "<group>"; }; - BC0F20E077483A5E6339C4C6304E6507 /* ON@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "ON@3x.png"; path = "Images/ON@3x.png"; sourceTree = "<group>"; }; - BE1348270A5A7F3FDEFAC32D8E89686A /* IQUIView+Hierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+Hierarchy.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUIView+Hierarchy.swift"; sourceTree = "<group>"; }; - BE559964BD58119769FB19BB95144A6A /* EPSignatureView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EPSignatureView.swift; path = Pod/Classes/EPSignatureView.swift; sourceTree = "<group>"; }; - C1DC2A0ED79E1179E28CE75BFECCDA82 /* IQNSArray+Sort.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQNSArray+Sort.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQNSArray+Sort.swift"; sourceTree = "<group>"; }; + B4E6D4AE8BCE2646794F28F0E24A08D1 /* UIButton+Direction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIButton+Direction.swift"; path = "LanguageManager-iOS/Classes/Helpers/Extensions/UIButton+Direction.swift"; sourceTree = "<group>"; }; + B5598E57D63117C1B54ADBB7A187B232 /* IQUIViewController+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIViewController+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUIViewController+Additions.swift"; sourceTree = "<group>"; }; + B5EDE1D4720CA7A048A32667F968ED10 /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnKeyHandler+TextViewDelegate.swift"; path = "IQKeyboardManagerSwift/ReturnKeyHandler/IQKeyboardReturnKeyHandler+TextViewDelegate.swift"; sourceTree = "<group>"; }; + B6C5E34F15E4BBDA3480406FF35C1903 /* IQKeyboardManager+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Deprecated.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Deprecated.swift"; sourceTree = "<group>"; }; + B710E28309BEA5C002164BD008CFB6C0 /* ImagePicker-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ImagePicker-prefix.pch"; sourceTree = "<group>"; }; + B71FD6B5A8AC626259BE6B97226F81FB /* TopView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TopView.swift; path = Source/TopView/TopView.swift; sourceTree = "<group>"; }; + B7EA56260324998EC43B70CD2092E1FB /* ImageStack.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageStack.swift; path = Source/BottomView/ImageStack.swift; sourceTree = "<group>"; }; + BF809679D3CFFBC72878EC9BFEA90F5E /* LanguageManager-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "LanguageManager-iOS-dummy.m"; sourceTree = "<group>"; }; + C1A5BF586C35098EC908E7870B407170 /* EPSignatureViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EPSignatureViewController.swift; path = Pod/Classes/EPSignatureViewController.swift; sourceTree = "<group>"; }; + C2B28EA5FE2C09FCEF4DF47D34186FB7 /* Languages.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Languages.swift; path = "LanguageManager-iOS/Classes/Constants/Languages.swift"; sourceTree = "<group>"; }; + C5054DCBC2013F1894FA0EE7D6D99005 /* ImageGalleryViewDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageGalleryViewDataSource.swift; path = Source/ImageGallery/ImageGalleryViewDataSource.swift; sourceTree = "<group>"; }; C54FCF3DBFE97D4603C0EACF18FA0D04 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - C6214DC5E72470BE3105210D7465B90A /* selectedImageGallery@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "selectedImageGallery@3x.png"; path = "Images/selectedImageGallery@3x.png"; sourceTree = "<group>"; }; - C698FD30D248D272DAE2F242C5D62EA2 /* NBConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NBConfiguration.swift; path = NBBottomSheet/NBBottomSheet/Sources/NBConfiguration.swift; sourceTree = "<group>"; }; - C6F5B0BFC63CD2F3B0DF56912D4F54E8 /* IQUITableView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITableView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUITableView+Additions.swift"; sourceTree = "<group>"; }; - C94B5C4512123F377D23B93F1FA23097 /* IQKeyboardManagerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-umbrella.h"; sourceTree = "<group>"; }; - CA39A57EEAD9575350DCFB2377E01DD9 /* NBBottomSheet-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "NBBottomSheet-Info.plist"; sourceTree = "<group>"; }; - CACF959977B91C5F65F381B36C452B6D /* Languages.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Languages.swift; path = "LanguageManager-iOS/Classes/Constants/Languages.swift"; sourceTree = "<group>"; }; - CE58805A3FAC71C6A5782C1B1BB08069 /* IQPlaceholderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPlaceholderable.swift; path = IQKeyboardManagerSwift/IQTextView/IQPlaceholderable.swift; sourceTree = "<group>"; }; - CE5D7D46BA438C135B812D0C145CBE6C /* ImageGalleryView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageGalleryView.swift; path = Source/ImageGallery/ImageGalleryView.swift; sourceTree = "<group>"; }; - D2E621AE82FB76EEF79C8A2D0102AAF7 /* EPSignature-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "EPSignature-prefix.pch"; sourceTree = "<group>"; }; - D4C85B9AE116359EBFD1959406B32999 /* IQUICollectionView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUICollectionView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUICollectionView+Additions.swift"; sourceTree = "<group>"; }; - D5F711A94EB088CF457F893E60C568B4 /* FSPageViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FSPageViewLayout.swift; path = Sources/FSPageViewLayout.swift; sourceTree = "<group>"; }; - D6D6492D4AE05CD36F797199E44F1805 /* FSPageControl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FSPageControl.swift; path = Sources/FSPageControl.swift; sourceTree = "<group>"; }; - D8CA0DD8AA6C4033E65CAA6FE83870F1 /* StackView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StackView.swift; path = Source/BottomView/StackView.swift; sourceTree = "<group>"; }; - DA4B76FEC2A143DA2EFFC6D3F7FB7B5A /* LanguageManager-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "LanguageManager-iOS-dummy.m"; sourceTree = "<group>"; }; - DB2BF5C6F33D3DA91B2EB11B23EEE3FE /* Helper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helper.swift; path = Source/Helper.swift; sourceTree = "<group>"; }; - DBE740FF0A3373F56E7AF2A4000D6D8C /* ImagePicker.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ImagePicker.release.xcconfig; sourceTree = "<group>"; }; - DD48D4FC5BD3A99772F4FE6FDB643898 /* ImagePicker-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ImagePicker-umbrella.h"; sourceTree = "<group>"; }; - DE7235727A466A9B7BF8342CC42C4B91 /* IQPreviousNextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPreviousNextView.swift; path = IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift; sourceTree = "<group>"; }; - E1DF93E2C3692DABCE7DF9D4735D2645 /* NBBottomSheetDismissalTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NBBottomSheetDismissalTransition.swift; path = NBBottomSheet/NBBottomSheet/Sources/NBBottomSheetDismissalTransition.swift; sourceTree = "<group>"; }; - E21781AECFBC7371F2118155ACE5C3C7 /* IQKeyboardReturnKeyHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardReturnKeyHandler.swift; path = IQKeyboardManagerSwift/ReturnKeyHandler/IQKeyboardReturnKeyHandler.swift; sourceTree = "<group>"; }; - E3703BDC76205E7D102F2BF32B3D8ACC /* FSPagerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FSPagerView.swift; path = Sources/FSPagerView.swift; sourceTree = "<group>"; }; - E3DA260DCB001D3DF844896311887A56 /* EPSignature.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = EPSignature.release.xcconfig; sourceTree = "<group>"; }; - E6049E937091EF3FC850CDC4BEF9B925 /* EPSignature.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = EPSignature.modulemap; sourceTree = "<group>"; }; - E62A4882567E433682E9D7925C2BDA73 /* ImageGalleryViewDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageGalleryViewDataSource.swift; path = Source/ImageGallery/ImageGalleryViewDataSource.swift; sourceTree = "<group>"; }; - E711836675BD919C63BEB7A0930B72B4 /* NBBottomSheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBBottomSheet.h; path = NBBottomSheet/NBBottomSheet/Sources/NBBottomSheet.h; sourceTree = "<group>"; }; - EA5483FEE1B87041C4751EA1D4F3EF54 /* IQKeyboardManagerCompatible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerCompatible.swift; path = IQKeyboardManagerSwift/IQKeyboardManagerCompatible/IQKeyboardManagerCompatible.swift; sourceTree = "<group>"; }; - ED50ABC97C7298629CFFE2835E5645AE /* LanguageManager-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LanguageManager-iOS-umbrella.h"; sourceTree = "<group>"; }; + C6AEEFA5613E0B7BF8F6425A154D6EC9 /* NBBottomSheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBBottomSheet.h; path = NBBottomSheet/NBBottomSheet/Sources/NBBottomSheet.h; sourceTree = "<group>"; }; + CD46A963E6CCE8CD900BA8A7331D7D8C /* NBConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NBConfiguration.swift; path = NBBottomSheet/NBBottomSheet/Sources/NBConfiguration.swift; sourceTree = "<group>"; }; + CD55E5F51909EE297A2AC039F257AF6F /* EPSignature-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "EPSignature-prefix.pch"; sourceTree = "<group>"; }; + D2DB0BCD57E720CE97C1C3CE74B75024 /* IQKeyboardManager+UIKeyboardNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UIKeyboardNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+UIKeyboardNotification.swift"; sourceTree = "<group>"; }; + D3DC4A4D35E057E5F76427C838E3E495 /* IQPlaceholderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPlaceholderable.swift; path = IQKeyboardManagerSwift/IQTextView/IQPlaceholderable.swift; sourceTree = "<group>"; }; + D4270A3541F22B881BD953A68F6E73F9 /* IQKeyboardManagerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManagerSwift-dummy.m"; sourceTree = "<group>"; }; + D4648CA1088D11129C0BDD49912D6FAB /* ButtonPicker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ButtonPicker.swift; path = Source/BottomView/ButtonPicker.swift; sourceTree = "<group>"; }; + D55EBF017F6625B593286F47CFEB1FA3 /* IQUIView+Hierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+Hierarchy.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUIView+Hierarchy.swift"; sourceTree = "<group>"; }; + D9651F46100B3C105EE27B92C1DFFCEC /* IQKeyboardManager+ToolbarActions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ToolbarActions.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+ToolbarActions.swift"; sourceTree = "<group>"; }; + D9F19506C84032240A21541F9EFCA895 /* IQKeyboardManagerConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstants.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift; sourceTree = "<group>"; }; + DC9A64B83C916D4FC5C9CE722E697819 /* LanguageManager-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LanguageManager-iOS-prefix.pch"; sourceTree = "<group>"; }; + DCB418B4C0BF451B734FFA48AAD9ADF6 /* Storage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Storage.swift; path = "LanguageManager-iOS/Classes/Helpers/Storage.swift"; sourceTree = "<group>"; }; + E1D47766C4492BAF84E069DF6E3DD758 /* NBBottomSheetPresentationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NBBottomSheetPresentationController.swift; path = NBBottomSheet/NBBottomSheet/Sources/NBBottomSheetPresentationController.swift; sourceTree = "<group>"; }; + E24E6B8D32E615F0FEF0A78F3C181A09 /* EPSignature-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "EPSignature-dummy.m"; sourceTree = "<group>"; }; + E34B4735C7461EBF9AEEC896DEB27C33 /* IQTextFieldViewInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextFieldViewInfo.swift; path = IQKeyboardManagerSwift/LIsteners/Info/IQTextFieldViewInfo.swift; sourceTree = "<group>"; }; + E68A22DD9E65EF800882452842690AE1 /* NBBottomSheet.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = NBBottomSheet.modulemap; sourceTree = "<group>"; }; + E7F7A4EA7A5659C2F78D04CC218E1440 /* NBBottomSheetTransitioningDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NBBottomSheetTransitioningDelegate.swift; path = NBBottomSheet/NBBottomSheet/Sources/NBBottomSheetTransitioningDelegate.swift; sourceTree = "<group>"; }; + E91F93F84E9AB640A2333FBBF6CCB877 /* EPSignature.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = EPSignature.debug.xcconfig; sourceTree = "<group>"; }; + E9E511B375EE87D380DE8D4B00AE28F4 /* AssetManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssetManager.swift; path = Source/AssetManager.swift; sourceTree = "<group>"; }; + EB8D9081C43164E02C60F65C02702B8E /* AUTO@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "AUTO@3x.png"; path = "Images/AUTO@3x.png"; sourceTree = "<group>"; }; + EC2ECE9C7A88988A534C8F7590F3AB64 /* CameraView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CameraView.swift; path = Source/CameraView/CameraView.swift; sourceTree = "<group>"; }; + EC4B66ABF37EFD118BC08264BBCA6461 /* IQKeyboardReturnKeyHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardReturnKeyHandler.swift; path = IQKeyboardManagerSwift/ReturnKeyHandler/IQKeyboardReturnKeyHandler.swift; sourceTree = "<group>"; }; ED8E7C0ED656254925E918D5509B655C /* Pods-MiniScanner-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MiniScanner-Info.plist"; sourceTree = "<group>"; }; - EE009617DB5A966C6E58EFC97D17875C /* EPSignature.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = EPSignature.debug.xcconfig; sourceTree = "<group>"; }; - F047971CD665BC407A8DAA32AD3A9B98 /* FSPagerViewObjcCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSPagerViewObjcCompat.h; path = Sources/FSPagerViewObjcCompat.h; sourceTree = "<group>"; }; F3DF46AD6E25D68DB361974528992221 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - FD60805FB0B777848E7DD77214586E88 /* FSPagerView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FSPagerView.debug.xcconfig; sourceTree = "<group>"; }; + F76805C9416BA1FC318E025ACA3B95EF /* IQToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbar.swift; path = IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift; sourceTree = "<group>"; }; + F8292FC683D8C22C77C5F637AF2836FA /* LanguageManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LanguageManager.swift; path = "LanguageManager-iOS/Classes/Main/LanguageManager.swift"; sourceTree = "<group>"; }; + F88000230AEFE1CF1FC184347AAE598B /* IQBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift; sourceTree = "<group>"; }; + FAE9E39FF0684DBEA572BB783B3A18F7 /* IQKeyboardManagerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.release.xcconfig; sourceTree = "<group>"; }; + FC40942321CA219791F79BDB4C72DA52 /* LanguageManager-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "LanguageManager-iOS.modulemap"; sourceTree = "<group>"; }; + FDF5381B2554B2BB1D7949E3B9A7DF79 /* ImagePicker-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ImagePicker-umbrella.h"; sourceTree = "<group>"; }; + FEB8E045AED5393DCC7FA1C76AB59AB8 /* UIImage+NextPrevious.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+NextPrevious.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/UIImage+NextPrevious.swift"; sourceTree = "<group>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 1F8DF3016F5E08F65F63559E2A2A827B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 2067457DB9BF3FC9BFE99C90B602174A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -389,26 +359,26 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4D23CB6E5CEA9796267913468D4A3CD3 /* Frameworks */ = { + 356D6AE3CB46F510D123D125D9B58B7C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5D35C19C362961F919BE9820991D761E /* Foundation.framework in Frameworks */, + 8AE718666177B657AE0BBD08AF829DD1 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 60A6157C9520B77A0217CF22A787E99D /* Frameworks */ = { + 4D23CB6E5CEA9796267913468D4A3CD3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 5D35C19C362961F919BE9820991D761E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7AF0B4E0EB5D8A901728672A5277DAFC /* Frameworks */ = { + 8D97E7F0E48EF9F505EED4D818710D20 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 14638F89550DD287F122C4C8968289F4 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -429,41 +399,9 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - CE9AC41D181266461331A2C974AEA95B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E5ACBBCF353041B05D869DB1467D16B1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7399F0854271981516AA79727A0A06C8 /* Foundation.framework in Frameworks */, - 2E4A914423BA1B263C96C3BBC43E2245 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0113FD3C8FD8AA93BDC06466006587F3 /* NBBottomSheet */ = { - isa = PBXGroup; - children = ( - E711836675BD919C63BEB7A0930B72B4 /* NBBottomSheet.h */, - 8059AF588641259180B6DAD45BEF496B /* NBBottomSheetConfiguration.swift */, - A60D99B014C4219B8F7BF725B9648E36 /* NBBottomSheetController.swift */, - E1DF93E2C3692DABCE7DF9D4735D2645 /* NBBottomSheetDismissalTransition.swift */, - 6C5B4DA5F338896C639DBDA08FCCC486 /* NBBottomSheetPresentationController.swift */, - 3AA92C612F872EADC2BC40A15E01DB23 /* NBBottomSheetPresentationTransition.swift */, - 1BB9A00426C7107F694592F19527BE69 /* NBBottomSheetTransitioningDelegate.swift */, - C698FD30D248D272DAE2F242C5D62EA2 /* NBConfiguration.swift */, - A7F75D63C62A3641741549AB252E760C /* Support Files */, - ); - path = NBBottomSheet; - sourceTree = "<group>"; - }; 0285214F24466DADA9DB9AC0EF8966F0 /* iOS */ = { isa = PBXGroup; children = ( @@ -476,129 +414,175 @@ name = iOS; sourceTree = "<group>"; }; - 033ACCB632D94A95AEEF9DCA045558CA /* Resources */ = { + 0B10F170B5D638262F3C7F41888F7AC7 /* Resources */ = { isa = PBXGroup; children = ( - 2D93C4B3BEDE27E7A936E76984B03C35 /* EPSignatureViewController.xib */, + EB8D9081C43164E02C60F65C02702B8E /* AUTO@3x.png */, + 843CD6046BA80BCDF11AE4FAC807D29B /* cameraIcon@3x.png */, + 9FC1B2AF5635D8020B43F30629EC2712 /* focusIcon@3x.png */, + 18CC4F437D7A0F3454C4F89BD6CE0AEC /* OFF@3x.png */, + 7488E11EF92CBFCB3965EA6F8020E701 /* ON@3x.png */, + 081BAFFE15D81F33E77489E60A036BE7 /* selectedImageGallery@3x.png */, + 45C50C21EF30A0239628BA0E14464BCE /* video@3x.png */, ); name = Resources; sourceTree = "<group>"; }; - 14228F2D01F944CCB04C42A76EB1DBBB /* Support Files */ = { + 1377F47D0ECC009D7BEFB14769F14316 /* ImagePicker */ = { + isa = PBXGroup; + children = ( + E9E511B375EE87D380DE8D4B00AE28F4 /* AssetManager.swift */, + 8F84A913AFEF518DF42A997F74EC8260 /* BottomContainerView.swift */, + D4648CA1088D11129C0BDD49912D6FAB /* ButtonPicker.swift */, + 297D96869095AA06F276F3DA5DD575B7 /* CameraMan.swift */, + EC2ECE9C7A88988A534C8F7590F3AB64 /* CameraView.swift */, + 2A6AE173040683BAF2BF0ACE7CB13A0A /* Configuration.swift */, + 290501CF6F70FA1835207284AF05BEE5 /* ConstraintsSetup.swift */, + 8016BAC4075F40E70BE2133125B01BF5 /* Helper.swift */, + 84969C2137D2629DFFC29942F8B97FEB /* ImageGalleryLayout.swift */, + 21D53725C7625527BF97643CF7655C26 /* ImageGalleryView.swift */, + 2AC4CEA5F2332B5B286CA6B73D2643EF /* ImageGalleryViewCell.swift */, + C5054DCBC2013F1894FA0EE7D6D99005 /* ImageGalleryViewDataSource.swift */, + 9067705903BD2E8C3EC9BD8EBF709221 /* ImagePickerController.swift */, + B7EA56260324998EC43B70CD2092E1FB /* ImageStack.swift */, + 1D01404D467A420F82D2829CE6CD8BB4 /* LocationManager.swift */, + 467961922684B2F4C4295CBE0C9CD940 /* StackView.swift */, + B71FD6B5A8AC626259BE6B97226F81FB /* TopView.swift */, + 02E924FDDE7F7B51AEC552C94D9C9AD6 /* VideoInfoView.swift */, + 0B10F170B5D638262F3C7F41888F7AC7 /* Resources */, + 69769D414834BD844C659CFA8A148FDF /* Support Files */, + ); + path = ImagePicker; + sourceTree = "<group>"; + }; + 1CD1A4CC34821855EE0B47C1DB7536BD /* LanguageManager-iOS */ = { + isa = PBXGroup; + children = ( + 9DDA4537FCBE11326C1D65EA43B3CC6D /* DefaultsKeys.swift */, + F8292FC683D8C22C77C5F637AF2836FA /* LanguageManager.swift */, + C2B28EA5FE2C09FCEF4DF47D34186FB7 /* Languages.swift */, + DCB418B4C0BF451B734FFA48AAD9ADF6 /* Storage.swift */, + 4D01E52DE74EF3C733B94F1E045CCD77 /* String+Localiz.swift */, + B4E6D4AE8BCE2646794F28F0E24A08D1 /* UIButton+Direction.swift */, + 7927C464AC094A95C8B864DF6A0B1D06 /* UIImageView+Direction.swift */, + 4B432B6773BE3F0B4A6976820602F07A /* UIView+Direction.swift */, + 252B706186B99322E0DA5829FCC7D43C /* UIView+Swizzling.swift */, + AC259076A4D444F235DABE44D7425021 /* ViewDirection.swift */, + 4B36B2F6BD2CAF18A7FFFF0D7E1E84E6 /* Support Files */, + ); + path = "LanguageManager-iOS"; + sourceTree = "<group>"; + }; + 26BC96ABCD3829D81C157FA2F5CD0DCE /* Support Files */ = { isa = PBXGroup; children = ( - 085D4171A3F780C04EFB71FBC8E635E1 /* LanguageManager-iOS.modulemap */, - DA4B76FEC2A143DA2EFFC6D3F7FB7B5A /* LanguageManager-iOS-dummy.m */, - 13CD760B3298D3E6B007FC21AEFDEF16 /* LanguageManager-iOS-Info.plist */, - 4138C0C249C44F4ED4EF526B81270B66 /* LanguageManager-iOS-prefix.pch */, - ED50ABC97C7298629CFFE2835E5645AE /* LanguageManager-iOS-umbrella.h */, - 2EEF70A7586548C9681199386735B949 /* LanguageManager-iOS.debug.xcconfig */, - 8C6B2F7653C95633BB9449F87EB6DBD9 /* LanguageManager-iOS.release.xcconfig */, + 3D666C16AFD99E3736270D569B5DE2F1 /* EPSignature.modulemap */, + E24E6B8D32E615F0FEF0A78F3C181A09 /* EPSignature-dummy.m */, + 1DA09D0759A4DDF814A83483F582ADB1 /* EPSignature-Info.plist */, + CD55E5F51909EE297A2AC039F257AF6F /* EPSignature-prefix.pch */, + 0A36BA6D882CE68172CAE63D99BCB5BA /* EPSignature-umbrella.h */, + E91F93F84E9AB640A2333FBBF6CCB877 /* EPSignature.debug.xcconfig */, + 2006321B115FD55474FD1B985C1979FA /* EPSignature.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/LanguageManager-iOS"; + path = "../Target Support Files/EPSignature"; sourceTree = "<group>"; }; - 159345AC740753E09FF1E49D7B342203 /* Resources */ = { + 32620674ED381C186389FA1D871AFD24 /* NBBottomSheet */ = { isa = PBXGroup; children = ( - 664FCD8539D02C2C7ABBA15E9666F2B9 /* AUTO@3x.png */, - 8F9A6C68497A6CFFB3FAA52682750752 /* cameraIcon@3x.png */, - A2A1F3E9AD6E574C81576EFC109E4F56 /* focusIcon@3x.png */, - 2E2B400DD678EA303FAFFBEF32CBCA41 /* OFF@3x.png */, - BC0F20E077483A5E6339C4C6304E6507 /* ON@3x.png */, - C6214DC5E72470BE3105210D7465B90A /* selectedImageGallery@3x.png */, - 5D646977F7C0DA29D63C4E18D9DD6630 /* video@3x.png */, + C6AEEFA5613E0B7BF8F6425A154D6EC9 /* NBBottomSheet.h */, + A72C2CB61DAC20DBF7210307C41485C5 /* NBBottomSheetConfiguration.swift */, + 54323777101C6AB180A413C0B2DB23B9 /* NBBottomSheetController.swift */, + 97037D70AD7F37FBCDB7561DA20D7D2D /* NBBottomSheetDismissalTransition.swift */, + E1D47766C4492BAF84E069DF6E3DD758 /* NBBottomSheetPresentationController.swift */, + 00B378319A98BB422CBDBE14796C501A /* NBBottomSheetPresentationTransition.swift */, + E7F7A4EA7A5659C2F78D04CC218E1440 /* NBBottomSheetTransitioningDelegate.swift */, + CD46A963E6CCE8CD900BA8A7331D7D8C /* NBConfiguration.swift */, + 82B9E590AF4CA104F25BE686066D17D4 /* Support Files */, ); - name = Resources; + path = NBBottomSheet; sourceTree = "<group>"; }; - 2524B6CA73749FE91A5B77026AB9E48B /* Support Files */ = { + 3EA95E4CF3A010D9796C8FD8B665C566 /* Support Files */ = { isa = PBXGroup; children = ( - 7BB12D707BA745ED62C48151519D0E76 /* IQKeyboardManagerSwift.modulemap */, - BA790DC54E7A009FDDBBC07056093C41 /* IQKeyboardManagerSwift-dummy.m */, - 01FB3E845976BA7356CB95994A0420CD /* IQKeyboardManagerSwift-Info.plist */, - A8D2ABDB4E2F157885C7BEE654CF6FC4 /* IQKeyboardManagerSwift-prefix.pch */, - C94B5C4512123F377D23B93F1FA23097 /* IQKeyboardManagerSwift-umbrella.h */, - 86D4965F304A9370159F8BEE0D0951D5 /* IQKeyboardManagerSwift.debug.xcconfig */, - 04420AA069E60E2676B1C8145D489AFE /* IQKeyboardManagerSwift.release.xcconfig */, - B5A83B1987A0D179A3EAE24B6183FF37 /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */, + 32CC609D1546AF3789419217412783D0 /* IQKeyboardManagerSwift.modulemap */, + D4270A3541F22B881BD953A68F6E73F9 /* IQKeyboardManagerSwift-dummy.m */, + 5F8E6400E281B0FB397224FDE9690416 /* IQKeyboardManagerSwift-Info.plist */, + 45865163BC96B7A2B481C17A0EC1D4F8 /* IQKeyboardManagerSwift-prefix.pch */, + 8147290C4A326DADC3F305533BD64023 /* IQKeyboardManagerSwift-umbrella.h */, + 7C9ABFFD091844286C2E85A20189BF7A /* IQKeyboardManagerSwift.debug.xcconfig */, + FAE9E39FF0684DBEA572BB783B3A18F7 /* IQKeyboardManagerSwift.release.xcconfig */, + 472E9223ECD1656D4CD5CD1BDC50D9CA /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */, ); name = "Support Files"; path = "../Target Support Files/IQKeyboardManagerSwift"; sourceTree = "<group>"; }; - 26A3C923FF2FC3BF84BADEC1E731C9D1 /* Support Files */ = { + 4A4B14A5B6B233355F4F15CA6F41639D /* EPSignature */ = { isa = PBXGroup; children = ( - E6049E937091EF3FC850CDC4BEF9B925 /* EPSignature.modulemap */, - B3FCB83859385DB3694F04D44B40FE18 /* EPSignature-dummy.m */, - 3C28E959FA9C6343351C3EA1ED606EBA /* EPSignature-Info.plist */, - D2E621AE82FB76EEF79C8A2D0102AAF7 /* EPSignature-prefix.pch */, - A7BA040D977C503D2A8C2D9BF404E21C /* EPSignature-umbrella.h */, - EE009617DB5A966C6E58EFC97D17875C /* EPSignature.debug.xcconfig */, - E3DA260DCB001D3DF844896311887A56 /* EPSignature.release.xcconfig */, + 2E9D8E28679896AEA1627BA66F8580C2 /* EPExtensions.swift */, + 452182903F9A76184461CC377DB62A70 /* EPSignatureView.swift */, + C1A5BF586C35098EC908E7870B407170 /* EPSignatureViewController.swift */, + A2352D8C906BE3FB6FAD9C1888ABF323 /* Resources */, + 26BC96ABCD3829D81C157FA2F5CD0DCE /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/EPSignature"; + path = EPSignature; sourceTree = "<group>"; }; - 2A17FA4F601F6E648A9D9E4A00514B43 /* FSPagerView */ = { + 4B36B2F6BD2CAF18A7FFFF0D7E1E84E6 /* Support Files */ = { isa = PBXGroup; children = ( - D6D6492D4AE05CD36F797199E44F1805 /* FSPageControl.swift */, - 3E9452E6ADBDB9FF5D00CEDC3ED637F3 /* FSPagerCollectionView.swift */, - E3703BDC76205E7D102F2BF32B3D8ACC /* FSPagerView.swift */, - 842BA45676E86EFC650EFC7B33D1572F /* FSPagerViewCell.swift */, - 891FABB9A51285F499148E921B1A8E24 /* FSPagerViewLayoutAttributes.swift */, - F047971CD665BC407A8DAA32AD3A9B98 /* FSPagerViewObjcCompat.h */, - B7F2D378ED96DA779D964000E6DECED9 /* FSPagerViewObjcCompat.m */, - D5F711A94EB088CF457F893E60C568B4 /* FSPageViewLayout.swift */, - B909C40450F7213C478AE50F7E2D18A9 /* FSPageViewTransformer.swift */, - 3012AAA80F07B88F99FF98BFC49DEB12 /* Support Files */, - ); - path = FSPagerView; + FC40942321CA219791F79BDB4C72DA52 /* LanguageManager-iOS.modulemap */, + BF809679D3CFFBC72878EC9BFEA90F5E /* LanguageManager-iOS-dummy.m */, + 48FAE289F4B7A5D4D99BDB1F74A1C163 /* LanguageManager-iOS-Info.plist */, + DC9A64B83C916D4FC5C9CE722E697819 /* LanguageManager-iOS-prefix.pch */, + 3510141CBBD30B465F757E0A8E2B1097 /* LanguageManager-iOS-umbrella.h */, + 8BA50CB662E7C23406F0B83501BA32D7 /* LanguageManager-iOS.debug.xcconfig */, + 9AAA7A084DC8F453913C80DE1E243C39 /* LanguageManager-iOS.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/LanguageManager-iOS"; sourceTree = "<group>"; }; - 2E7A5EFE117E058AC986DCE2A08D9981 /* LanguageManager-iOS */ = { + 67EA5FFBCFCDDED6A445407A917EE0A1 /* Targets Support Files */ = { isa = PBXGroup; children = ( - 615EB6B3844737F49004E6E4A8F968A0 /* DefaultsKeys.swift */, - 8434491D5623794FFD75623AC5720E3C /* LanguageManager.swift */, - CACF959977B91C5F65F381B36C452B6D /* Languages.swift */, - 4D0027E6314671B943C4497115466711 /* Storage.swift */, - 398208613C39BD5EF043841FA4CBF884 /* String+Localiz.swift */, - A4D36302D2F7234AEEC28003C3244EB4 /* UIButton+Direction.swift */, - 5761D7B5C5A856ED4D8A03F284C8771F /* UIImageView+Direction.swift */, - 586B6FC37EB8231AC7C24C1CC2776384 /* UIView+Direction.swift */, - 1EF3F9326AE21BCEED16E14D0872FE9C /* UIView+Swizzling.swift */, - 8EA72F0B0DD57B9D078AF8EFCE412455 /* ViewDirection.swift */, - 14228F2D01F944CCB04C42A76EB1DBBB /* Support Files */, + EC99F10DC5C191754BE16B2F6AC739A8 /* Pods-MiniScanner */, ); - path = "LanguageManager-iOS"; + name = "Targets Support Files"; sourceTree = "<group>"; }; - 3012AAA80F07B88F99FF98BFC49DEB12 /* Support Files */ = { + 69769D414834BD844C659CFA8A148FDF /* Support Files */ = { isa = PBXGroup; children = ( - 9A0A414944257050868C6C9F38FA10DF /* FSPagerView.modulemap */, - 7A54F7427340E254B559EC1244CA2E45 /* FSPagerView-dummy.m */, - 490673E82DCDC51D3CF4E4936D75E6F6 /* FSPagerView-Info.plist */, - 4105CD9664E76F34242222CF357D24ED /* FSPagerView-prefix.pch */, - 01ACC366C89CCCD7C9CF3E69462AC2A7 /* FSPagerView-umbrella.h */, - FD60805FB0B777848E7DD77214586E88 /* FSPagerView.debug.xcconfig */, - 507C1B0C545DAAFE25BB8DD789F224EF /* FSPagerView.release.xcconfig */, + 17EF00C659AFF94B598E7501E2992350 /* ImagePicker.modulemap */, + 3FD2850880C4A8033AED333F5DFAE328 /* ImagePicker-dummy.m */, + 180962FC6F75908EC73049ADB28FC887 /* ImagePicker-Info.plist */, + B710E28309BEA5C002164BD008CFB6C0 /* ImagePicker-prefix.pch */, + FDF5381B2554B2BB1D7949E3B9A7DF79 /* ImagePicker-umbrella.h */, + 6224FD5F7C95061A57CAFA73995B3002 /* ImagePicker.debug.xcconfig */, + 0CBC68B38C0421EC0AE36B43FB2C7636 /* ImagePicker.release.xcconfig */, + 0AF6D83B6BEECA27C12EB10E96CF4A52 /* ResourceBundle-ImagePicker-ImagePicker-Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/FSPagerView"; + path = "../Target Support Files/ImagePicker"; sourceTree = "<group>"; }; - 39D6CDB78D2E7EAED2CBF8A76DC770A5 /* Products */ = { + 74EBBEDBF3B9E91A60E18ADBE0893A25 /* Resources */ = { + isa = PBXGroup; + children = ( + A532EFEAAE9EEAA7CFA7DF04C7E1808B /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = "<group>"; + }; + 7FE4C9AB96A6A8E628751776D1D495CB /* Products */ = { isa = PBXGroup; children = ( 3DFAC6F70B9CECADF5873F487AF082BA /* EPSignature.framework */, - 0F47FB5E28EE8C8342B1776D813D1A4C /* FSPagerView.framework */, 987CD19BC0CE18F2E00B0AD5ABF8670D /* ImagePicker.framework */, 97AA160F23F0CBEDDAF212103E762FC7 /* ImagePicker.bundle */, A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift.framework */, @@ -610,66 +594,79 @@ name = Products; sourceTree = "<group>"; }; - 3CA2F37400AD74A8892927594B43C307 /* ImagePicker */ = { + 80AD8CA2B1725CE71EDD106621961603 /* IQKeyboardManagerSwift */ = { isa = PBXGroup; children = ( - 7F6DD614B85D0662209A3ADCFA367295 /* AssetManager.swift */, - 4A4F7BDE573EF1AD77F082087EBBC731 /* BottomContainerView.swift */, - B021EB40B85B76049C30C2D063F0870D /* ButtonPicker.swift */, - 3B78794BA632342FFC447557E4671B16 /* CameraMan.swift */, - 343F83F1A08E56F19D01674A9BA4DC53 /* CameraView.swift */, - 90C7704EF389F83C731970D2CDF6595B /* Configuration.swift */, - 9E44A8883A35E6A01365B1C682A1164D /* ConstraintsSetup.swift */, - DB2BF5C6F33D3DA91B2EB11B23EEE3FE /* Helper.swift */, - 54A9B08BB29EC7935F6A8F8ACD56BEB0 /* ImageGalleryLayout.swift */, - CE5D7D46BA438C135B812D0C145CBE6C /* ImageGalleryView.swift */, - 689EF9768E3E18B833DD776EAD893408 /* ImageGalleryViewCell.swift */, - E62A4882567E433682E9D7925C2BDA73 /* ImageGalleryViewDataSource.swift */, - 21142CC27FC93E41241CC8948B1EE25C /* ImagePickerController.swift */, - 47978E33AA1FE786BB675EA3F66DE381 /* ImageStack.swift */, - BAA72CEA94002E53D03EC7DCC0E59413 /* LocationManager.swift */, - D8CA0DD8AA6C4033E65CAA6FE83870F1 /* StackView.swift */, - 5FF2B9AD02F97A175585504BA5B7F448 /* TopView.swift */, - BA1D8FBFBA4E4BE6EC7D55255DE3EFBC /* VideoInfoView.swift */, - 159345AC740753E09FF1E49D7B342203 /* Resources */, - F77F18FFC2A0B514B85F4840876DA397 /* Support Files */, + 4FE3DE7F264E30C392DCECA7921DAEF2 /* IQActiveConfiguration.swift */, + F88000230AEFE1CF1FC184347AAE598B /* IQBarButtonItem.swift */, + 419AB69B674D6C318AC58EE6D9AFF102 /* IQBarButtonItemConfiguration.swift */, + A12B5A63F2CB09B7D22B7E2F4A2210EB /* IQInvocation.swift */, + 297848FCF8FE33D0DA0FDA6C8B1F5CC3 /* IQKeyboardConfiguration.swift */, + 8F3317C2A83E43FF75DFCFD3FAEB3669 /* IQKeyboardInfo.swift */, + 400224F8C71E7053C79E8D5E509534F4 /* IQKeyboardListener.swift */, + A353C25676960291A3718B5AFDB81A33 /* IQKeyboardManager.swift */, + 5B1D47B8C43A0DA0A05A410655A28153 /* IQKeyboardManager+Debug.swift */, + B6C5E34F15E4BBDA3480406FF35C1903 /* IQKeyboardManager+Deprecated.swift */, + AB94CC5B3F453AA0801700167152FCA1 /* IQKeyboardManager+Internal.swift */, + 05DDE99E61633BB77D72F46FD10F71BC /* IQKeyboardManager+Position.swift */, + A1229814968DD5876FBA87DDA81C5B8F /* IQKeyboardManager+Toolbar.swift */, + D9651F46100B3C105EE27B92C1DFFCEC /* IQKeyboardManager+ToolbarActions.swift */, + D2DB0BCD57E720CE97C1C3CE74B75024 /* IQKeyboardManager+UIKeyboardNotification.swift */, + A0DA73612FA4F954FCE02EA0ADACE634 /* IQKeyboardManager+UITextFieldViewNotification.swift */, + 49FC6FE3F43F76CA598D3253A1731EEB /* IQKeyboardManagerCompatible.swift */, + D9F19506C84032240A21541F9EFCA895 /* IQKeyboardManagerConstants.swift */, + EC4B66ABF37EFD118BC08264BBCA6461 /* IQKeyboardReturnKeyHandler.swift */, + 8F0A5164AA0CCC729C8EA5166760BA9E /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift */, + B5EDE1D4720CA7A048A32667F968ED10 /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift */, + 62160BE00E3966D4D52808B89DE0B1B3 /* IQNSArray+Sort.swift */, + D3DC4A4D35E057E5F76427C838E3E495 /* IQPlaceholderable.swift */, + 187B8EDBE8957C190B1EB7C8F949ED80 /* IQPreviousNextView.swift */, + 878EC7606D056CAB26A578762AF922D7 /* IQRootControllerConfiguration.swift */, + 486835CC5D14C1EA193F8575CA89FDCC /* IQScrollViewConfiguration.swift */, + E34B4735C7461EBF9AEEC896DEB27C33 /* IQTextFieldViewInfo.swift */, + 00AA2070B1A7F8ECC88B6E7F0EEB2167 /* IQTextFieldViewInfoModel.swift */, + 6F6826627BFA6A69002524426F8CFFB7 /* IQTextFieldViewListener.swift */, + 5A6291B42FA169A1C1919CB49B0B8509 /* IQTextView.swift */, + A100F9EA89810A00541755ECD7BBB307 /* IQTitleBarButtonItem.swift */, + F76805C9416BA1FC318E025ACA3B95EF /* IQToolbar.swift */, + 3243FB397BF2AFE225A1FC09542DBF5D /* IQToolbarConfiguration.swift */, + A3B5F550C3AA900D117E22291DE5D67C /* IQToolbarPlaceholderConfiguration.swift */, + 92470A870676C63A27509F38301D521C /* IQUICollectionView+Additions.swift */, + 6B5E1D310DD754E122DEEE009481A2D6 /* IQUIScrollView+Additions.swift */, + 619978A0C0036454C22A81173BAA5A6A /* IQUITableView+Additions.swift */, + 116DA05004680C76EAB707C0943392EB /* IQUITextFieldView+Additions.swift */, + D55EBF017F6625B593286F47CFEB1FA3 /* IQUIView+Hierarchy.swift */, + AB5F2D5DFB52DE92C94A23801BAC451C /* IQUIView+IQKeyboardToolbar.swift */, + 8E6FDE31134B7541747D1E89E52E225A /* IQUIView+IQKeyboardToolbarDeprecated.swift */, + B5598E57D63117C1B54ADBB7A187B232 /* IQUIViewController+Additions.swift */, + FEB8E045AED5393DCC7FA1C76AB59AB8 /* UIImage+NextPrevious.swift */, + 74EBBEDBF3B9E91A60E18ADBE0893A25 /* Resources */, + 3EA95E4CF3A010D9796C8FD8B665C566 /* Support Files */, ); - path = ImagePicker; - sourceTree = "<group>"; - }; - 3E464AC9EEFEEE8C0975B029E5B7418E /* EPSignature */ = { - isa = PBXGroup; - children = ( - 1E288979D79A43A7925DB41055CDD376 /* EPExtensions.swift */, - BE559964BD58119769FB19BB95144A6A /* EPSignatureView.swift */, - AF61B6A70C39B0ACDA33B583642A26EE /* EPSignatureViewController.swift */, - 033ACCB632D94A95AEEF9DCA045558CA /* Resources */, - 26A3C923FF2FC3BF84BADEC1E731C9D1 /* Support Files */, - ); - path = EPSignature; + path = IQKeyboardManagerSwift; sourceTree = "<group>"; }; - 67EA5FFBCFCDDED6A445407A917EE0A1 /* Targets Support Files */ = { + 82B9E590AF4CA104F25BE686066D17D4 /* Support Files */ = { isa = PBXGroup; children = ( - EC99F10DC5C191754BE16B2F6AC739A8 /* Pods-MiniScanner */, + E68A22DD9E65EF800882452842690AE1 /* NBBottomSheet.modulemap */, + AD71C20FAD4FE7E08FA8091857A2FDCB /* NBBottomSheet-dummy.m */, + 0B1626D50D1FBDF5976CCCE6F16928A1 /* NBBottomSheet-Info.plist */, + 0CB32F67F5B5E9A2C263A017E98041AC /* NBBottomSheet-prefix.pch */, + 389AA43304A03366FC2510859AA7DCBA /* NBBottomSheet-umbrella.h */, + 45B232DE9D6710FE8BF7DC25C2C80333 /* NBBottomSheet.debug.xcconfig */, + 26EDF88E14046AAC34BFF99F97D23B05 /* NBBottomSheet.release.xcconfig */, ); - name = "Targets Support Files"; + name = "Support Files"; + path = "../Target Support Files/NBBottomSheet"; sourceTree = "<group>"; }; - A7F75D63C62A3641741549AB252E760C /* Support Files */ = { + A2352D8C906BE3FB6FAD9C1888ABF323 /* Resources */ = { isa = PBXGroup; children = ( - 23A10D783B0ECA5BA75D4E94BDA01957 /* NBBottomSheet.modulemap */, - 1935C8E9966B3C94DD69B219D3DBFBD0 /* NBBottomSheet-dummy.m */, - CA39A57EEAD9575350DCFB2377E01DD9 /* NBBottomSheet-Info.plist */, - 50F1C0F59A45281CE2D310673AE0571F /* NBBottomSheet-prefix.pch */, - 65E35E2A8DCF85A60B0EF9389B0495AE /* NBBottomSheet-umbrella.h */, - 22FCBFA0E2A7651B248460AD3CB4DE32 /* NBBottomSheet.debug.xcconfig */, - 4E8E62EE488350F66CC08D1D88AF14EE /* NBBottomSheet.release.xcconfig */, + 56C1C453B74E770D4AC56A090051BCF5 /* EPSignatureViewController.xib */, ); - name = "Support Files"; - path = "../Target Support Files/NBBottomSheet"; + name = Resources; sourceTree = "<group>"; }; B94D7768568A9992200DB461E8CF687F /* Frameworks */ = { @@ -680,90 +677,29 @@ name = Frameworks; sourceTree = "<group>"; }; - CDA83A613FCB366E70C92238C360E636 /* IQKeyboardManagerSwift */ = { - isa = PBXGroup; - children = ( - 831781174B420BA2000C5A20F9B1A155 /* IQActiveConfiguration.swift */, - 065FDC013F6128B451B9F622F8A98C11 /* IQBarButtonItem.swift */, - 4DA62F8724EC161B523761C4D312EE6A /* IQBarButtonItemConfiguration.swift */, - 32A5E10DAD7E67CBAFB25E12CF020274 /* IQInvocation.swift */, - B700D2C4CED5ED22050429C7997CF1FE /* IQKeyboardConfiguration.swift */, - 69FC816770553B761090561AE8707674 /* IQKeyboardInfo.swift */, - A1BD1A58666D6C0FD408F4DB3ADC8107 /* IQKeyboardListener.swift */, - 1B4086624F01B0B30DDB90F23478F288 /* IQKeyboardManager.swift */, - 4CEB26DB8656A60C8AE2B83EF56A1149 /* IQKeyboardManager+Debug.swift */, - 4F2207491E92F152C27D2B4A764A6A93 /* IQKeyboardManager+Deprecated.swift */, - A230ED28736A611DEEC851620E6444DE /* IQKeyboardManager+Internal.swift */, - 2209E8AC4BD6C9607BD14A1D48B3FBB3 /* IQKeyboardManager+Position.swift */, - 88DFD4B8DC15592A7CD38D8AD9C01668 /* IQKeyboardManager+Toolbar.swift */, - 7F23D0E0AE3BDC7AE6A7D331A0FF5AF6 /* IQKeyboardManager+ToolbarActions.swift */, - 4A5338232CA701AD47A2EA3B534BD224 /* IQKeyboardManager+UIKeyboardNotification.swift */, - 0EFB4A164AE952F817BA0A6FCE622791 /* IQKeyboardManager+UITextFieldViewNotification.swift */, - EA5483FEE1B87041C4751EA1D4F3EF54 /* IQKeyboardManagerCompatible.swift */, - AC43EDC562847626ACF7B4E93E5462EF /* IQKeyboardManagerConstants.swift */, - E21781AECFBC7371F2118155ACE5C3C7 /* IQKeyboardReturnKeyHandler.swift */, - 7136D2DF9E35BE04AE50612BF8809136 /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift */, - B6C332B0108C87436290C293E043023A /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift */, - C1DC2A0ED79E1179E28CE75BFECCDA82 /* IQNSArray+Sort.swift */, - CE58805A3FAC71C6A5782C1B1BB08069 /* IQPlaceholderable.swift */, - DE7235727A466A9B7BF8342CC42C4B91 /* IQPreviousNextView.swift */, - 24533AECDB8F27FACE2D96631FC3F307 /* IQRootControllerConfiguration.swift */, - 545688259B1D4CD8A59AF3D7E0AFE7B9 /* IQScrollViewConfiguration.swift */, - 309F127A50B023B6041C44942C9079DE /* IQTextFieldViewInfo.swift */, - 23B7EBFBD51FC4710CDE4AFAE46E8860 /* IQTextFieldViewInfoModel.swift */, - 3DB66972AE146B779F56CFD49B324220 /* IQTextFieldViewListener.swift */, - 8B5D88BFE14997FA9B22FA4A4B8CD6DA /* IQTextView.swift */, - 4DB37A30323A7D2ED16581BA15B8351D /* IQTitleBarButtonItem.swift */, - 926EAAA6426204DE1DF8D36D2E13EA74 /* IQToolbar.swift */, - 8A9AA0FBABA9E9EEF6521C23B2031158 /* IQToolbarConfiguration.swift */, - 92CEF8FFA7885B7EC96C4120D507A08F /* IQToolbarPlaceholderConfiguration.swift */, - D4C85B9AE116359EBFD1959406B32999 /* IQUICollectionView+Additions.swift */, - A8A8D208D764CFAC89604E6813F1444E /* IQUIScrollView+Additions.swift */, - C6F5B0BFC63CD2F3B0DF56912D4F54E8 /* IQUITableView+Additions.swift */, - 79655C283B54B5F907790F4E79C388EF /* IQUITextFieldView+Additions.swift */, - BE1348270A5A7F3FDEFAC32D8E89686A /* IQUIView+Hierarchy.swift */, - 3DF9BB8A2089DB5AEEA4B43132D0B074 /* IQUIView+IQKeyboardToolbar.swift */, - 47A7457CB008481373FBC626968AD770 /* IQUIView+IQKeyboardToolbarDeprecated.swift */, - 9B35CF76304163C551A5E4B592066D0D /* IQUIViewController+Additions.swift */, - AC7F01FAC278F9B096CFFD78497206CF /* UIImage+NextPrevious.swift */, - D83F449675FA61063F04877699E1FBD8 /* Resources */, - 2524B6CA73749FE91A5B77026AB9E48B /* Support Files */, - ); - path = IQKeyboardManagerSwift; - sourceTree = "<group>"; - }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, B94D7768568A9992200DB461E8CF687F /* Frameworks */, - CF40832A62CD5EA22B643D00EBBD9BFD /* Pods */, - 39D6CDB78D2E7EAED2CBF8A76DC770A5 /* Products */, + D3C95BBF75043277050186353459BC4F /* Pods */, + 7FE4C9AB96A6A8E628751776D1D495CB /* Products */, 67EA5FFBCFCDDED6A445407A917EE0A1 /* Targets Support Files */, ); sourceTree = "<group>"; }; - CF40832A62CD5EA22B643D00EBBD9BFD /* Pods */ = { + D3C95BBF75043277050186353459BC4F /* Pods */ = { isa = PBXGroup; children = ( - 3E464AC9EEFEEE8C0975B029E5B7418E /* EPSignature */, - 2A17FA4F601F6E648A9D9E4A00514B43 /* FSPagerView */, - 3CA2F37400AD74A8892927594B43C307 /* ImagePicker */, - CDA83A613FCB366E70C92238C360E636 /* IQKeyboardManagerSwift */, - 2E7A5EFE117E058AC986DCE2A08D9981 /* LanguageManager-iOS */, - 0113FD3C8FD8AA93BDC06466006587F3 /* NBBottomSheet */, + 4A4B14A5B6B233355F4F15CA6F41639D /* EPSignature */, + 1377F47D0ECC009D7BEFB14769F14316 /* ImagePicker */, + 80AD8CA2B1725CE71EDD106621961603 /* IQKeyboardManagerSwift */, + 1CD1A4CC34821855EE0B47C1DB7536BD /* LanguageManager-iOS */, + 32620674ED381C186389FA1D871AFD24 /* NBBottomSheet */, ); name = Pods; sourceTree = "<group>"; }; - D83F449675FA61063F04877699E1FBD8 /* Resources */ = { - isa = PBXGroup; - children = ( - B638343F1BC71A9A9CD3A6D6CA749DC7 /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = "<group>"; - }; EC99F10DC5C191754BE16B2F6AC739A8 /* Pods-MiniScanner */ = { isa = PBXGroup; children = ( @@ -781,34 +717,9 @@ path = "Target Support Files/Pods-MiniScanner"; sourceTree = "<group>"; }; - F77F18FFC2A0B514B85F4840876DA397 /* Support Files */ = { - isa = PBXGroup; - children = ( - 30A55721765A033C43BEE85DF167DC60 /* ImagePicker.modulemap */, - 4AAF24BB95964A47FF71115DCACE5CC1 /* ImagePicker-dummy.m */, - 4EEEA55AC9C261C1EABE60EC57A5021B /* ImagePicker-Info.plist */, - 82E4B4BB461879C2730CD6E789150CB8 /* ImagePicker-prefix.pch */, - DD48D4FC5BD3A99772F4FE6FDB643898 /* ImagePicker-umbrella.h */, - 9027793C7414B308134453884A6716FD /* ImagePicker.debug.xcconfig */, - DBE740FF0A3373F56E7AF2A4000D6D8C /* ImagePicker.release.xcconfig */, - 317125123DFF6A76FF8664EF536038C2 /* ResourceBundle-ImagePicker-ImagePicker-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/ImagePicker"; - sourceTree = "<group>"; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 0608DA1408F82CC4ADBFAF480D0FA2B4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - CE2C6FD104092EA3F2F0A357C72460A8 /* FSPagerView-umbrella.h in Headers */, - 91611428D06F5E61CECF70A53E6DA6C6 /* FSPagerViewObjcCompat.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 11370304D07B86BF4935D7D5A612503A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -825,28 +736,28 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 63F686C3D19F8A097B95FBAA087727D3 /* Headers */ = { + 77150D3DA409E22AAAE3AC967B0FDC17 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 9517FE286FAA3C856DC6C1B6F91F48CF /* Pods-MiniScanner-umbrella.h in Headers */, + 3573FA382FBE08F99039CED491DB9FF0 /* IQKeyboardManagerSwift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 77150D3DA409E22AAAE3AC967B0FDC17 /* Headers */ = { + 9C1E51FBB23B8F5AC126898FEDD00F52 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 3573FA382FBE08F99039CED491DB9FF0 /* IQKeyboardManagerSwift-umbrella.h in Headers */, + 797DF46337EAC66E47C5ADAF32515524 /* NBBottomSheet.h in Headers */, + FE4936BFE1B6B6A9E8136010E413A24B /* NBBottomSheet-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9C1E51FBB23B8F5AC126898FEDD00F52 /* Headers */ = { + E1A4DFD94B34CD656D047F2CE55E141E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 797DF46337EAC66E47C5ADAF32515524 /* NBBottomSheet.h in Headers */, - FE4936BFE1B6B6A9E8136010E413A24B /* NBBottomSheet-umbrella.h in Headers */, + C884AFFEC6B0F6540E8A5593250D5741 /* Pods-MiniScanner-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -873,7 +784,7 @@ buildRules = ( ); dependencies = ( - E9327F4979BAC249AD227EFB65293BB7 /* PBXTargetDependency */, + 7907CFE4C755F2FC455B6FB6B982A84E /* PBXTargetDependency */, ); name = ImagePicker; productName = ImagePicker; @@ -900,22 +811,21 @@ }; 4372AB6A3C495222906A1ABFD39A4463 /* Pods-MiniScanner */ = { isa = PBXNativeTarget; - buildConfigurationList = 4E37980CDFA92572E6955A05C6C57717 /* Build configuration list for PBXNativeTarget "Pods-MiniScanner" */; + buildConfigurationList = 21E40E7EF4A668720A0BC4974A414686 /* Build configuration list for PBXNativeTarget "Pods-MiniScanner" */; buildPhases = ( - 63F686C3D19F8A097B95FBAA087727D3 /* Headers */, - 809C6F992289D71DBD1D7BFA4B05305A /* Sources */, - 7AF0B4E0EB5D8A901728672A5277DAFC /* Frameworks */, - 9078164A79E8D5740BDAFCB454C8B826 /* Resources */, + E1A4DFD94B34CD656D047F2CE55E141E /* Headers */, + AA10E1444171443C0B5BCA1096353377 /* Sources */, + 356D6AE3CB46F510D123D125D9B58B7C /* Frameworks */, + 7548C4739E6BCE23ABB1B5BD57E7ED73 /* Resources */, ); buildRules = ( ); dependencies = ( - 4AE52BA60D1AEFF2B1AFFE147C779165 /* PBXTargetDependency */, - 40292EA58C6CD288650B534FC0E7FCDC /* PBXTargetDependency */, - 0139628E2EDB9A6AD2B119DE4D1B092B /* PBXTargetDependency */, - B1DD8053C35D0B44F2268CAB89353885 /* PBXTargetDependency */, - D836F926DCF33106AFD6E73977095C38 /* PBXTargetDependency */, - D341CBE09A66072A9CD356EF2EB37FF7 /* PBXTargetDependency */, + 6D816E6D698E10FDBE40764CC34D49B2 /* PBXTargetDependency */, + 29743ED8B9772E83B55B66D15C7751B6 /* PBXTargetDependency */, + 41BDC0B4C02D2F478CF6E580BB0ED276 /* PBXTargetDependency */, + 1F155C5185BA60981E950C8356C10505 /* PBXTargetDependency */, + 090A4DADA36A746FDB7C115750022A52 /* PBXTargetDependency */, ); name = "Pods-MiniScanner"; productName = Pods_MiniScanner; @@ -924,11 +834,11 @@ }; 614D1818852890AC7D3CDF68D512C370 /* ImagePicker-ImagePicker */ = { isa = PBXNativeTarget; - buildConfigurationList = CB7A73EFBC09495176FD10B3C82A8767 /* Build configuration list for PBXNativeTarget "ImagePicker-ImagePicker" */; + buildConfigurationList = 61E5E465E4EBDC7192A60BDB29B54904 /* Build configuration list for PBXNativeTarget "ImagePicker-ImagePicker" */; buildPhases = ( - C361A7756A2D12C04F9F6C0F631D4AFB /* Sources */, - CE9AC41D181266461331A2C974AEA95B /* Frameworks */, - 469AC1D9DADBAC72A4A8876068211A6A /* Resources */, + 557CE2F544FA412F5D8D59F28849E31F /* Sources */, + 8D97E7F0E48EF9F505EED4D818710D20 /* Frameworks */, + 48F3F81CFBD0387B6D359B8E5102FC29 /* Resources */, ); buildRules = ( ); @@ -977,11 +887,11 @@ }; 982A68D37F5DCBC1FC1FDC0BB2F0EB8E /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */ = { isa = PBXNativeTarget; - buildConfigurationList = 1851179FA635C20329E7C7D49A253636 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */; + buildConfigurationList = 768672492BEBD11B2982745D1B777D28 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */; buildPhases = ( - C4304AA8E683E2F927FF7940A08EB4D2 /* Sources */, - 60A6157C9520B77A0217CF22A787E99D /* Frameworks */, - F489B4E141527BB75F5BADD2297267D0 /* Resources */, + DA4A3E8A0AB0D7E287665A709E56EC36 /* Sources */, + 1F8DF3016F5E08F65F63559E2A2A827B /* Frameworks */, + 2F6648C27D9805F9F5D062160BDC0EBB /* Resources */, ); buildRules = ( ); @@ -1004,31 +914,13 @@ buildRules = ( ); dependencies = ( - 89C0A28CA8B1E42AE61ADCA14C031FED /* PBXTargetDependency */, + 0451FAFE12B598AE56109360B5127611 /* PBXTargetDependency */, ); name = IQKeyboardManagerSwift; productName = IQKeyboardManagerSwift; productReference = A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift.framework */; productType = "com.apple.product-type.framework"; }; - D4F8239FB329387A8476B964D92D92E7 /* FSPagerView */ = { - isa = PBXNativeTarget; - buildConfigurationList = 98343682D690F1F5CF2596A899F35F57 /* Build configuration list for PBXNativeTarget "FSPagerView" */; - buildPhases = ( - 0608DA1408F82CC4ADBFAF480D0FA2B4 /* Headers */, - 5F08C52D6C5CBA958747935FFDA1DFC2 /* Sources */, - E5ACBBCF353041B05D869DB1467D16B1 /* Frameworks */, - C51D8DC25EB55BC76B82A9E61C8BE832 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FSPagerView; - productName = FSPagerView; - productReference = 0F47FB5E28EE8C8342B1776D813D1A4C /* FSPagerView.framework */; - productType = "com.apple.product-type.framework"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -1047,12 +939,11 @@ en, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 39D6CDB78D2E7EAED2CBF8A76DC770A5 /* Products */; + productRefGroup = 7FE4C9AB96A6A8E628751776D1D495CB /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 3CAF5EBFE5D1550CFF58AEC93594990A /* EPSignature */, - D4F8239FB329387A8476B964D92D92E7 /* FSPagerView */, 01CB8D6098C21E12CE735619344DE81E /* ImagePicker */, 614D1818852890AC7D3CDF68D512C370 /* ImagePicker-ImagePicker */, B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */, @@ -1065,62 +956,63 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 3B58EC4259531E84AFA63D59D1133D3E /* Resources */ = { + 2F6648C27D9805F9F5D062160BDC0EBB /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 5C4E571F3ADE020356DAF5143816FC55 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 469AC1D9DADBAC72A4A8876068211A6A /* Resources */ = { + 3B58EC4259531E84AFA63D59D1133D3E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 61A0C05934861A0EACC1549F2419289A /* AUTO@3x.png in Resources */, - 71B7397ADA300CDE41CB406BE694A8A2 /* cameraIcon@3x.png in Resources */, - 047539EBA967BC7505B53F36E1A2836A /* focusIcon@3x.png in Resources */, - 4695B952627B345252A52CB26B7747CC /* OFF@3x.png in Resources */, - 2F7AE7DED85C12F45995DA2DF033641C /* ON@3x.png in Resources */, - 0C99571A708CA382A984BDEDA5AE25D5 /* selectedImageGallery@3x.png in Resources */, - C116540980BCB8D0E54215D9E8C7AD78 /* video@3x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4A72A323CCD420112722EDFB4439C184 /* Resources */ = { + 48F3F81CFBD0387B6D359B8E5102FC29 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4CDBAE55660ED186441E9E4EDE6B3D31 /* IQKeyboardManagerSwift.bundle in Resources */, + 8D935C83E5D7B42A4C6439FFA767CE24 /* AUTO@3x.png in Resources */, + 28658B67B33D0AF1A396F70CF4C416FD /* cameraIcon@3x.png in Resources */, + FF74A846B2EEC0D52379B48D7963D8C0 /* focusIcon@3x.png in Resources */, + A213B981B47C6B4734589B6ED9469132 /* OFF@3x.png in Resources */, + 19BA03143F6B7CCC7F6D3A5000333763 /* ON@3x.png in Resources */, + 09F4E3A6DED312368CE8E037A171BD70 /* selectedImageGallery@3x.png in Resources */, + 1B1937CEB4E9DF65238702771B4232B4 /* video@3x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 500BEBDB28E9B664CEB4A237CBAE1EC8 /* Resources */ = { + 4A72A323CCD420112722EDFB4439C184 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1BBD42E84E62842B6EA186CEF24BBF45 /* ImagePicker.bundle in Resources */, + 4CDBAE55660ED186441E9E4EDE6B3D31 /* IQKeyboardManagerSwift.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7F8929911997B177FECDE1757E47C40B /* Resources */ = { + 500BEBDB28E9B664CEB4A237CBAE1EC8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1A7787DB0275CF4A44CA312DD3BA5D33 /* EPSignatureViewController.xib in Resources */, + 1BBD42E84E62842B6EA186CEF24BBF45 /* ImagePicker.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9078164A79E8D5740BDAFCB454C8B826 /* Resources */ = { + 7548C4739E6BCE23ABB1B5BD57E7ED73 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - C51D8DC25EB55BC76B82A9E61C8BE832 /* Resources */ = { + 7F8929911997B177FECDE1757E47C40B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1A7787DB0275CF4A44CA312DD3BA5D33 /* EPSignatureViewController.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1131,14 +1023,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - F489B4E141527BB75F5BADD2297267D0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 960957461D403847E92AF1825B4D8506 /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -1219,27 +1103,10 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5F08C52D6C5CBA958747935FFDA1DFC2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F2562CFCEC42E2989BADC7E823F2C9C3 /* FSPageControl.swift in Sources */, - ECA11CD4E20DFCA3327CB006B10A3DB8 /* FSPagerCollectionView.swift in Sources */, - 29C03EAF5C27DC851118AEC88ABEC151 /* FSPagerView.swift in Sources */, - F6702D89104E55C112FE16943BE7D41A /* FSPagerView-dummy.m in Sources */, - 69C7244F5E0D41CF59E5ADC8952F8D0D /* FSPagerViewCell.swift in Sources */, - C85C11573FFE927A84AD0C8BE456AD81 /* FSPagerViewLayoutAttributes.swift in Sources */, - EA89DFEFE15FAD82868C74E94F6F1B75 /* FSPagerViewObjcCompat.m in Sources */, - 40987E046BAD603A58CA00B9A7648588 /* FSPageViewLayout.swift in Sources */, - 488A767CF7494D169BFB886EDC470F5D /* FSPageViewTransformer.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 809C6F992289D71DBD1D7BFA4B05305A /* Sources */ = { + 557CE2F544FA412F5D8D59F28849E31F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 014ADEB344680FBC5C6D76E16B255CAC /* Pods-MiniScanner-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1254,14 +1121,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C361A7756A2D12C04F9F6C0F631D4AFB /* Sources */ = { + AA10E1444171443C0B5BCA1096353377 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1ECC8F5583B658DA5BC4F8D29132213F /* Pods-MiniScanner-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C4304AA8E683E2F927FF7940A08EB4D2 /* Sources */ = { + DA4A3E8A0AB0D7E287665A709E56EC36 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -1304,77 +1172,54 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0139628E2EDB9A6AD2B119DE4D1B092B /* PBXTargetDependency */ = { + 0451FAFE12B598AE56109360B5127611 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = IQKeyboardManagerSwift; - target = B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */; - targetProxy = C3EEE11D57DF83B4A602A0BB6B6D5420 /* PBXContainerItemProxy */; + name = "IQKeyboardManagerSwift-IQKeyboardManagerSwift"; + target = 982A68D37F5DCBC1FC1FDC0BB2F0EB8E /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */; + targetProxy = 6CD75698768741DC0335DCB2F06CB5BC /* PBXContainerItemProxy */; }; - 40292EA58C6CD288650B534FC0E7FCDC /* PBXTargetDependency */ = { + 090A4DADA36A746FDB7C115750022A52 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FSPagerView; - target = D4F8239FB329387A8476B964D92D92E7 /* FSPagerView */; - targetProxy = AE6E02E3D311CB4AEC5F673F47B2F7DE /* PBXContainerItemProxy */; + name = NBBottomSheet; + target = 727C2007A89D1AD73613E3E2E22998E5 /* NBBottomSheet */; + targetProxy = 19D95F1858EF2D6E80811860CFD6BF92 /* PBXContainerItemProxy */; }; - 4AE52BA60D1AEFF2B1AFFE147C779165 /* PBXTargetDependency */ = { + 1F155C5185BA60981E950C8356C10505 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = EPSignature; - target = 3CAF5EBFE5D1550CFF58AEC93594990A /* EPSignature */; - targetProxy = 195F278E699A41C19ED473B0310CAC62 /* PBXContainerItemProxy */; + name = "LanguageManager-iOS"; + target = 75F1EA88CB9544AB5CBE20DEC9A011AE /* LanguageManager-iOS */; + targetProxy = 8292BF480C5137113C3A6C342933F986 /* PBXContainerItemProxy */; }; - 89C0A28CA8B1E42AE61ADCA14C031FED /* PBXTargetDependency */ = { + 29743ED8B9772E83B55B66D15C7751B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "IQKeyboardManagerSwift-IQKeyboardManagerSwift"; - target = 982A68D37F5DCBC1FC1FDC0BB2F0EB8E /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */; - targetProxy = 368B8A0D7A211FB1D8031E50553E22B1 /* PBXContainerItemProxy */; + name = IQKeyboardManagerSwift; + target = B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */; + targetProxy = D96B4C07AAAD52B947C6F8CFEF7E8807 /* PBXContainerItemProxy */; }; - B1DD8053C35D0B44F2268CAB89353885 /* PBXTargetDependency */ = { + 41BDC0B4C02D2F478CF6E580BB0ED276 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = ImagePicker; target = 01CB8D6098C21E12CE735619344DE81E /* ImagePicker */; - targetProxy = 0473CB2089AEB22D5A94042369CBE127 /* PBXContainerItemProxy */; - }; - D341CBE09A66072A9CD356EF2EB37FF7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = NBBottomSheet; - target = 727C2007A89D1AD73613E3E2E22998E5 /* NBBottomSheet */; - targetProxy = F39E3FCE8EA4C0F8CBCC8FCA9435B319 /* PBXContainerItemProxy */; + targetProxy = FBE5961EEB250DF2DACF4F88C36BCC1E /* PBXContainerItemProxy */; }; - D836F926DCF33106AFD6E73977095C38 /* PBXTargetDependency */ = { + 6D816E6D698E10FDBE40764CC34D49B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "LanguageManager-iOS"; - target = 75F1EA88CB9544AB5CBE20DEC9A011AE /* LanguageManager-iOS */; - targetProxy = 35F75C3FB936C4BE71A7B3A5CE8352DE /* PBXContainerItemProxy */; + name = EPSignature; + target = 3CAF5EBFE5D1550CFF58AEC93594990A /* EPSignature */; + targetProxy = F3097459B372082D9C20BEF06209FBD6 /* PBXContainerItemProxy */; }; - E9327F4979BAC249AD227EFB65293BB7 /* PBXTargetDependency */ = { + 7907CFE4C755F2FC455B6FB6B982A84E /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "ImagePicker-ImagePicker"; target = 614D1818852890AC7D3CDF68D512C370 /* ImagePicker-ImagePicker */; - targetProxy = 86BCB3533B3E4CC4A62FDD4F9D7AEF5C /* PBXContainerItemProxy */; + targetProxy = D06F098EB5FE1B281549C568AA85EEA9 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 191972B2CD0BAA4D702859FFE72BED96 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DBE740FF0A3373F56E7AF2A4000D6D8C /* ImagePicker.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ImagePicker"; - IBSC_MODULE = ImagePicker; - INFOPLIST_FILE = "Target Support Files/ImagePicker/ResourceBundle-ImagePicker-ImagePicker-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - PRODUCT_NAME = ImagePicker; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; 21302220AA8668082E71583ECE31B7CA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DBE740FF0A3373F56E7AF2A4000D6D8C /* ImagePicker.release.xcconfig */; + baseConfigurationReference = 0CBC68B38C0421EC0AE36B43FB2C7636 /* ImagePicker.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1387,7 +1232,7 @@ GCC_PREFIX_HEADER = "Target Support Files/ImagePicker/ImagePicker-prefix.pch"; INFOPLIST_FILE = "Target Support Files/ImagePicker/ImagePicker-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1407,7 +1252,7 @@ }; name = Release; }; - 2E083683897CAD4CAFE6027BFB9CB404 /* Debug */ = { + 265E4B8B0199C32122BBAF162B6A7A3B /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7CC191E7994C3C7161A6641B457C9166 /* Pods-MiniScanner.debug.xcconfig */; buildSettings = { @@ -1444,44 +1289,9 @@ }; name = Debug; }; - 31731D2A96C7FF5AA4EE56EC2EB0AE2F /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 507C1B0C545DAAFE25BB8DD789F224EF /* FSPagerView.release.xcconfig */; - buildSettings = { - "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/FSPagerView/FSPagerView-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FSPagerView/FSPagerView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/FSPagerView/FSPagerView.modulemap"; - PRODUCT_MODULE_NAME = FSPagerView; - PRODUCT_NAME = FSPagerView; - 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; - }; 39440596D0B39AE8ECC2717121684FEC /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8C6B2F7653C95633BB9449F87EB6DBD9 /* LanguageManager-iOS.release.xcconfig */; + baseConfigurationReference = 9AAA7A084DC8F453913C80DE1E243C39 /* LanguageManager-iOS.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1494,7 +1304,7 @@ GCC_PREFIX_HEADER = "Target Support Files/LanguageManager-iOS/LanguageManager-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/LanguageManager-iOS/LanguageManager-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1516,7 +1326,7 @@ }; 40133D3EB8F5F41DEF101CB7F221DB6B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EE009617DB5A966C6E58EFC97D17875C /* EPSignature.debug.xcconfig */; + baseConfigurationReference = E91F93F84E9AB640A2333FBBF6CCB877 /* EPSignature.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1548,43 +1358,9 @@ }; name = Debug; }; - 434E4A52CBC9F74FA2D8CDD170442C4A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FD60805FB0B777848E7DD77214586E88 /* FSPagerView.debug.xcconfig */; - buildSettings = { - "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/FSPagerView/FSPagerView-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FSPagerView/FSPagerView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/FSPagerView/FSPagerView.modulemap"; - PRODUCT_MODULE_NAME = FSPagerView; - PRODUCT_NAME = FSPagerView; - 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; - }; 57F5390C26CAC63BC7DC9F3A897AD41C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9027793C7414B308134453884A6716FD /* ImagePicker.debug.xcconfig */; + baseConfigurationReference = 6224FD5F7C95061A57CAFA73995B3002 /* ImagePicker.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1616,9 +1392,9 @@ }; name = Debug; }; - 7357A4E2D538EC50B39381993F57DBCC /* Release */ = { + 74A42B7360C7CAE64024B006CBA43A1A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 04420AA069E60E2676B1C8145D489AFE /* IQKeyboardManagerSwift.release.xcconfig */; + baseConfigurationReference = FAE9E39FF0684DBEA572BB783B3A18F7 /* IQKeyboardManagerSwift.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardManagerSwift"; @@ -1635,7 +1411,7 @@ }; 8C7488EEB2FF7D44EDD6A1FBA48C75CC /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E3DA260DCB001D3DF844896311887A56 /* EPSignature.release.xcconfig */; + baseConfigurationReference = 2006321B115FD55474FD1B985C1979FA /* EPSignature.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1648,7 +1424,7 @@ GCC_PREFIX_HEADER = "Target Support Files/EPSignature/EPSignature-prefix.pch"; INFOPLIST_FILE = "Target Support Files/EPSignature/EPSignature-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1668,6 +1444,23 @@ }; name = Release; }; + 8D94357D87747513B8B34AAE89096A03 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7C9ABFFD091844286C2E85A20189BF7A /* IQKeyboardManagerSwift.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardManagerSwift"; + IBSC_MODULE = IQKeyboardManagerSwift; + INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + PRODUCT_NAME = IQKeyboardManagerSwift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; 90D4D09BCB6A4660E43ACBE9ECB6FE9A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1796,64 +1589,9 @@ }; name = Release; }; - 9FC6A9858115F41C4CEF565EBDE56CA8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 798C61760B9BC4B07BC60D42FCC09855 /* Pods-MiniScanner.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - "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"; - INFOPLIST_FILE = "Target Support Files/Pods-MiniScanner/Pods-MiniScanner-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MiniScanner/Pods-MiniScanner.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; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - A4D604173E31DBC1FE5B805782D66A58 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9027793C7414B308134453884A6716FD /* ImagePicker.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ImagePicker"; - IBSC_MODULE = ImagePicker; - INFOPLIST_FILE = "Target Support Files/ImagePicker/ResourceBundle-ImagePicker-ImagePicker-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - PRODUCT_NAME = ImagePicker; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; A73A28CEE205ACFB6072250615C7D39D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2EEF70A7586548C9681199386735B949 /* LanguageManager-iOS.debug.xcconfig */; + baseConfigurationReference = 8BA50CB662E7C23406F0B83501BA32D7 /* LanguageManager-iOS.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1887,7 +1625,7 @@ }; B3CF11682A60F02B60820C17EE93D35E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86D4965F304A9370159F8BEE0D0951D5 /* IQKeyboardManagerSwift.debug.xcconfig */; + baseConfigurationReference = 7C9ABFFD091844286C2E85A20189BF7A /* IQKeyboardManagerSwift.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1920,9 +1658,26 @@ }; name = Debug; }; + B7F72126190288DAACE0F880A0CE87C7 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6224FD5F7C95061A57CAFA73995B3002 /* ImagePicker.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ImagePicker"; + IBSC_MODULE = ImagePicker; + INFOPLIST_FILE = "Target Support Files/ImagePicker/ResourceBundle-ImagePicker-ImagePicker-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + PRODUCT_NAME = ImagePicker; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; B89AE063F35BBC5F3358209AF37E6D16 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22FCBFA0E2A7651B248460AD3CB4DE32 /* NBBottomSheet.debug.xcconfig */; + baseConfigurationReference = 45B232DE9D6710FE8BF7DC25C2C80333 /* NBBottomSheet.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1956,7 +1711,7 @@ }; C15C4E31ADF19556825A2743AEF62A77 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 04420AA069E60E2676B1C8145D489AFE /* IQKeyboardManagerSwift.release.xcconfig */; + baseConfigurationReference = FAE9E39FF0684DBEA572BB783B3A18F7 /* IQKeyboardManagerSwift.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1990,26 +1745,64 @@ }; name = Release; }; - C6749BA8DAA3DB384D4F9A84D744AD3D /* Debug */ = { + D39ECFFD29F8C3DA103F61A69C7BDEC1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86D4965F304A9370159F8BEE0D0951D5 /* IQKeyboardManagerSwift.debug.xcconfig */; + baseConfigurationReference = 0CBC68B38C0421EC0AE36B43FB2C7636 /* ImagePicker.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardManagerSwift"; - IBSC_MODULE = IQKeyboardManagerSwift; - INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ImagePicker"; + IBSC_MODULE = ImagePicker; + INFOPLIST_FILE = "Target Support Files/ImagePicker/ResourceBundle-ImagePicker-ImagePicker-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - PRODUCT_NAME = IQKeyboardManagerSwift; + PRODUCT_NAME = ImagePicker; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; - name = Debug; + name = Release; + }; + E8CC8D3FD98540B83395885C5533CEE1 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 798C61760B9BC4B07BC60D42FCC09855 /* Pods-MiniScanner.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + "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"; + INFOPLIST_FILE = "Target Support Files/Pods-MiniScanner/Pods-MiniScanner-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MiniScanner/Pods-MiniScanner.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; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; }; F8AD79C5141E28EAE67B8011B5C3B8F5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4E8E62EE488350F66CC08D1D88AF14EE /* NBBottomSheet.release.xcconfig */; + baseConfigurationReference = 26EDF88E14046AAC34BFF99F97D23B05 /* NBBottomSheet.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2022,7 +1815,7 @@ GCC_PREFIX_HEADER = "Target Support Files/NBBottomSheet/NBBottomSheet-prefix.pch"; INFOPLIST_FILE = "Target Support Files/NBBottomSheet/NBBottomSheet-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -2045,11 +1838,11 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 1851179FA635C20329E7C7D49A253636 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */ = { + 21E40E7EF4A668720A0BC4974A414686 /* Build configuration list for PBXNativeTarget "Pods-MiniScanner" */ = { isa = XCConfigurationList; buildConfigurations = ( - C6749BA8DAA3DB384D4F9A84D744AD3D /* Debug */, - 7357A4E2D538EC50B39381993F57DBCC /* Release */, + 265E4B8B0199C32122BBAF162B6A7A3B /* Debug */, + E8CC8D3FD98540B83395885C5533CEE1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -2081,15 +1874,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4E37980CDFA92572E6955A05C6C57717 /* Build configuration list for PBXNativeTarget "Pods-MiniScanner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 2E083683897CAD4CAFE6027BFB9CB404 /* Debug */, - 9FC6A9858115F41C4CEF565EBDE56CA8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 5D7A5BCA6DF599B98DA57AB77B8B2795 /* Build configuration list for PBXNativeTarget "NBBottomSheet" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -2099,20 +1883,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 98343682D690F1F5CF2596A899F35F57 /* Build configuration list for PBXNativeTarget "FSPagerView" */ = { + 61E5E465E4EBDC7192A60BDB29B54904 /* Build configuration list for PBXNativeTarget "ImagePicker-ImagePicker" */ = { isa = XCConfigurationList; buildConfigurations = ( - 434E4A52CBC9F74FA2D8CDD170442C4A /* Debug */, - 31731D2A96C7FF5AA4EE56EC2EB0AE2F /* Release */, + B7F72126190288DAACE0F880A0CE87C7 /* Debug */, + D39ECFFD29F8C3DA103F61A69C7BDEC1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CB7A73EFBC09495176FD10B3C82A8767 /* Build configuration list for PBXNativeTarget "ImagePicker-ImagePicker" */ = { + 768672492BEBD11B2982745D1B777D28 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */ = { isa = XCConfigurationList; buildConfigurations = ( - A4D604173E31DBC1FE5B805782D66A58 /* Debug */, - 191972B2CD0BAA4D702859FFE72BED96 /* Release */, + 8D94357D87747513B8B34AAE89096A03 /* Debug */, + 74A42B7360C7CAE64024B006CBA43A1A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/FSPagerView.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/FSPagerView.xcscheme deleted file mode 100644 index 96fef6e..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/FSPagerView.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "1500" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "D4F8239FB329387A8476B964D92D92E7" - BuildableName = "FSPagerView.framework" - BlueprintName = "FSPagerView" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - buildConfiguration = "Debug" - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - buildConfiguration = "Debug" - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - allowLocationSimulation = "YES"> - </LaunchAction> - <ProfileAction - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist index afdf3cb..fefa7d3 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist @@ -11,61 +11,54 @@ <key>orderHint</key> <integer>0</integer> </dict> - <key>FSPagerView.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>1</integer> - </dict> <key>IQKeyboardManagerSwift-IQKeyboardManagerSwift.xcscheme</key> <dict> <key>isShown</key> <false/> <key>orderHint</key> - <integer>5</integer> + <integer>4</integer> </dict> <key>IQKeyboardManagerSwift.xcscheme</key> <dict> <key>isShown</key> <false/> <key>orderHint</key> - <integer>4</integer> + <integer>3</integer> </dict> <key>ImagePicker-ImagePicker.xcscheme</key> <dict> <key>isShown</key> <false/> <key>orderHint</key> - <integer>3</integer> + <integer>2</integer> </dict> <key>ImagePicker.xcscheme</key> <dict> <key>isShown</key> <false/> <key>orderHint</key> - <integer>2</integer> + <integer>1</integer> </dict> <key>LanguageManager-iOS.xcscheme</key> <dict> <key>isShown</key> <false/> <key>orderHint</key> - <integer>6</integer> + <integer>5</integer> </dict> <key>NBBottomSheet.xcscheme</key> <dict> <key>isShown</key> <false/> <key>orderHint</key> - <integer>7</integer> + <integer>6</integer> </dict> <key>Pods-MiniScanner.xcscheme</key> <dict> <key>isShown</key> <false/> <key>orderHint</key> - <integer>8</integer> + <integer>7</integer> </dict> </dict> <key>SuppressBuildableAutocreation</key> diff --git a/Pods/FSPagerView/LICENSE b/Pods/TLPhotoPicker/LICENSE similarity index 93% rename from Pods/FSPagerView/LICENSE rename to Pods/TLPhotoPicker/LICENSE index a1e3bb3..2d3f131 100644 --- a/Pods/FSPagerView/LICENSE +++ b/Pods/TLPhotoPicker/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2017 FSPagerView (https://github.com/WenchaoD/FSPagerView) +Copyright (c) 2017 wade.hawk <junhyi.park@gmail.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Pods/TLPhotoPicker/README.md b/Pods/TLPhotoPicker/README.md new file mode 100644 index 0000000..e598753 --- /dev/null +++ b/Pods/TLPhotoPicker/README.md @@ -0,0 +1,408 @@ +<img src="./Images/tlphotologo.png"> + +[](http://cocoapods.org/pods/TLPhotoPicker) +[](http://cocoapods.org/pods/TLPhotoPicker) +[](http://cocoapods.org/pods/TLPhotoPicker) + + +## Written in Swift 5.0 + +TLPhotoPicker enables application to pick images and videos from multiple smart album in iOS, similar to the current facebook app. + +## Demo 🙉 + +| Facebook Picker | TLPhotoPicker | +| ------------- | ------------- | +|  |  | + +## Features + +- support smart album collection. + - camera roll, selfies, panoramas, favorites, videos, custom users album +- selected order index. +- playback video and live photos. + - just one. playback first video or live Photo in bounds of visible cell. +- display video duration. +- async phasset request and displayed cell. + - scrolling performance is better than facebook in displaying video assets collection. +- custom cell +- custom display and selection rules +- reload of changes that occur in the Photos library. +- support iCloud Photo Library +- adds long press preview to images. ( to @smeshko ) [Preview](https://github.com/tilltue/TLPhotoPicker/pull/252#issue-362005178) + +| Smart album collection | LivePhotoCell | VideoPhotoCell | PhotoCell | CustomCell(instagram) | +| ------------- | ------------- | ------------- | ------------- | ------------- | +|  |  |  |  |  | + +Custom Camera Cell + +| Live CameraCell | +| ------------- | +|  + +## Installation + +### Requirements + +- Swift 5.0 ( Swift 4.2 -> use 'version 1.8.3' ) +- iOS 9.1 (for use live photos) + +### Cocoapods + +TLPhotoPicker is available through [CocoaPods](http://cocoapods.org). To install +it, simply add the following line to your Podfile: + +```ruby +platform :ios, '9.1' +pod "TLPhotoPicker" +``` + +### Carthage + +Carthage is a simple, decentralized dependency manager for Cocoa. + +Specify TLPhotoPicker into your project's Cartfile: + +``` +github "tilltue/TLPhotoPicker" +``` + +### Swift Package Manager + +The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler. It is in early development, but TLPhotoPicker does support its use on supported platforms. + +Once you have your Swift package set up, adding Alamofire as a dependency is as easy as adding it to the dependencies value of your Package.swift. + +``` +dependencies: [ + .package(url: "https://github.com/tilltue/TLPhotoPicker.git", .upToNextMajor(from: "2.1.0")) +] +``` + +> Don't forget the Privacy Description in `info.plist`. +<img src="./Images/Privacy.png"> + +> iOS 14 +> You can suppress the automatic prompting from the system by setting this key to yes in your apps info plist. +> PHPhotoLibraryPreventAutomaticLimitedAccessAlert = YES +https://developer.apple.com/videos/play/wwdc2020/10641/ + +## Usage + +**use delegate** + +You can choose delegate method or closure for handle picker event. + +```swift +class ViewController: UIViewController,TLPhotosPickerViewControllerDelegate { + var selectedAssets = [TLPHAsset]() + @IBAction func pickerButtonTap() { + let viewController = TLPhotosPickerViewController() + viewController.delegate = self + var configure = TLPhotosPickerConfigure() + //configure.nibSet = (nibName: "CustomCell_Instagram", bundle: Bundle.main) // If you want use your custom cell.. + self.present(viewController, animated: true, completion: nil) + } + //TLPhotosPickerViewControllerDelegate + func shouldDismissPhotoPicker(withTLPHAssets: [TLPHAsset]) -> Bool { + // use selected order, fullresolution image + self.selectedAssets = withTLPHAssets + return true + } + func dismissPhotoPicker(withPHAssets: [PHAsset]) { + // if you want to used phasset. + } + func photoPickerDidCancel() { + // cancel + } + func dismissComplete() { + // picker viewcontroller dismiss completion + } + func canSelectAsset(phAsset: PHAsset) -> Bool { + //Custom Rules & Display + //You can decide in which case the selection of the cell could be forbidden. + } + func didExceedMaximumNumberOfSelection(picker: TLPhotosPickerViewController) { + // exceed max selection + } + func handleNoAlbumPermissions(picker: TLPhotosPickerViewController) { + // handle denied albums permissions case + } + func handleNoCameraPermissions(picker: TLPhotosPickerViewController) { + // handle denied camera permissions case + } +} + +``` +**use closure** + +```swift + init(withPHAssets: (([PHAsset]) -> Void)? = nil, didCancel: ((Void) -> Void)? = nil) + init(withTLPHAssets: (([TLPHAsset]) -> Void)? = nil, didCancel: ((Void) -> Void)? = nil) + var canSelectAsset: ((PHAsset) -> Bool)? = nil + var didExceedMaximumNumberOfSelection: ((TLPhotosPickerViewController) -> Void)? = nil + var handleNoAlbumPermissions: ((TLPhotosPickerViewController) -> Void)? = nil + var handleNoCameraPermissions: ((TLPhotosPickerViewController) -> Void)? = nil + var dismissCompletion: (() -> Void)? = nil +``` +```swift +class ViewController: UIViewController,TLPhotosPickerViewControllerDelegate { + var selectedAssets = [TLPHAsset]() + @IBAction func pickerButtonTap() { + let viewController = TLPhotosPickerViewController(withTLPHAssets: { [weak self] (assets) in // TLAssets + self?.selectedAssets = assets + }, didCancel: nil) + viewController.didExceedMaximumNumberOfSelection = { [weak self] (picker) in + //exceed max selection + } + viewController.handleNoAlbumPermissions = { [weak self] (picker) in + // handle denied albums permissions case + } + viewController.handleNoCameraPermissions = { [weak self] (picker) in + // handle denied camera permissions case + } + viewController.selectedAssets = self.selectedAssets + self.present(viewController, animated: true, completion: nil) + } +} + +``` + +**Custom Cell** +Custom Cell must subclass TLPhotoCollectionViewCell +```Swift +class CustomCell_Instagram: TLPhotoCollectionViewCell { + +} + +//If you want custom camera cell? +//only used camera cell +[Sample](https://github.com/tilltue/TLPhotoPicker/blob/master/Example/TLPhotoPicker/CustomCameraCell.swift) + +//Adding the possibility to handle cell display according to a specific conditions +func update(with phAsset: PHAsset) +func selectedCell() +func willDisplayCell() +func endDisplayingCell() +``` + +**Custom Rules & Display** + +You can implement your own rules to handle the cell display. You can decide in which case the selection of the cell could be forbidden. + +For example, if you want to disable the selection of a cell if its width is under 300, you can follow these steps: + +- Override the update method of your custom cell and add your own display rule + +```swift +override func update(with phAsset: PHAsset) { + super.update(with: phAsset) + self.sizeRequiredOverlayView?.isHidden = !(phAsset.pixelHeight <= 300 && phAsset.pixelWidth <= 300) +} +``` +In this code, we show an overlay when the height and width required values are not satisified. + +- When you instanciate a `TLPhotosPickerViewController` subclass, you can pass a closure called `canSelectAsset` to handle the selection according to some rules. ( or delegate) + +```Swift +//use delegate +public protocol TLPhotosPickerViewControllerDelegate: class { + ... + func canSelectAsset(phAsset: PHAsset) -> Bool + ... +} + +extension UserViewController: TLPhotosPickerViewControllerDelegate { + func canSelectAsset(phAsset: PHAsset) -> Bool { + if asset.pixelHeight < 100 || asset.pixelWidth < 100 { + self?.showUnsatisifiedSizeAlert(vc: viewController) + return false + } + return true + } +} + +//or use closure +viewController.canSelectAsset = { [weak self] asset -> Bool in + if asset.pixelHeight < 100 || asset.pixelWidth < 100 { + self?.showUnsatisifiedSizeAlert(vc: viewController) + return false + } + return true +} +``` +In this code, we show an alert when the condition in the closure are not satisfiied. + +**TLPHAsset** + +```swift +public struct TLPHAsset { + public enum AssetType { + case photo,video,livePhoto + } + // phasset + public var phAsset: PHAsset? = nil + // selected order index + public var selectedOrder: Int = 0 + // asset type + public var type: AssetType + // get full resolution image + public var fullResolutionImage: UIImage? + // get photo file size (async) + public func photoSize(options: PHImageRequestOptions? = nil ,completion: @escaping ((Int)->Void), livePhotoVideoSize: Bool = false) + // get video file size (async) + public func videoSize(options: PHVideoRequestOptions? = nil, completion: @escaping ((Int)->Void)) + // get async icloud image (download) + @discardableResult + public func cloudImageDownload(progressBlock: @escaping (Double) -> Void, completionBlock:@escaping (UIImage?)-> Void ) -> PHImageRequestID? + // get original media file async copy temporary media file ( photo(png,gif...etc.) and video ) -> Don't forget, You should delete temporary file. + // parmeter : convertLivePhotosToJPG + // false : If you want mov file at live photos + // true : If you want png file at live photos ( HEIC ) + public func tempCopyMediaFile(videoRequestOptions: PHVideoRequestOptions? = nil, + imageRequestOptions: PHImageRequestOptions? = nil, + livePhotoRequestOptions: PHLivePhotoRequestOptions? = nil, + exportPreset: String = AVAssetExportPresetHighestQuality, + convertLivePhotosToJPG: Bool = false, + progressBlock:((Double) -> Void)? = nil, + completionBlock:@escaping ((URL,String) -> Void)) -> PHImageRequestID? + //Apparently, This is not the only way to export video. + //There is many way that export a video. + //This method was one of them. + public func exportVideoFile(options: PHVideoRequestOptions? = nil, + outputURL: URL? = nil, + outputFileType: AVFileType = .mov, + progressBlock:((Double) -> Void)? = nil, + completionBlock:@escaping ((URL,String) -> Void)) + // get original asset file name + public var originalFileName: String? +} +``` +> Note: convenience export method +> fullResolutionImage, cloudImageDownload, tempCopyMediaFile, exportVideoFile +> It's not enough if you wanted to use more complicated export asset options. ( progress, export type, etc..) + +## Customize + +```swift +let viewController = TLPhotosPickerViewController() +var configure = TLPhotosPickerConfigure() +viewController.configure = configure + +public struct TLPhotosPickerConfigure { + public var customLocalizedTitle: [String: String] = ["Camera Roll": "Camera Roll"] // Set [:] if you want use default localized title of album + public var tapHereToChange = "Tap here to change" + public var cancelTitle = "Cancel" + public var doneTitle = "Done" + public var emptyMessage = "No albums" + public var emptyImage: UIImage? = nil + public var usedCameraButton = true + public var usedPrefetch = false + public var previewAtForceTouch = false + public var allowedLivePhotos = true + public var allowedVideo = true + public var allowedAlbumCloudShared = false + public var allowedPhotograph = true // for camera : allow this option when you want to take a photos + public var allowedVideoRecording = true //for camera : allow this option when you want to recording video. + public var recordingVideoQuality: UIImagePickerControllerQualityType = .typeMedium //for camera : recording video quality + public var maxVideoDuration:TimeInterval? = nil //for camera : max video recording duration + public var autoPlay = true + public var muteAudio = true + public var preventAutomaticLimitedAccessAlert = true // newest iOS 14 + public var mediaType: PHAssetMediaType? = nil + public var numberOfColumn = 3 + public var minimumLineSpacing: CGFloat = 5 + public var minimumInteritemSpacing: CGFloat = 5 + public var singleSelectedMode = false + public var maxSelectedAssets: Int? = nil //default: inf + public var fetchOption: PHFetchOptions? = nil //default: creationDate + public var fetchCollectionOption: [FetchCollectionType: PHFetchOptions] = [:] + public var singleSelectedMode = false + public var selectedColor = UIColor(red: 88/255, green: 144/255, blue: 255/255, alpha: 1.0) + public var cameraBgColor = UIColor(red: 221/255, green: 223/255, blue: 226/255, alpha: 1) + public var cameraIcon = TLBundle.podBundleImage(named: "camera") + public var videoIcon = TLBundle.podBundleImage(named: "video") + public var placeholderIcon = TLBundle.podBundleImage(named: "insertPhotoMaterial") + public var nibSet: (nibName: String, bundle:Bundle)? = nil // custom cell + public var cameraCellNibSet: (nibName: String, bundle:Bundle)? = nil // custom camera cell + public var fetchCollectionTypes: [(PHAssetCollectionType,PHAssetCollectionSubtype)]? = nil + public var groupByFetch: PHFetchedResultGroupedBy? = nil // cannot be used prefetch options + public var supportedInterfaceOrientations: UIInterfaceOrientationMask = .portrait + public var popup: [PopupConfigure] = [] + public init() { + } +} + +//Related issue: https://github.com/tilltue/TLPhotoPicker/issues/201 +//e.g. +//let option = PHFetchOptions() +//configure.fetchCollectionOption[.assetCollections(.smartAlbum)] = option +//configure.fetchCollectionOption[.assetCollections(.album)] = option +//configure.fetchCollectionOption[.topLevelUserCollections] = option + +public enum FetchCollectionType { + case assetCollections(PHAssetCollectionType) + case topLevelUserCollections +} + +public enum PopupConfigure { + //Popup album view animation duration + case animation(TimeInterval) +} + +// PHFetchedResultGroupedBy +// +// CGrouped by date, cannot be used prefetch options +// take about few seconds ( 5000 image iPhoneX: 1 ~ 1.5 sec ) +public enum PHFetchedResultGroupedBy { + case year + case month + case week + case day + case hour + case custom(dateFormat: String) +} + +//customizable photos picker viewcontroller +class CustomPhotoPickerViewController: TLPhotosPickerViewController { + override func makeUI() { + super.makeUI() + self.customNavItem.leftBarButtonItem = UIBarButtonItem.init(barButtonSystemItem: .stop, target: nil, action: #selector(customAction)) + } + func customAction() { + self.dismiss(animated: true, completion: nil) + } +} + +//for log +public protocol TLPhotosPickerLogDelegate: class { + func selectedCameraCell(picker: TLPhotosPickerViewController) + func deselectedPhoto(picker: TLPhotosPickerViewController, at: Int) + func selectedPhoto(picker: TLPhotosPickerViewController, at: Int) + func selectedAlbum(picker: TLPhotosPickerViewController, title: String, at: Int) +} + +//for collection supplement view +let viewController = TLPhotosPickerViewController() +viewController.customDataSouces = CustomDataSources() // inherit TLPhotopickerDataSourcesProtocol + +public protocol TLPhotopickerDataSourcesProtocol { + func headerReferenceSize() -> CGSize + func footerReferenceSize() -> CGSize + func registerSupplementView(collectionView: UICollectionView) + func supplementIdentifier(kind: String) -> String + func configure(supplement view: UICollectionReusableView, section: (title: String, assets: [TLPHAsset])) +} + +``` + +## Author + +Does your organization or project use TLPhotoPicker? Please let me know by email. + +wade.hawk, junhyi.park@gmail.com + +## License + +TLPhotoPicker is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/Classes/SynchronizedDictionary.swift b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/SynchronizedDictionary.swift new file mode 100644 index 0000000..34bba14 --- /dev/null +++ b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/SynchronizedDictionary.swift @@ -0,0 +1,54 @@ +// +// SynchronizedDictionary.swift +// TLPhotoPicker +// +// Created by wade.hawk on 30/03/2019. +// + +import Foundation + +public class SynchronizedDictionary<K:Hashable,V> { + private var dictionary: [K:V] = [:] + private let accessQueue = DispatchQueue(label: "SynchronizedDictionaryAccess", + attributes: .concurrent) + + deinit { + //print("deinit SynchronizedDictionary") + } + + public func removeAll() { + self.accessQueue.async(flags:.barrier) { + self.dictionary.removeAll() + } + } + + public func removeValue(forKey: K) { + self.accessQueue.async(flags:.barrier) { + self.dictionary.removeValue(forKey: forKey) + } + } + + public func forEach(_ closure: ((K,V) -> Void)) { + self.accessQueue.sync { + self.dictionary.forEach{ arg in + let (key, value) = arg + closure(key,value) + } + } + } + + public subscript(key: K) -> V? { + set { + self.accessQueue.async(flags:.barrier) { + self.dictionary[key] = newValue + } + } + get { + var element: V? + self.accessQueue.sync { + element = self.dictionary[key] + } + return element + } + } +} diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAlbumPopView.swift b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAlbumPopView.swift new file mode 100644 index 0000000..3eaa92a --- /dev/null +++ b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAlbumPopView.swift @@ -0,0 +1,83 @@ +// +// TLAlbumPopView.swift +// TLPhotosPicker +// +// Created by wade.hawk on 2017. 4. 19.. +// Copyright © 2017ë…„ wade.hawk. All rights reserved. +// + +import UIKit + +protocol PopupViewProtocol: AnyObject { + var bgView: UIView! { get set } + var popupView: UIView! { get set } + var originalFrame: CGRect { get set } + var show: Bool { get set } + func setupPopupFrame() +} + +extension PopupViewProtocol where Self: UIView { + fileprivate func getFrame(scale: CGFloat) -> CGRect { + var frame = self.originalFrame + frame.size.width = frame.size.width * scale + frame.size.height = frame.size.height * scale + frame.origin.x = self.frame.width/2 - frame.width/2 + return frame + } + func setupPopupFrame() { + if self.originalFrame == CGRect.zero { + self.originalFrame = self.popupView.frame + }else { + self.originalFrame.size.height = self.popupView.frame.height + } + } + func show(_ show: Bool, duration: TimeInterval = 0.1) { + guard self.show != show else { return } + self.layer.removeAllAnimations() + self.isHidden = false + self.popupView.frame = show ? getFrame(scale: 0.1) : self.popupView.frame + self.bgView.alpha = show ? 0 : 1 + UIView.animate(withDuration: duration, animations: { + self.bgView.alpha = show ? 1 : 0 + self.popupView.transform = show ? CGAffineTransform(scaleX: 1.05, y: 1.05) : CGAffineTransform(scaleX: 0.1, y: 0.1) + self.popupView.frame = show ? self.getFrame(scale: 1.05) : self.getFrame(scale: 0.1) + }) { _ in + self.isHidden = show ? false : true + UIView.animate(withDuration: duration) { + if show { + self.popupView.transform = CGAffineTransform(scaleX: 1, y: 1) + self.popupView.frame = self.originalFrame + } + self.show = show + } + } + } +} + +open class TLAlbumPopView: UIView, PopupViewProtocol { + @IBOutlet open var bgView: UIView! + @IBOutlet open var popupView: UIView! + @IBOutlet var popupViewHeight: NSLayoutConstraint! + @IBOutlet open var tableView: UITableView! + @objc var originalFrame = CGRect.zero + @objc var show = false + + deinit { +// print("deinit TLAlbumPopView") + } + + override open func awakeFromNib() { + super.awakeFromNib() + self.popupView.layer.cornerRadius = 5.0 + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tapBgView)) + self.bgView.addGestureRecognizer(tapGesture) + self.tableView.register(UINib(nibName: "TLCollectionTableViewCell", bundle: TLBundle.bundle()), forCellReuseIdentifier: "TLCollectionTableViewCell") + if #available(iOS 13.0, *) { + self.popupView.backgroundColor = .systemBackground + } + } + + @objc func tapBgView() { + self.show(false) + } +} diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAssetCollection+Extension.swift b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAssetCollection+Extension.swift new file mode 100644 index 0000000..6d1b999 --- /dev/null +++ b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAssetCollection+Extension.swift @@ -0,0 +1,68 @@ +// +// TLAssetCollection+Extension.swift +// TLPhotoPicker +// +// Created by wade.hawk on 21/01/2019. +// + +import Foundation +import Photos + +public enum PHFetchedResultGroupedBy { + case year + case month + case week + case day + case hour + case custom(dateFormat: String) + var dateFormat: String { + switch self { + case .year: + return "yyyy" + case .month: + return "yyyyMM" + case .week: + return "yyyyMMW" + case .day: + return "yyyyMMdd" + case .hour: + return "yyyyMMddHH" + case let .custom(dateFormat): + return dateFormat + } + } +} + +extension TLAssetsCollection { + func enumarateFetchResult(groupedBy: PHFetchedResultGroupedBy) -> Dictionary<String,[TLPHAsset]> { + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = groupedBy.dateFormat + var assets = [PHAsset]() + assets.reserveCapacity(self.fetchResult?.count ?? 0) + self.fetchResult?.enumerateObjects({ (phAsset, idx, stop) in + if phAsset.creationDate != nil { + assets.append(phAsset) + } + }) + let sections = Dictionary(grouping: assets.map{ TLPHAsset(asset: $0) }) { (element) -> String in + if let creationDate = element.phAsset?.creationDate { + let identifier = dateFormatter.string(from: creationDate) + return identifier + } + return "" + } + return sections + } + + func section(groupedBy: PHFetchedResultGroupedBy) -> [(String,[TLPHAsset])] { + let dict = enumarateFetchResult(groupedBy: groupedBy) + var sections = [(String,[TLPHAsset])]() + let sortedKeys = dict.keys.sorted(by: >) + for key in sortedKeys { + if let array = dict[key] { + sections.append((key, array)) + } + } + return sections + } +} diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAssetPreviewViewController.swift b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAssetPreviewViewController.swift new file mode 100644 index 0000000..9f7c11a --- /dev/null +++ b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAssetPreviewViewController.swift @@ -0,0 +1,204 @@ +import UIKit +import Photos +import PhotosUI + +open class TLAssetPreviewViewController: UIViewController { + + fileprivate var player: AVPlayer? + fileprivate var playerLayer: AVPlayerLayer? + + fileprivate let imageView: UIImageView = { + let view = UIImageView() + view.clipsToBounds = false + view.contentMode = .scaleAspectFill + return view + }() + + fileprivate let livePhotoView = PHLivePhotoView() + + open var asset: PHAsset? { + didSet { + guard let asset = self.asset else { + livePhotoView.livePhoto = nil + imageView.image = nil + return + } + + updatePreferredContentSize(for: asset, isPortrait: UIApplication.shared.orientation?.isPortrait == true) + + if asset.mediaType == .image { + previewImage(from: asset) + } else { + previewVideo(from: asset) + } + } + } + + override open func viewDidLoad() { + super.viewDidLoad() + setupViews() + } + + override open func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + playerLayer?.frame = imageView.bounds + } + + override open func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { + super.viewWillTransition(to: size, with: coordinator) + if let asset = self.asset { + updatePreferredContentSize(for: asset, isPortrait: size.height > size.width) + } + } + + deinit { + player?.pause() + } +} + +private extension TLAssetPreviewViewController { + func setupViews() { + view.backgroundColor = .previewBackground + view.addAligned(imageView) + view.addAligned(livePhotoView) + } + + func fetchImage(for asset: PHAsset, canHandleDegraded: Bool = true, completion: @escaping ((UIImage?) -> Void)) { + let options = PHImageRequestOptions() + options.isNetworkAccessAllowed = true + options.deliveryMode = .opportunistic + PHCachingImageManager.default().requestImage( + for: asset, + targetSize: CGSize(width: asset.pixelWidth, height: asset.pixelHeight), + contentMode: .aspectFit, + options: options, + resultHandler: { (image, info) in + if !canHandleDegraded { + if let isDegraded = info?[PHImageResultIsDegradedKey] as? Bool, isDegraded { + return + } + } + completion(image) + }) + } + + func updatePreferredContentSize(for asset: PHAsset, isPortrait: Bool) { + guard asset.pixelWidth != 0 && asset.pixelHeight != 0 else { return } + + let contentScale: CGFloat = 1 + let assetWidth = CGFloat(asset.pixelWidth) + let assetHeight = CGFloat(asset.pixelHeight) + let assetRatio = assetHeight / assetWidth + let screenWidth = isPortrait ? UIScreen.main.bounds.width : UIScreen.main.bounds.height + let screenHeight = isPortrait ? UIScreen.main.bounds.height : UIScreen.main.bounds.width + let screenRatio = screenHeight / screenWidth + + if assetRatio > screenRatio { + let scale = screenHeight / assetHeight + preferredContentSize = CGSize(width: assetWidth * scale * contentScale, height: assetHeight * scale * contentScale) + } else { + let scale = screenWidth / assetWidth + preferredContentSize = CGSize(width: assetWidth * scale * contentScale, height: assetHeight * scale * contentScale) + } + } + + func previewVideo(from asset: PHAsset) { + livePhotoView.isHidden = true + PHCachingImageManager.default().requestAVAsset( + forVideo: asset, + options: nil, + resultHandler: { (avAsset, audio, info) in + DispatchQueue.main.async { [weak self] in + self?.imageView.isHidden = false + + if let avAsset = avAsset { + let playerItem = AVPlayerItem(asset: avAsset) + let player = AVPlayer(playerItem: playerItem) + let playerLayer = AVPlayerLayer(player: player) + playerLayer.videoGravity = AVLayerVideoGravity.resizeAspect + playerLayer.masksToBounds = true + playerLayer.frame = self?.imageView.bounds ?? .zero + + self?.imageView.layer.addSublayer(playerLayer) + self?.playerLayer = playerLayer + self?.player = player + + player.play() + } else { + self?.previewPhoto(from: asset) + } + } + }) + } + + func previewImage(from asset: PHAsset) { + imageView.isHidden = true + livePhotoView.isHidden = false + + if asset.mediaSubtypes == .photoLive { + previewLivePhoto(from: asset) + } else { + previewPhoto(from: asset) + } + } + + func previewLivePhoto(from asset: PHAsset) { + + let options = PHLivePhotoRequestOptions() + options.isNetworkAccessAllowed = true + options.deliveryMode = .opportunistic + + PHCachingImageManager.default().requestLivePhoto( + for: asset, + targetSize: CGSize(width: asset.pixelWidth, height: asset.pixelHeight), + contentMode: .aspectFill, + options: options, + resultHandler: { [weak self] (livePhoto, info) in + if let livePhoto = livePhoto, info?[PHImageErrorKey] == nil { + self?.livePhotoView.livePhoto = livePhoto + self?.livePhotoView.startPlayback(with: .full) + } else { + self?.previewPhoto(from: asset) + } + }) + } + + func previewPhoto(from asset: PHAsset) { + imageView.isHidden = false + fetchImage(for: asset, canHandleDegraded: false, completion: { self.imageView.image = $0 }) + } +} + +private extension UIColor { + static var previewBackground: UIColor { + if #available(iOS 13.0, *) { + return .systemBackground + } else { + return .white + } + } +} + +private extension UIView { + func addAligned(_ view: UIView) { + view.translatesAutoresizingMaskIntoConstraints = false + addSubview(view) + + NSLayoutConstraint.activate([ + view.leadingAnchor.constraint(equalTo: leadingAnchor), + view.trailingAnchor.constraint(equalTo: trailingAnchor), + view.topAnchor.constraint(equalTo: topAnchor), + view.bottomAnchor.constraint(equalTo: bottomAnchor) + ]) + } +} + +private extension UIApplication { + var orientation: UIInterfaceOrientation? { + if #available(iOS 13.0, *) { + return windows.first(where: { $0.isKeyWindow })?.windowScene?.interfaceOrientation + } else { + return statusBarOrientation + } + } +} diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAssetsCollection.swift b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAssetsCollection.swift new file mode 100644 index 0000000..aede55f --- /dev/null +++ b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLAssetsCollection.swift @@ -0,0 +1,430 @@ +// +// TLAssetsCollection.swift +// TLPhotosPicker +// +// Created by wade.hawk on 2017. 4. 18.. +// Copyright © 2017ë…„ wade.hawk. All rights reserved. +// + +import Foundation +import Photos +import PhotosUI +import MobileCoreServices + +public struct TLPHAsset { + enum CloudDownloadState { + case ready, progress, complete, failed + } + + public enum AssetType { + case photo, video, livePhoto + } + + public enum ImageExtType: String { + case png, jpg, gif, heic + } + + var state = CloudDownloadState.ready + public var phAsset: PHAsset? = nil + //Bool to check if TLPHAsset returned is created using camera. + public var isSelectedFromCamera = false + public var selectedOrder: Int = 0 + public var type: AssetType { + get { + guard let phAsset = self.phAsset else { return .photo } + if phAsset.mediaSubtypes.contains(.photoLive) { + return .livePhoto + }else if phAsset.mediaType == .video { + return .video + }else { + return .photo + } + } + } + + public var fullResolutionImage: UIImage? { + get { + guard let phAsset = self.phAsset else { return nil } + return TLPhotoLibrary.fullResolutionImageData(asset: phAsset) + } + } + + public func extType(defaultExt: ImageExtType = .png) -> ImageExtType { + guard let fileName = self.originalFileName, + let encodedFileName = fileName.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed), + let extention = URL(string: encodedFileName)?.pathExtension.lowercased() else { + return defaultExt + } + return ImageExtType(rawValue: extention) ?? defaultExt + } + + @discardableResult + public func cloudImageDownload(progressBlock: @escaping (Double) -> Void, completionBlock:@escaping (UIImage?)-> Void ) -> PHImageRequestID? { + guard let phAsset = self.phAsset else { return nil } + return TLPhotoLibrary.cloudImageDownload(asset: phAsset, progressBlock: progressBlock, completionBlock: completionBlock) + } + + public var originalFileName: String? { + get { + guard let phAsset = self.phAsset,let resource = PHAssetResource.assetResources(for: phAsset).first else { return nil } + return resource.originalFilename + } + } + + public func photoSize(options: PHImageRequestOptions? = nil ,completion: @escaping ((Int)->Void), livePhotoVideoSize: Bool = false) { + guard let phAsset = self.phAsset, self.type == .photo || self.type == .livePhoto else { completion(-1); return } + var resource: PHAssetResource? = nil + if phAsset.mediaSubtypes.contains(.photoLive) == true, livePhotoVideoSize { + resource = PHAssetResource.assetResources(for: phAsset).filter { $0.type == .pairedVideo }.first + }else { + resource = PHAssetResource.assetResources(for: phAsset).filter { $0.type == .photo }.first + } + if let fileSize = resource?.value(forKey: "fileSize") as? Int { + completion(fileSize) + }else { + PHImageManager.default().requestImageData(for: phAsset, options: nil) { (data, uti, orientation, info) in + var fileSize = -1 + if let data = data { + let bcf = ByteCountFormatter() + bcf.countStyle = .file + fileSize = data.count + } + DispatchQueue.main.async { + completion(fileSize) + } + } + } + } + + public func videoSize(options: PHVideoRequestOptions? = nil, completion: @escaping ((Int)->Void)) { + guard let phAsset = self.phAsset, self.type == .video else { completion(-1); return } + let resource = PHAssetResource.assetResources(for: phAsset).filter { $0.type == .video }.first + if let fileSize = resource?.value(forKey: "fileSize") as? Int { + completion(fileSize) + }else { + PHImageManager.default().requestAVAsset(forVideo: phAsset, options: options) { (avasset, audioMix, info) in + func fileSize(_ url: URL?) -> Int? { + do { + guard let fileSize = try url?.resourceValues(forKeys: [.fileSizeKey]).fileSize else { return nil } + return fileSize + }catch { return nil } + } + var url: URL? = nil + if let urlAsset = avasset as? AVURLAsset { + url = urlAsset.url + }else if let sandboxKeys = info?["PHImageFileSandboxExtensionTokenKey"] as? String, let path = sandboxKeys.components(separatedBy: ";").last { + url = URL(fileURLWithPath: path) + } + let size = fileSize(url) ?? -1 + DispatchQueue.main.async { + completion(size) + } + } + } + } + + func MIMEType(_ url: URL?) -> String? { + guard let ext = url?.pathExtension else { return nil } + if !ext.isEmpty { + let UTIRef = UTTypeCreatePreferredIdentifierForTag("public.filename-extension" as CFString, ext as CFString, nil) + let UTI = UTIRef?.takeUnretainedValue() + UTIRef?.release() + if let UTI = UTI { + guard let MIMETypeRef = UTTypeCopyPreferredTagWithClass(UTI, kUTTagClassMIMEType) else { return nil } + let MIMEType = MIMETypeRef.takeUnretainedValue() + MIMETypeRef.release() + return MIMEType as String + } + } + return nil + } + + private func tempCopyLivePhotos(phAsset: PHAsset, + livePhotoRequestOptions: PHLivePhotoRequestOptions? = nil, + localURL: URL, + completionBlock:@escaping (() -> Void)) -> PHImageRequestID? { + var requestOptions = PHLivePhotoRequestOptions() + if let options = livePhotoRequestOptions { + requestOptions = options + }else { + requestOptions.isNetworkAccessAllowed = true + } + return PHImageManager.default().requestLivePhoto(for: phAsset, + targetSize: UIScreen.main.bounds.size, + contentMode: .default, + options: requestOptions) + { (livePhotos, infoDict) in + if let livePhotos = livePhotos { + let assetResources = PHAssetResource.assetResources(for: livePhotos) + assetResources.forEach { (resource) in + if resource.type == .pairedVideo { + PHAssetResourceManager.default().writeData(for: resource, toFile: localURL, options: nil) { (error) in + DispatchQueue.main.async { + completionBlock() + } + } + } + } + } + } + } + + @discardableResult + //convertLivePhotosToJPG + // false : If you want mov file at live photos + // true : If you want png file at live photos ( HEIC ) + public func tempCopyMediaFile(videoRequestOptions: PHVideoRequestOptions? = nil, + imageRequestOptions: PHImageRequestOptions? = nil, + livePhotoRequestOptions: PHLivePhotoRequestOptions? = nil, + exportPreset: String = AVAssetExportPresetHighestQuality, + convertLivePhotosToJPG: Bool = false, + progressBlock:((Double) -> Void)? = nil, + completionBlock:@escaping ((URL,String) -> Void)) -> PHImageRequestID? { + guard let phAsset = self.phAsset else { return nil } + var type: PHAssetResourceType? = nil + if phAsset.mediaSubtypes.contains(.photoLive) == true, convertLivePhotosToJPG == false { + type = .pairedVideo + }else { + type = phAsset.mediaType == .video ? .video : .photo + } + guard let resource = (PHAssetResource.assetResources(for: phAsset).filter{ $0.type == type }).first else { return nil } + let fileName = resource.originalFilename + var writeURL: URL? = nil + if #available(iOS 10.0, *) { + writeURL = FileManager.default.temporaryDirectory.appendingPathComponent("\(fileName)") + } else { + writeURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true).appendingPathComponent("\(fileName)") + } + guard var localURL = writeURL,var mimetype = MIMEType(writeURL) else { return nil } + if type == .pairedVideo { + return tempCopyLivePhotos(phAsset: phAsset, + livePhotoRequestOptions: livePhotoRequestOptions, + localURL: localURL, + completionBlock: { completionBlock(localURL, mimetype) }) + } + switch phAsset.mediaType { + case .video: + var requestOptions = PHVideoRequestOptions() + if let options = videoRequestOptions { + requestOptions = options + }else { + requestOptions.isNetworkAccessAllowed = true + } + //iCloud download progress + requestOptions.progressHandler = { (progress, error, stop, info) in + DispatchQueue.main.async { + progressBlock?(progress) + } + } + return PHImageManager.default().requestExportSession(forVideo: phAsset, + options: requestOptions, + exportPreset: exportPreset) + { (session, infoDict) in + session?.outputURL = localURL + session?.outputFileType = AVFileType.mov + session?.exportAsynchronously(completionHandler: { + DispatchQueue.main.async { + completionBlock(localURL, mimetype) + } + }) + } + case .image: + var requestOptions = PHImageRequestOptions() + if let options = imageRequestOptions { + requestOptions = options + }else { + requestOptions.isNetworkAccessAllowed = true + } + //iCloud download progress + requestOptions.progressHandler = { (progress, error, stop, info) in + DispatchQueue.main.async { + progressBlock?(progress) + } + } + return PHImageManager.default().requestImageData(for: phAsset, + options: requestOptions) + { (data, uti, orientation, info) in + do { + var data = data + let needConvertLivePhotoToJPG = phAsset.mediaSubtypes.contains(.photoLive) == true && convertLivePhotosToJPG == true + if needConvertLivePhotoToJPG { + let name = localURL.deletingPathExtension().lastPathComponent + localURL.deleteLastPathComponent() + localURL.appendPathComponent("\(name).jpg") + mimetype = "image/jpeg" + } + if needConvertLivePhotoToJPG, let imgData = data, let rawImage = UIImage(data: imgData)?.upOrientationImage() { + data = rawImage.jpegData(compressionQuality: 1) + } + try data?.write(to: localURL) + DispatchQueue.main.async { + completionBlock(localURL, mimetype) + } + }catch { } + } + default: + return nil + } + } + + private func videoFilename(phAsset: PHAsset) -> URL? { + guard let resource = (PHAssetResource.assetResources(for: phAsset).filter{ $0.type == .video }).first else { + return nil + } + var writeURL: URL? + let fileName = resource.originalFilename + if #available(iOS 10.0, *) { + writeURL = FileManager.default.temporaryDirectory.appendingPathComponent("\(fileName)") + } else { + writeURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true).appendingPathComponent("\(fileName)") + } + return writeURL + } + + //Apparently, This is not the only way to export video. + //There is many way that export a video. + //This method was one of them. + public func exportVideoFile(options: PHVideoRequestOptions? = nil, + outputURL: URL? = nil, + outputFileType: AVFileType = .mov, + progressBlock:((Double) -> Void)? = nil, + completionBlock:@escaping ((URL,String) -> Void)) { + guard + let phAsset = self.phAsset, + phAsset.mediaType == .video, + let writeURL = outputURL ?? videoFilename(phAsset: phAsset), + let mimetype = MIMEType(writeURL) + else { + return + } + var requestOptions = PHVideoRequestOptions() + if let options = options { + requestOptions = options + }else { + requestOptions.isNetworkAccessAllowed = true + } + requestOptions.progressHandler = { (progress, error, stop, info) in + DispatchQueue.main.async { + progressBlock?(progress) + } + } + PHImageManager.default().requestAVAsset(forVideo: phAsset, options: requestOptions) { (avasset, avaudioMix, infoDict) in + guard let avasset = avasset else { + return + } + let exportSession = AVAssetExportSession.init(asset: avasset, presetName: AVAssetExportPresetHighestQuality) + exportSession?.outputURL = writeURL + exportSession?.outputFileType = outputFileType + exportSession?.exportAsynchronously(completionHandler: { + completionBlock(writeURL, mimetype) + }) + } + } + + init(asset: PHAsset?) { + self.phAsset = asset + } + + public static func asset(with localIdentifier: String) -> TLPHAsset? { + let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: [localIdentifier], options: nil) + return TLPHAsset(asset: fetchResult.firstObject) + } +} + +extension TLPHAsset: Equatable { + public static func ==(lhs: TLPHAsset, rhs: TLPHAsset) -> Bool { + guard let lphAsset = lhs.phAsset, let rphAsset = rhs.phAsset else { return false } + return lphAsset.localIdentifier == rphAsset.localIdentifier + } +} + +extension Array { + subscript (safe index: Int) -> Element? { + return indices ~= index ? self[index] : nil + } +} + +public struct TLAssetsCollection { + var phAssetCollection: PHAssetCollection? = nil + var fetchResult: PHFetchResult<PHAsset>? = nil + var useCameraButton: Bool = false + var recentPosition: CGPoint = CGPoint.zero + var title: String + var localIdentifier: String + public var sections: [(title: String, assets: [TLPHAsset])]? = nil + var count: Int { + get { + guard let count = self.fetchResult?.count, count > 0 else { return self.useCameraButton ? 1 : 0 } + return count + (self.useCameraButton ? 1 : 0) + } + } + + init(collection: PHAssetCollection) { + self.phAssetCollection = collection + self.title = collection.localizedTitle ?? "" + self.localIdentifier = collection.localIdentifier + } + + func getAsset(at index: Int) -> PHAsset? { + if self.useCameraButton && index == 0 { return nil } + let index = index - (self.useCameraButton ? 1 : 0) + guard let result = self.fetchResult, index < result.count else { return nil } + return result.object(at: max(index,0)) + } + + func getTLAsset(at indexPath: IndexPath) -> TLPHAsset? { + let isCameraRow = self.useCameraButton && indexPath.section == 0 && indexPath.row == 0 + if isCameraRow { + return nil + } + if let sections = self.sections { + let index = indexPath.row - ((self.useCameraButton && indexPath.section == 0) ? 1 : 0) + let result = sections[safe: indexPath.section] + return result?.assets[safe: index] + }else { + var index = indexPath.row + index = index - (self.useCameraButton ? 1 : 0) + guard let result = self.fetchResult, index < result.count else { return nil } + return TLPHAsset(asset: result.object(at: max(index,0))) + } + } + + func findIndex(phAsset: PHAsset) -> IndexPath? { + guard let sections = self.sections else { + return nil + } + for (offset, section) in sections.enumerated() { + if let index = section.assets.firstIndex(where: { $0.phAsset == phAsset }) { + return IndexPath(row: index, section: offset) + } + } + return nil + } + + mutating func reloadSection(groupedBy: PHFetchedResultGroupedBy) { + var groupedSections = self.section(groupedBy: groupedBy) + if self.useCameraButton { + groupedSections.insert(("camera",[TLPHAsset(asset: nil)]), at: 0) + } + self.sections = groupedSections + } + + static func ==(lhs: TLAssetsCollection, rhs: TLAssetsCollection) -> Bool { + return lhs.localIdentifier == rhs.localIdentifier + } +} + +extension UIImage { + func upOrientationImage() -> UIImage? { + switch imageOrientation { + case .up: + return self + default: + UIGraphicsBeginImageContextWithOptions(size, false, scale) + draw(in: CGRect(origin: .zero, size: size)) + let result = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + return result + } + } +} diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLBundle.swift b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLBundle.swift new file mode 100644 index 0000000..46f23ea --- /dev/null +++ b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLBundle.swift @@ -0,0 +1,29 @@ +// +// TLBundle.swift +// Pods +// +// Created by wade.hawk on 2017. 5. 9.. +// +// + +import UIKit + +open class TLBundle { + open class func podBundleImage(named: String) -> UIImage? { + let podBundle = Bundle(for: TLBundle.self) + if let url = podBundle.url(forResource: "TLPhotoPickerController", withExtension: "bundle") { + let bundle = Bundle(url: url) + return UIImage(named: named, in: bundle, compatibleWith: nil) + } + return nil + } + + class func bundle() -> Bundle { + let podBundle = Bundle(for: TLBundle.self) + if let url = podBundle.url(forResource: "TLPhotoPicker", withExtension: "bundle") { + let bundle = Bundle(url: url) + return bundle ?? podBundle + } + return podBundle + } +} diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLCollectionTableViewCell.swift b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLCollectionTableViewCell.swift new file mode 100644 index 0000000..bedd379 --- /dev/null +++ b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLCollectionTableViewCell.swift @@ -0,0 +1,25 @@ +// +// TLCollectionTableViewCell.swift +// TLPhotosPicker +// +// Created by wade.hawk on 2017. 5. 3.. +// Copyright © 2017ë…„ wade.hawk. All rights reserved. +// + +import UIKit + +open class TLCollectionTableViewCell: UITableViewCell { + @IBOutlet open var thumbImageView: UIImageView! + @IBOutlet open var titleLabel: UILabel! + @IBOutlet open var subTitleLabel: UILabel! + + override open func awakeFromNib() { + super.awakeFromNib() + if #available(iOS 11.0, *) { + self.thumbImageView.accessibilityIgnoresInvertColors = true + } + if #available(iOS 13.0, *) { + self.contentView.backgroundColor = .systemBackground + } + } +} diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLCollectionTableViewCell.xib b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLCollectionTableViewCell.xib new file mode 100644 index 0000000..e8c682c --- /dev/null +++ b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLCollectionTableViewCell.xib @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="17156" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES"> + <device id="retina4_7" orientation="portrait" appearance="light"/> + <dependencies> + <deployment identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17125"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + </dependencies> + <objects> + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> + <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="TLCollectionTableViewCell" id="9FY-S1-KKQ" customClass="TLCollectionTableViewCell" customModule="TLPhotoPicker"> + <rect key="frame" x="0.0" y="0.0" width="375" height="75"/> + <autoresizingMask key="autoresizingMask"/> + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="9FY-S1-KKQ" id="UUZ-nI-xH1"> + <rect key="frame" x="0.0" y="0.0" width="375" height="75"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="4Dk-kD-sMy"> + <rect key="frame" x="15" y="12.5" width="50" height="50"/> + <constraints> + <constraint firstAttribute="height" constant="50" id="yiu-ZU-58w"/> + <constraint firstAttribute="width" constant="50" id="zAc-Fo-aGe"/> + </constraints> + </imageView> + <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="7nv-2U-xMp"> + <rect key="frame" x="75" y="19.5" width="234" height="36.5"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Camera Roll" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ES8-Tq-6Wz"> + <rect key="frame" x="0.0" y="0.0" width="234" height="17"/> + <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="9999" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NuJ-3w-ZAP"> + <rect key="frame" x="0.0" y="22" width="234" height="14.5"/> + <fontDescription key="fontDescription" type="system" pointSize="12"/> + <color key="textColor" red="0.43137254901960786" green="0.43137254901960786" blue="0.43137254901960786" alpha="1" colorSpace="calibratedRGB"/> + <nil key="highlightedColor"/> + </label> + </subviews> + </stackView> + </subviews> + <constraints> + <constraint firstItem="4Dk-kD-sMy" firstAttribute="leading" secondItem="UUZ-nI-xH1" secondAttribute="leading" constant="15" id="7W9-hT-caE"/> + <constraint firstItem="7nv-2U-xMp" firstAttribute="centerY" secondItem="UUZ-nI-xH1" secondAttribute="centerY" id="E6U-ch-GDV"/> + <constraint firstAttribute="trailingMargin" secondItem="7nv-2U-xMp" secondAttribute="trailing" constant="50" id="T3U-hj-718"/> + <constraint firstItem="4Dk-kD-sMy" firstAttribute="centerY" secondItem="UUZ-nI-xH1" secondAttribute="centerY" id="ZHB-JZ-YKE"/> + <constraint firstItem="7nv-2U-xMp" firstAttribute="leading" secondItem="4Dk-kD-sMy" secondAttribute="trailing" constant="10" id="i0n-S1-xnn"/> + </constraints> + </tableViewCellContentView> + <connections> + <outlet property="subTitleLabel" destination="NuJ-3w-ZAP" id="vlD-VJ-e5z"/> + <outlet property="thumbImageView" destination="4Dk-kD-sMy" id="f8b-VP-j8s"/> + <outlet property="titleLabel" destination="ES8-Tq-6Wz" id="sYW-0b-o03"/> + </connections> + <point key="canvasLocation" x="9.5" y="-83"/> + </tableViewCell> + </objects> +</document> diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotoCollectionViewCell.swift b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotoCollectionViewCell.swift new file mode 100644 index 0000000..8de0fc0 --- /dev/null +++ b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotoCollectionViewCell.swift @@ -0,0 +1,182 @@ +// +// TLPhotoCollectionViewCell.swift +// TLPhotosPicker +// +// Created by wade.hawk on 2017. 5. 3.. +// Copyright © 2017ë…„ wade.hawk. All rights reserved. +// + +import UIKit +import PhotosUI + +open class TLPlayerView: UIView { + @objc open var player: AVPlayer? { + get { + return playerLayer.player + } + set { + playerLayer.player = newValue + } + } + + @objc open var playerLayer: AVPlayerLayer { + return layer as! AVPlayerLayer + } + + // Override UIView property + override open class var layerClass: AnyClass { + return AVPlayerLayer.self + } +} + +open class TLPhotoCollectionViewCell: UICollectionViewCell { + private var observer: NSObjectProtocol? + @IBOutlet open var imageView: UIImageView? + @IBOutlet open var playerView: TLPlayerView? + @IBOutlet open var livePhotoView: PHLivePhotoView? + @IBOutlet open var liveBadgeImageView: UIImageView? + @IBOutlet open var durationView: UIView? + @IBOutlet open var videoIconImageView: UIImageView? + @IBOutlet open var durationLabel: UILabel? + @IBOutlet open var indicator: UIActivityIndicatorView? + @IBOutlet open var selectedView: UIView? + @IBOutlet open var selectedHeight: NSLayoutConstraint? + @IBOutlet open var orderLabel: UILabel? + @IBOutlet open var orderBgView: UIView? + + var configure = TLPhotosPickerConfigure() { + didSet { + self.selectedView?.layer.borderColor = self.configure.selectedColor.cgColor + self.orderBgView?.backgroundColor = self.configure.selectedColor + self.videoIconImageView?.image = self.configure.videoIcon + self.orderBgView?.isHidden = self.configure.singleSelectedMode + self.orderLabel?.isHidden = self.configure.singleSelectedMode + } + } + + open internal(set) var asset: PHAsset? + + @objc open var isCameraCell = false + + open var duration: TimeInterval? { + didSet { + guard let duration = self.duration else { return } + self.selectedHeight?.constant = -10 + self.durationLabel?.text = timeFormatted(timeInterval: duration) + } + } + + @objc open var player: AVPlayer? = nil { + didSet { + if self.configure.autoPlay == false { return } + if self.player == nil { + self.playerView?.playerLayer.player = nil + if let observer = self.observer { + NotificationCenter.default.removeObserver(observer) + } + }else { + self.playerView?.playerLayer.player = self.player + self.observer = NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.player?.currentItem, queue: nil, using: { [weak self] (_) in + DispatchQueue.main.async { + guard let `self` = self else { return } + self.player?.seek(to: CMTime.zero) + self.player?.play() + self.player?.isMuted = self.configure.muteAudio + } + }) + } + } + } + + @objc open var selectedAsset: Bool = false { + willSet(newValue) { + self.selectedView?.isHidden = !newValue + self.durationView?.backgroundColor = newValue ? self.configure.selectedColor : UIColor(red: 0, green: 0, blue: 0, alpha: 0.6) + if !newValue { + self.orderLabel?.text = "" + } + } + } + + @objc open func timeFormatted(timeInterval: TimeInterval) -> String { + let seconds: Int = lround(timeInterval) + var hour: Int = 0 + var minute: Int = Int(seconds/60) + let second: Int = seconds % 60 + if minute > 59 { + hour = minute / 60 + minute = minute % 60 + return String(format: "%d:%d:%02d", hour, minute, second) + } else { + return String(format: "%d:%02d", minute, second) + } + } + + @objc open func popScaleAnim() { + UIView.animate(withDuration: 0.1, animations: { + self.transform = CGAffineTransform(scaleX: 1.05, y: 1.05) + }) { _ in + UIView.animate(withDuration: 0.1, animations: { + self.transform = CGAffineTransform(scaleX: 1, y: 1) + }) + } + } + + @objc open func update(with phAsset: PHAsset) { + + } + + @objc open func selectedCell() { + + } + + @objc open func willDisplayCell() { + + } + + @objc open func endDisplayingCell() { + + } + + @objc func stopPlay() { + if let player = self.player { + player.pause() + self.player = nil + } + self.livePhotoView?.livePhoto = nil + self.livePhotoView?.isHidden = true + self.livePhotoView?.stopPlayback() + self.livePhotoView?.delegate = nil + } + + deinit { +// print("deinit TLPhotoCollectionViewCell") + } + + override open func awakeFromNib() { + super.awakeFromNib() + self.playerView?.playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill + self.livePhotoView?.isHidden = true + self.durationView?.isHidden = true + self.selectedView?.isHidden = true + self.selectedView?.layer.borderWidth = 10 + self.selectedView?.layer.cornerRadius = 15 + self.orderBgView?.layer.cornerRadius = 2 + self.videoIconImageView?.image = self.configure.videoIcon + if #available(iOS 11.0, *) { + self.imageView?.accessibilityIgnoresInvertColors = true + self.playerView?.accessibilityIgnoresInvertColors = true + self.livePhotoView?.accessibilityIgnoresInvertColors = true + self.videoIconImageView?.accessibilityIgnoresInvertColors = true + } + } + + override open func prepareForReuse() { + super.prepareForReuse() + stopPlay() + self.durationView?.isHidden = true + self.durationView?.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.6) + self.selectedHeight?.constant = 10 + self.selectedAsset = false + } +} diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotoCollectionViewCell.xib b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotoCollectionViewCell.xib new file mode 100644 index 0000000..4110de9 --- /dev/null +++ b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotoCollectionViewCell.xib @@ -0,0 +1,142 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="17156" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES"> + <device id="retina4_7" orientation="portrait" appearance="light"/> + <dependencies> + <deployment identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17125"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + </dependencies> + <objects> + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> + <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="TLPhotoCollectionViewCell" id="IF3-4e-v0j" customClass="TLPhotoCollectionViewCell" customModule="TLPhotoPicker"> + <rect key="frame" x="0.0" y="0.0" width="100" height="100"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> + <rect key="frame" x="0.0" y="0.0" width="100" height="100"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="0cR-fZ-1bW"> + <rect key="frame" x="0.0" y="0.0" width="100" height="100"/> + </imageView> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vfk-Ao-TKR" customClass="PHLivePhotoView"> + <rect key="frame" x="0.0" y="0.0" width="100" height="100"/> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </view> + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="TGh-wt-hcR"> + <rect key="frame" x="70" y="70" width="25" height="25"/> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + <constraints> + <constraint firstAttribute="width" constant="25" id="NMA-SI-Idt"/> + <constraint firstAttribute="height" constant="25" id="XvY-Ee-EA2"/> + </constraints> + </imageView> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="apl-2Q-Hz7" customClass="TLPlayerView" customModule="TLPhotoPicker"> + <rect key="frame" x="0.0" y="0.0" width="100" height="100"/> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </view> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="d1a-KW-Ta4"> + <rect key="frame" x="-5" y="-5" width="110" height="110"/> + <subviews> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hbA-dR-I09"> + <rect key="frame" x="75" y="5" width="30" height="30"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Weu-ef-IZ5"> + <rect key="frame" x="1.5" y="8" width="25" height="16"/> + <constraints> + <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="25" id="YMX-0Z-bfm"/> + </constraints> + <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="13"/> + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + <nil key="highlightedColor"/> + </label> + </subviews> + <color key="backgroundColor" red="0.27843137254901962" green="0.47058823529411764" blue="0.85098039215686272" alpha="1" colorSpace="calibratedRGB"/> + <constraints> + <constraint firstAttribute="height" constant="30" id="8ln-g5-eHL"/> + <constraint firstItem="Weu-ef-IZ5" firstAttribute="leading" secondItem="hbA-dR-I09" secondAttribute="leading" constant="1.5" id="Yw3-zp-UZQ"/> + <constraint firstAttribute="trailing" secondItem="Weu-ef-IZ5" secondAttribute="trailing" constant="3.5" id="jsL-aw-IED"/> + <constraint firstItem="Weu-ef-IZ5" firstAttribute="centerY" secondItem="hbA-dR-I09" secondAttribute="centerY" constant="1" id="nUh-b3-s9s"/> + </constraints> + </view> + </subviews> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + <constraints> + <constraint firstAttribute="trailing" secondItem="hbA-dR-I09" secondAttribute="trailing" constant="5" id="hjj-HC-A4B"/> + <constraint firstItem="hbA-dR-I09" firstAttribute="top" secondItem="d1a-KW-Ta4" secondAttribute="top" constant="5" id="xJ1-j7-RX7"/> + </constraints> + </view> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aju-ob-KlZ"> + <rect key="frame" x="0.0" y="75" width="100" height="25"/> + <subviews> + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Uzf-HJ-aUY"> + <rect key="frame" x="5" y="2.5" width="20" height="20"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </imageView> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0:02" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zNx-FC-5V2"> + <rect key="frame" x="30" y="0.0" width="65" height="25"/> + <constraints> + <constraint firstAttribute="width" constant="65" id="3hi-82-ovQ"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="12"/> + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + <nil key="highlightedColor"/> + </label> + </subviews> + <color key="backgroundColor" red="0.11109734326601028" green="0.57953345775604248" blue="0.96568840742111206" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + <constraints> + <constraint firstAttribute="height" constant="25" id="DzP-0j-1SD"/> + <constraint firstItem="zNx-FC-5V2" firstAttribute="top" secondItem="aju-ob-KlZ" secondAttribute="top" id="Lim-xf-cbx"/> + <constraint firstAttribute="bottom" secondItem="zNx-FC-5V2" secondAttribute="bottom" id="T0P-EH-uPu"/> + <constraint firstAttribute="trailing" secondItem="zNx-FC-5V2" secondAttribute="trailing" constant="5" id="uhl-Y8-3g5"/> + </constraints> + </view> + <activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" hidesWhenStopped="YES" style="gray" translatesAutoresizingMaskIntoConstraints="NO" id="DZc-ag-e55"> + <rect key="frame" x="40" y="40" width="20" height="20"/> + </activityIndicatorView> + </subviews> + </view> + <constraints> + <constraint firstAttribute="bottom" secondItem="vfk-Ao-TKR" secondAttribute="bottom" id="2gw-cO-5bN"/> + <constraint firstAttribute="bottom" secondItem="aju-ob-KlZ" secondAttribute="bottom" id="2wo-Ki-15d"/> + <constraint firstAttribute="trailing" secondItem="aju-ob-KlZ" secondAttribute="trailing" id="2zm-kD-GPn"/> + <constraint firstAttribute="bottom" secondItem="apl-2Q-Hz7" secondAttribute="bottom" id="3zu-V3-EAd"/> + <constraint firstAttribute="trailing" secondItem="0cR-fZ-1bW" secondAttribute="trailing" id="9sd-Ea-EBO"/> + <constraint firstAttribute="trailing" secondItem="vfk-Ao-TKR" secondAttribute="trailing" id="BZ0-ZG-uW5"/> + <constraint firstAttribute="bottom" secondItem="TGh-wt-hcR" secondAttribute="bottom" constant="5" id="Ba1-Z6-ypz"/> + <constraint firstItem="0cR-fZ-1bW" firstAttribute="leading" secondItem="IF3-4e-v0j" secondAttribute="leading" id="DXe-M9-mxX"/> + <constraint firstItem="aju-ob-KlZ" firstAttribute="leading" secondItem="IF3-4e-v0j" secondAttribute="leading" id="FDl-UE-XVM"/> + <constraint firstItem="apl-2Q-Hz7" firstAttribute="top" secondItem="IF3-4e-v0j" secondAttribute="top" id="JlA-ya-cf3"/> + <constraint firstAttribute="trailing" secondItem="apl-2Q-Hz7" secondAttribute="trailing" id="KZg-oh-B11"/> + <constraint firstAttribute="trailing" secondItem="TGh-wt-hcR" secondAttribute="trailing" constant="5" id="Meo-q5-HyZ"/> + <constraint firstItem="vfk-Ao-TKR" firstAttribute="leading" secondItem="IF3-4e-v0j" secondAttribute="leading" id="NOQ-KU-fHD"/> + <constraint firstItem="vfk-Ao-TKR" firstAttribute="top" secondItem="IF3-4e-v0j" secondAttribute="top" id="NrV-wc-c3q"/> + <constraint firstItem="d1a-KW-Ta4" firstAttribute="height" secondItem="IF3-4e-v0j" secondAttribute="height" constant="10" id="VMJ-Qp-D4N"/> + <constraint firstItem="apl-2Q-Hz7" firstAttribute="leading" secondItem="IF3-4e-v0j" secondAttribute="leading" id="bsL-0J-0Y5"/> + <constraint firstItem="d1a-KW-Ta4" firstAttribute="width" secondItem="IF3-4e-v0j" secondAttribute="width" constant="10" id="clS-DI-jvL"/> + <constraint firstItem="d1a-KW-Ta4" firstAttribute="top" secondItem="IF3-4e-v0j" secondAttribute="top" constant="-5" id="d3r-HZ-6We"/> + <constraint firstItem="DZc-ag-e55" firstAttribute="centerX" secondItem="IF3-4e-v0j" secondAttribute="centerX" id="fnn-1c-fSn"/> + <constraint firstItem="DZc-ag-e55" firstAttribute="centerY" secondItem="IF3-4e-v0j" secondAttribute="centerY" id="qZc-2h-nOx"/> + <constraint firstItem="d1a-KW-Ta4" firstAttribute="leading" secondItem="IF3-4e-v0j" secondAttribute="leading" constant="-5" id="sOj-ms-Oo3"/> + <constraint firstItem="0cR-fZ-1bW" firstAttribute="top" secondItem="IF3-4e-v0j" secondAttribute="top" id="sSC-fd-MoT"/> + <constraint firstAttribute="bottom" secondItem="0cR-fZ-1bW" secondAttribute="bottom" id="xzA-tS-EVK"/> + </constraints> + <connections> + <outlet property="durationLabel" destination="zNx-FC-5V2" id="5SU-lD-AGm"/> + <outlet property="durationView" destination="aju-ob-KlZ" id="hiP-Ze-cbc"/> + <outlet property="imageView" destination="0cR-fZ-1bW" id="N3f-v5-K9b"/> + <outlet property="indicator" destination="DZc-ag-e55" id="R3y-XL-0SY"/> + <outlet property="liveBadgeImageView" destination="TGh-wt-hcR" id="cry-3P-rLI"/> + <outlet property="livePhotoView" destination="vfk-Ao-TKR" id="uvj-l1-wcp"/> + <outlet property="orderBgView" destination="hbA-dR-I09" id="cQo-BP-xh1"/> + <outlet property="orderLabel" destination="Weu-ef-IZ5" id="B3t-X5-o3a"/> + <outlet property="playerView" destination="apl-2Q-Hz7" id="vTI-ie-mcV"/> + <outlet property="selectedHeight" destination="VMJ-Qp-D4N" id="uVe-tQ-4q5"/> + <outlet property="selectedView" destination="d1a-KW-Ta4" id="c31-4y-72g"/> + <outlet property="videoIconImageView" destination="Uzf-HJ-aUY" id="d7e-Bl-181"/> + </connections> + <point key="canvasLocation" x="32" y="-10"/> + </collectionViewCell> + </objects> +</document> diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotoLibrary.swift b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotoLibrary.swift new file mode 100644 index 0000000..cfba485 --- /dev/null +++ b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotoLibrary.swift @@ -0,0 +1,293 @@ +// +// TLPhotoLibrary.swift +// TLPhotosPicker +// +// Created by wade.hawk on 2017. 5. 3.. +// Copyright © 2017ë…„ wade.hawk. All rights reserved. +// + +import UIKit +import Photos + +protocol TLPhotoLibraryDelegate: AnyObject { + func loadCameraRollCollection(collection: TLAssetsCollection) + func loadCompleteAllCollection(collections: [TLAssetsCollection]) +} + +class TLPhotoLibrary { + + weak var delegate: TLPhotoLibraryDelegate? = nil + + lazy var imageManager: PHCachingImageManager = { + return PHCachingImageManager() + }() + internal var limitMode: Bool = false + internal var assetCollections: [PHFetchResult<PHAssetCollection>] = [] + internal var albums: PHFetchResult<PHCollection>? = nil + + deinit { + // print("deinit TLPhotoLibrary") + } + + @discardableResult + func livePhotoAsset(asset: PHAsset, size: CGSize = CGSize(width: 720, height: 1280), progressBlock: Photos.PHAssetImageProgressHandler? = nil, completionBlock:@escaping (PHLivePhoto,Bool)-> Void ) -> PHImageRequestID { + let options = PHLivePhotoRequestOptions() + options.deliveryMode = .opportunistic + options.isNetworkAccessAllowed = true + options.progressHandler = progressBlock + let scale = min(UIScreen.main.scale,2) + let targetSize = CGSize(width: size.width*scale, height: size.height*scale) + let requestID = self.imageManager.requestLivePhoto(for: asset, targetSize: targetSize, contentMode: .aspectFill, options: options) { (livePhoto, info) in + let complete = (info?["PHImageResultIsDegradedKey"] as? Bool) == false + if let livePhoto = livePhoto { + completionBlock(livePhoto,complete) + } + } + return requestID + } + + @discardableResult + func videoAsset(asset: PHAsset, size: CGSize = CGSize(width: 720, height: 1280), progressBlock: Photos.PHAssetImageProgressHandler? = nil, completionBlock:@escaping (AVPlayerItem?, [AnyHashable : Any]?) -> Void ) -> PHImageRequestID { + let options = PHVideoRequestOptions() + options.isNetworkAccessAllowed = true + options.deliveryMode = .automatic + options.progressHandler = progressBlock + let requestID = self.imageManager.requestPlayerItem(forVideo: asset, options: options, resultHandler: { playerItem, info in + completionBlock(playerItem,info) + }) + return requestID + } + + @discardableResult + func imageAsset(asset: PHAsset, size: CGSize = CGSize(width: 160, height: 160), options: PHImageRequestOptions? = nil, completionBlock:@escaping (UIImage,Bool)-> Void ) -> PHImageRequestID { + var options = options + if options == nil { + options = PHImageRequestOptions() + options?.isSynchronous = false + options?.resizeMode = .exact + options?.deliveryMode = .opportunistic + options?.isNetworkAccessAllowed = true + } + let scale = min(UIScreen.main.scale,2) + let targetSize = CGSize(width: size.width*scale, height: size.height*scale) + let requestID = self.imageManager.requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFill, options: options) { image, info in + let complete = (info?["PHImageResultIsDegradedKey"] as? Bool) == false + if let image = image { + completionBlock(image,complete) + } + } + return requestID + } + + func cancelPHImageRequest(requestID: PHImageRequestID) { + self.imageManager.cancelImageRequest(requestID) + } + + @discardableResult + class func cloudImageDownload(asset: PHAsset, size: CGSize = PHImageManagerMaximumSize, progressBlock: @escaping (Double) -> Void, completionBlock:@escaping (UIImage?)-> Void ) -> PHImageRequestID { + let options = PHImageRequestOptions() + options.isSynchronous = false + options.isNetworkAccessAllowed = true + options.deliveryMode = .opportunistic + options.version = .current + options.resizeMode = .exact + options.progressHandler = { (progress,error,stop,info) in + progressBlock(progress) + } + let requestID = PHCachingImageManager().requestImageData(for: asset, options: options) { (imageData, dataUTI, orientation, info) in + if let data = imageData,let _ = info { + completionBlock(UIImage(data: data)) + }else{ + completionBlock(nil)//error + } + } + return requestID + } + + @discardableResult + class func fullResolutionImageData(asset: PHAsset) -> UIImage? { + let options = PHImageRequestOptions() + options.isSynchronous = true + options.resizeMode = .none + options.isNetworkAccessAllowed = true + options.version = .current + var image: UIImage? = nil + _ = PHCachingImageManager().requestImageData(for: asset, options: options) { (imageData, dataUTI, orientation, info) in + if let data = imageData { + image = UIImage(data: data) + } + } + return image + } +} + +extension PHFetchOptions { + func merge(predicate: NSPredicate) { + if let storePredicate = self.predicate { + self.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [storePredicate, predicate]) + }else { + self.predicate = predicate + } + } +} + +//MARK: - Load Collection +extension TLPhotoLibrary { + func getOption(configure: TLPhotosPickerConfigure) -> PHFetchOptions { + let options: PHFetchOptions + if let fetchOption = configure.fetchOption { + options = fetchOption + }else { + options = PHFetchOptions() + options.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] + } + if let mediaType = configure.mediaType { + let mediaPredicate = NSPredicate(format: "mediaType = %i", mediaType.rawValue) + options.merge(predicate: mediaPredicate) + } + if configure.allowedVideo == false { + let notVideoPredicate = NSPredicate(format: "mediaType != %i", PHAssetMediaType.video.rawValue) + options.merge(predicate: notVideoPredicate) + } + if configure.allowedLivePhotos == false { + let notLivePhotoPredicate = NSPredicate(format: "NOT ((mediaSubtype & %d) != 0)", PHAssetMediaSubtype.photoLive.rawValue) + options.merge(predicate: notLivePhotoPredicate) + } + if let maxVideoDuration = configure.maxVideoDuration { + let durationPredicate = NSPredicate(format: "duration < %f", maxVideoDuration) + options.merge(predicate: durationPredicate) + } + return options + } + + func fetchResult(collection: TLAssetsCollection?, configure: TLPhotosPickerConfigure) -> PHFetchResult<PHAsset>? { + guard let phAssetCollection = collection?.phAssetCollection else { return nil } + let options = getOption(configure: configure) + return PHAsset.fetchAssets(in: phAssetCollection, options: options) + } + + func fetchCollection(configure: TLPhotosPickerConfigure) { + self.albums = nil + self.assetCollections = [] + let useCameraButton = configure.usedCameraButton + let options = getOption(configure: configure) + let fetchCollectionOption = configure.fetchCollectionOption + + func getAlbum(subType: PHAssetCollectionSubtype, result: inout [TLAssetsCollection]) { + let collectionOption = fetchCollectionOption[.assetCollections(.album)] + let fetchCollection = PHAssetCollection.fetchAssetCollections(with: .album, + subtype: subType, + options: collectionOption) + self.assetCollections.append(fetchCollection) + var collections = [PHAssetCollection]() + fetchCollection.enumerateObjects { (collection, index, _) in + if configure.allowedAlbumCloudShared == false && collection.assetCollectionSubtype == .albumCloudShared { + }else { + collections.append(collection) + } + } + for collection in collections { + if !result.contains(where: { $0.localIdentifier == collection.localIdentifier }) { + var assetsCollection = TLAssetsCollection(collection: collection) + assetsCollection.title = configure.customLocalizedTitle[assetsCollection.title] ?? assetsCollection.title + assetsCollection.fetchResult = PHAsset.fetchAssets(in: collection, options: options) + if assetsCollection.count > 0 { + result.append(assetsCollection) + } + } + } + } + + @discardableResult + func getSmartAlbum(subType: PHAssetCollectionSubtype, + useCameraButton: Bool = false, + result: inout [TLAssetsCollection]) + -> TLAssetsCollection? + { + let collectionOption = fetchCollectionOption[.assetCollections(.smartAlbum)] + let fetchCollection = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, + subtype: subType, + options: collectionOption) + self.assetCollections.append(fetchCollection) + if + let collection = fetchCollection.firstObject, + result.contains(where: { $0.localIdentifier == collection.localIdentifier }) == false + { + var assetsCollection = TLAssetsCollection(collection: collection) + assetsCollection.title = configure.customLocalizedTitle[assetsCollection.title] ?? assetsCollection.title + assetsCollection.fetchResult = PHAsset.fetchAssets(in: collection, options: options) + if assetsCollection.count > 0 || useCameraButton { + result.append(assetsCollection) + return assetsCollection + } + } + return nil + } + if let fetchCollectionTypes = configure.fetchCollectionTypes { + DispatchQueue.global(qos: .userInteractive).async { [weak self] in + var assetCollections = [TLAssetsCollection]() + for (type,subType) in fetchCollectionTypes { + if type == .smartAlbum { + getSmartAlbum(subType: subType, result: &assetCollections) + }else { + getAlbum(subType: subType, result: &assetCollections) + } + } + DispatchQueue.main.async { + self?.delegate?.loadCompleteAllCollection(collections: assetCollections) + } + } + }else { + DispatchQueue.global(qos: .userInteractive).async { [weak self] in + var assetCollections = [TLAssetsCollection]() + + //Recents + let recentsCollection = getSmartAlbum(subType: .smartAlbumUserLibrary, + useCameraButton: useCameraButton, + result: &assetCollections) + if var cameraRoll = recentsCollection { + cameraRoll.title = configure.customLocalizedTitle[cameraRoll.title] ?? cameraRoll.title + cameraRoll.useCameraButton = useCameraButton + assetCollections[0] = cameraRoll + DispatchQueue.main.async { + self?.delegate?.loadCameraRollCollection(collection: cameraRoll) + } + } + //Screenshots + getSmartAlbum(subType: .smartAlbumScreenshots, result: &assetCollections) + //Selfies + getSmartAlbum(subType: .smartAlbumSelfPortraits, result: &assetCollections) + //Panoramas + getSmartAlbum(subType: .smartAlbumPanoramas, result: &assetCollections) + //Favorites + getSmartAlbum(subType: .smartAlbumFavorites, result: &assetCollections) + //CloudShared + getSmartAlbum(subType: .albumCloudShared, result: &assetCollections) + //get all another albums + getAlbum(subType: .any, result: &assetCollections) + if configure.allowedVideo { + //Videos + getSmartAlbum(subType: .smartAlbumVideos, result: &assetCollections) + } + //Album + let collectionOption = fetchCollectionOption[.topLevelUserCollections] + let albumsResult = PHCollectionList.fetchTopLevelUserCollections(with: collectionOption) + self?.albums = albumsResult + albumsResult.enumerateObjects({ (collection, index, stop) -> Void in + guard let collection = collection as? PHAssetCollection else { return } + var assetsCollection = TLAssetsCollection(collection: collection) + assetsCollection.title = configure.customLocalizedTitle[assetsCollection.title] ?? assetsCollection.title + assetsCollection.fetchResult = PHAsset.fetchAssets(in: collection, options: options) + if assetsCollection.count > 0, !assetCollections.contains(where: { $0.localIdentifier == collection.localIdentifier }) { + assetCollections.append(assetsCollection) + } + }) + + DispatchQueue.main.async { + self?.delegate?.loadCompleteAllCollection(collections: assetCollections) + } + } + } + } +} + diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotopickerDataSourcesProtocol.swift b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotopickerDataSourcesProtocol.swift new file mode 100644 index 0000000..58b97f2 --- /dev/null +++ b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotopickerDataSourcesProtocol.swift @@ -0,0 +1,17 @@ +// +// TLPhotopickerDataSourcesProtocol.swift +// TLPhotoPicker +// +// Created by wade.hawk on 21/01/2019. +// + +import UIKit +import Photos + +public protocol TLPhotopickerDataSourcesProtocol { + func headerReferenceSize() -> CGSize + func footerReferenceSize() -> CGSize + func registerSupplementView(collectionView: UICollectionView) + func supplementIdentifier(kind: String) -> String + func configure(supplement view: UICollectionReusableView, section: (title: String, assets: [TLPHAsset])) +} diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotosPickerViewController.swift b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotosPickerViewController.swift new file mode 100644 index 0000000..1b0211e --- /dev/null +++ b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotosPickerViewController.swift @@ -0,0 +1,1358 @@ +// +// TLPhotosPickerViewController.swift +// TLPhotosPicker +// +// Created by wade.hawk on 2017. 4. 14.. +// Copyright © 2017ë…„ wade.hawk. All rights reserved. +// + +import UIKit +import Photos +import PhotosUI +import MobileCoreServices + +public protocol TLPhotosPickerViewControllerDelegate: AnyObject { + func dismissPhotoPicker(withPHAssets: [PHAsset]) + func dismissPhotoPicker(withTLPHAssets: [TLPHAsset]) + func shouldDismissPhotoPicker(withTLPHAssets: [TLPHAsset]) -> Bool + func dismissComplete() + func photoPickerDidCancel() + func canSelectAsset(phAsset: PHAsset) -> Bool + func didExceedMaximumNumberOfSelection(picker: TLPhotosPickerViewController) + func handleNoAlbumPermissions(picker: TLPhotosPickerViewController) + func handleNoCameraPermissions(picker: TLPhotosPickerViewController) +} + +extension TLPhotosPickerViewControllerDelegate { + public func deninedAuthoization() { } + public func dismissPhotoPicker(withPHAssets: [PHAsset]) { } + public func dismissPhotoPicker(withTLPHAssets: [TLPHAsset]) { } + public func shouldDismissPhotoPicker(withTLPHAssets: [TLPHAsset]) -> Bool { return true } + public func dismissComplete() { } + public func photoPickerDidCancel() { } + public func canSelectAsset(phAsset: PHAsset) -> Bool { return true } + public func didExceedMaximumNumberOfSelection(picker: TLPhotosPickerViewController) { } + public func handleNoAlbumPermissions(picker: TLPhotosPickerViewController) { } + public func handleNoCameraPermissions(picker: TLPhotosPickerViewController) { } +} + +//for log +public protocol TLPhotosPickerLogDelegate: AnyObject { + func selectedCameraCell(picker: TLPhotosPickerViewController) + func deselectedPhoto(picker: TLPhotosPickerViewController, at: Int) + func selectedPhoto(picker: TLPhotosPickerViewController, at: Int) + func selectedAlbum(picker: TLPhotosPickerViewController, title: String, at: Int) +} + +extension TLPhotosPickerLogDelegate { + func selectedCameraCell(picker: TLPhotosPickerViewController) { } + func deselectedPhoto(picker: TLPhotosPickerViewController, at: Int) { } + func selectedPhoto(picker: TLPhotosPickerViewController, at: Int) { } + func selectedAlbum(picker: TLPhotosPickerViewController, collections: [TLAssetsCollection], at: Int) { } +} + +public struct TLPhotosPickerConfigure { + public var customLocalizedTitle: [String: String] = ["Camera Roll": "Camera Roll"] + public var tapHereToChange = "Tap here to change" + public var cancelTitle = "Cancel" + public var doneTitle = "Done" + public var emptyMessage = "No albums" + public var selectMessage = "Select" + public var deselectMessage = "Deselect" + public var emptyImage: UIImage? = nil + public var usedCameraButton = true + public var defaultToFrontFacingCamera = false + public var usedPrefetch = false + public var previewAtForceTouch = false + public var startplayBack: PHLivePhotoViewPlaybackStyle = .hint + public var allowedLivePhotos = true + public var allowedVideo = true + public var allowedAlbumCloudShared = false + public var allowedPhotograph = true + public var allowedVideoRecording = true + public var recordingVideoQuality: UIImagePickerController.QualityType = .typeMedium + public var maxVideoDuration:TimeInterval? = nil + public var autoPlay = true + public var muteAudio = true + public var preventAutomaticLimitedAccessAlert = true + public var mediaType: PHAssetMediaType? = nil + public var numberOfColumn = 3 + public var minimumLineSpacing: CGFloat = 5 + public var minimumInteritemSpacing: CGFloat = 5 + public var singleSelectedMode = false + public var maxSelectedAssets: Int? = nil + public var fetchOption: PHFetchOptions? = nil + public var fetchCollectionOption: [FetchCollectionType: PHFetchOptions] = [:] + public var selectedColor = UIColor(red: 88/255, green: 144/255, blue: 255/255, alpha: 1.0) + public var cameraBgColor = UIColor(red: 221/255, green: 223/255, blue: 226/255, alpha: 1) + public var cameraIcon = TLBundle.podBundleImage(named: "camera") + public var videoIcon = TLBundle.podBundleImage(named: "video") + public var placeholderIcon = TLBundle.podBundleImage(named: "insertPhotoMaterial") + public var nibSet: (nibName: String, bundle:Bundle)? = nil + public var cameraCellNibSet: (nibName: String, bundle:Bundle)? = nil + public var fetchCollectionTypes: [(PHAssetCollectionType,PHAssetCollectionSubtype)]? = nil + public var groupByFetch: PHFetchedResultGroupedBy? = nil + public var supportedInterfaceOrientations: UIInterfaceOrientationMask = .portrait + public var popup: [PopupConfigure] = [] + public init() { + + } +} + +public enum FetchCollectionType { + case assetCollections(PHAssetCollectionType) + case topLevelUserCollections +} + +extension FetchCollectionType: Hashable { + private var identifier: String { + switch self { + case let .assetCollections(collectionType): + return "assetCollections\(collectionType.rawValue)" + case .topLevelUserCollections: + return "topLevelUserCollections" + } + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(self.identifier) + } +} + +public enum PopupConfigure { + case animation(TimeInterval) +} + +public struct Platform { + public static var isSimulator: Bool { + return TARGET_OS_SIMULATOR != 0 // Use this line in Xcode 7 or newer + } +} + + +open class TLPhotosPickerViewController: UIViewController { + @IBOutlet open var navigationBar: UINavigationBar! + @IBOutlet open var titleView: UIView! + @IBOutlet open var titleLabel: UILabel! + @IBOutlet open var subTitleStackView: UIStackView! + @IBOutlet open var subTitleLabel: UILabel! + @IBOutlet open var subTitleArrowImageView: UIImageView! + @IBOutlet open var albumPopView: TLAlbumPopView! + @IBOutlet open var collectionView: UICollectionView! + @IBOutlet open var indicator: UIActivityIndicatorView! + @IBOutlet open var popArrowImageView: UIImageView! + @IBOutlet open var customNavItem: UINavigationItem! + @IBOutlet open var doneButton: UIBarButtonItem! + @IBOutlet open var cancelButton: UIBarButtonItem! + @IBOutlet open var navigationBarTopConstraint: NSLayoutConstraint! + @IBOutlet open var emptyView: UIView! + @IBOutlet open var emptyImageView: UIImageView! + @IBOutlet open var emptyMessageLabel: UILabel! + @IBOutlet open var photosButton: UIBarButtonItem! + + public weak var delegate: TLPhotosPickerViewControllerDelegate? = nil + public weak var logDelegate: TLPhotosPickerLogDelegate? = nil + open var selectedAssets = [TLPHAsset]() + public var configure = TLPhotosPickerConfigure() + public var customDataSouces: TLPhotopickerDataSourcesProtocol? = nil + + private var usedCameraButton: Bool { + return self.configure.usedCameraButton + } + private var previewAtForceTouch: Bool { + return self.configure.previewAtForceTouch + } + private var allowedVideo: Bool { + return self.configure.allowedVideo + } + private var usedPrefetch: Bool { + get { + return self.configure.usedPrefetch + } + set { + self.configure.usedPrefetch = newValue + } + } + private var allowedLivePhotos: Bool { + get { + return self.configure.allowedLivePhotos + } + set { + self.configure.allowedLivePhotos = newValue + } + } + @objc open var canSelectAsset: ((PHAsset) -> Bool)? = nil + @objc open var didExceedMaximumNumberOfSelection: ((TLPhotosPickerViewController) -> Void)? = nil + @objc open var handleNoAlbumPermissions: ((TLPhotosPickerViewController) -> Void)? = nil + @objc open var handleNoCameraPermissions: ((TLPhotosPickerViewController) -> Void)? = nil + @objc open var dismissCompletion: (() -> Void)? = nil + private var completionWithPHAssets: (([PHAsset]) -> Void)? = nil + private var completionWithTLPHAssets: (([TLPHAsset]) -> Void)? = nil + private var didCancel: (() -> Void)? = nil + + private var collections = [TLAssetsCollection]() + private var focusedCollection: TLAssetsCollection? = nil + private var requestIDs = SynchronizedDictionary<IndexPath,PHImageRequestID>() + private var playRequestID: (indexPath: IndexPath, requestID: PHImageRequestID)? = nil + private var photoLibrary = TLPhotoLibrary() + private var queue = DispatchQueue(label: "tilltue.photos.pikcker.queue") + private var queueForGroupedBy = DispatchQueue(label: "tilltue.photos.pikcker.queue.for.groupedBy", qos: .utility) + private var thumbnailSize = CGSize.zero + private var placeholderThumbnail: UIImage? = nil + private var cameraImage: UIImage? = nil + + deinit { + //print("deinit TLPhotosPickerViewController") + PHPhotoLibrary.shared().unregisterChangeObserver(self) + } + + required public init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public init() { + super.init(nibName: "TLPhotosPickerViewController", bundle: TLBundle.bundle()) + } + + @objc convenience public init(withPHAssets: (([PHAsset]) -> Void)? = nil, didCancel: (() -> Void)? = nil) { + self.init() + self.completionWithPHAssets = withPHAssets + self.didCancel = didCancel + } + + convenience public init(withTLPHAssets: (([TLPHAsset]) -> Void)? = nil, didCancel: (() -> Void)? = nil) { + self.init() + self.completionWithTLPHAssets = withTLPHAssets + self.didCancel = didCancel + } + + override open var supportedInterfaceOrientations: UIInterfaceOrientationMask { + return self.configure.supportedInterfaceOrientations + } + + open override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { + super.traitCollectionDidChange(previousTraitCollection) + + if traitCollection.forceTouchCapability == .available && self.previewAtForceTouch { + registerForPreviewing(with: self, sourceView: collectionView) + } + + updateUserInterfaceStyle() + } + + private func updateUserInterfaceStyle() { + if #available(iOS 13.0, *) { + let userInterfaceStyle = self.traitCollection.userInterfaceStyle + let image = TLBundle.podBundleImage(named: "pop_arrow") + let subImage = TLBundle.podBundleImage(named: "arrow") + if userInterfaceStyle.rawValue == 2 { + self.popArrowImageView.image = image?.colorMask(color: .systemBackground) + self.subTitleArrowImageView.image = subImage?.colorMask(color: .white) + self.view.backgroundColor = .black + self.collectionView.backgroundColor = .black + } else { + self.popArrowImageView.image = image?.colorMask(color: .white) + self.subTitleArrowImageView.image = subImage + self.view.backgroundColor = .white + self.collectionView.backgroundColor = .white + } + } + } + + override open func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + self.stopPlay() + } + + private func loadPhotos(limitMode: Bool) { + self.photoLibrary.limitMode = limitMode + self.photoLibrary.delegate = self + self.photoLibrary.fetchCollection(configure: self.configure) + } + + private func processAuthorization(status: PHAuthorizationStatus) { + switch status { + case .notDetermined: + requestAuthorization() + case .limited: + loadPhotos(limitMode: true) + case .authorized: + loadPhotos(limitMode: false) + case .restricted, .denied: + handleDeniedAlbumsAuthorization() + @unknown default: + break + } + } + + private func requestAuthorization() { + if #available(iOS 14.0, *) { + PHPhotoLibrary.requestAuthorization(for: .readWrite) { [weak self] status in + self?.processAuthorization(status: status) + } + } else { + PHPhotoLibrary.requestAuthorization { [weak self] status in + self?.processAuthorization(status: status) + } + } + } + + private func checkAuthorization() { + if #available(iOS 14.0, *) { + let status = PHPhotoLibrary.authorizationStatus(for: .readWrite) + processAuthorization(status: status) + } else { + let status = PHPhotoLibrary.authorizationStatus() + processAuthorization(status: status) + } + } + + override open func viewDidLoad() { + super.viewDidLoad() + makeUI() + checkAuthorization() + } + + override open func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + if self.thumbnailSize == CGSize.zero { + initItemSize() + } + if #available(iOS 11.0, *) { + } else if self.navigationBarTopConstraint.constant == 0 { + self.navigationBarTopConstraint.constant = 20 + } + } + + override open func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + if self.photoLibrary.delegate == nil { + checkAuthorization() + } + } + + private func findIndexAndReloadCells(phAsset: PHAsset) { + if + self.configure.groupByFetch != nil, + let indexPath = self.focusedCollection?.findIndex(phAsset: phAsset) + { + self.collectionView.reloadItems(at: [indexPath]) + return + } + if + var index = self.focusedCollection?.fetchResult?.index(of: phAsset), + let focused = self.focusedCollection, + index != NSNotFound + { + index += (focused.useCameraButton) ? 1 : 0 + self.collectionView.reloadItems(at: [IndexPath(row: index, section: 0)]) + } + } + + open func deselectWhenUsingSingleSelectedMode() { + if + self.configure.singleSelectedMode == true, + let selectedPHAsset = self.selectedAssets.first?.phAsset + { + self.selectedAssets.removeAll() + findIndexAndReloadCells(phAsset: selectedPHAsset) + } + } + + open func maxCheck() -> Bool { + deselectWhenUsingSingleSelectedMode() + if let max = self.configure.maxSelectedAssets, max <= self.selectedAssets.count { + self.delegate?.didExceedMaximumNumberOfSelection(picker: self) + self.didExceedMaximumNumberOfSelection?(self) + return true + } + return false + } +} + +// MARK: - UI & UI Action +extension TLPhotosPickerViewController { + + @objc public func registerNib(nibName: String, bundle: Bundle) { + self.collectionView.register(UINib(nibName: nibName, bundle: bundle), forCellWithReuseIdentifier: nibName) + } + + private func centerAtRect(image: UIImage?, rect: CGRect, bgColor: UIColor = UIColor.white) -> UIImage? { + guard let image = image else { return nil } + UIGraphicsBeginImageContextWithOptions(rect.size, false, image.scale) + bgColor.setFill() + UIRectFill(CGRect(x: 0, y: 0, width: rect.size.width, height: rect.size.height)) + image.draw(in: CGRect(x:rect.size.width/2 - image.size.width/2, y:rect.size.height/2 - image.size.height/2, width:image.size.width, height:image.size.height)) + let result = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + return result + } + + private func initItemSize() { + guard let layout = self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout else { + return + } + let count = CGFloat(self.configure.numberOfColumn) + let width = floor((self.view.frame.size.width - (self.configure.minimumInteritemSpacing * (count-1))) / count) + self.thumbnailSize = CGSize(width: width, height: width) + layout.itemSize = self.thumbnailSize + layout.minimumInteritemSpacing = self.configure.minimumInteritemSpacing + layout.minimumLineSpacing = self.configure.minimumLineSpacing + self.collectionView.collectionViewLayout = layout + self.placeholderThumbnail = centerAtRect(image: self.configure.placeholderIcon, rect: CGRect(x: 0, y: 0, width: width, height: width)) + self.cameraImage = centerAtRect(image: self.configure.cameraIcon, rect: CGRect(x: 0, y: 0, width: width, height: width), bgColor: self.configure.cameraBgColor) + } + + @objc open func makeUI() { + registerNib(nibName: "TLPhotoCollectionViewCell", bundle: TLBundle.bundle()) + if let nibSet = self.configure.nibSet { + registerNib(nibName: nibSet.nibName, bundle: nibSet.bundle) + } + if let nibSet = self.configure.cameraCellNibSet { + registerNib(nibName: nibSet.nibName, bundle: nibSet.bundle) + } + self.indicator.startAnimating() + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(titleTap)) + self.titleView.addGestureRecognizer(tapGesture) + self.titleLabel.text = self.configure.customLocalizedTitle["Camera Roll"] + self.subTitleLabel.text = self.configure.tapHereToChange + self.cancelButton.title = self.configure.cancelTitle + + let attributes: [NSAttributedString.Key: Any] = [.font: UIFont.boldSystemFont(ofSize: UIFont.labelFontSize)] + self.doneButton.setTitleTextAttributes(attributes, for: .normal) + self.doneButton.title = self.configure.doneTitle + self.emptyView.isHidden = true + self.emptyImageView.image = self.configure.emptyImage + self.emptyMessageLabel.text = self.configure.emptyMessage + self.albumPopView.tableView.delegate = self + self.albumPopView.tableView.dataSource = self + self.popArrowImageView.image = TLBundle.podBundleImage(named: "pop_arrow") + self.subTitleArrowImageView.image = TLBundle.podBundleImage(named: "arrow") + if #available(iOS 10.0, *), self.usedPrefetch { + self.collectionView.isPrefetchingEnabled = true + self.collectionView.prefetchDataSource = self + } else { + self.usedPrefetch = false + } + if #available(iOS 9.0, *), self.allowedLivePhotos { + } else { + self.allowedLivePhotos = false + } + self.customDataSouces?.registerSupplementView(collectionView: self.collectionView) + self.navigationBar.delegate = self + updateUserInterfaceStyle() + } + + private func updatePresentLimitedLibraryButton() { + if #available(iOS 14.0, *), self.photoLibrary.limitMode && self.configure.preventAutomaticLimitedAccessAlert { + self.customNavItem.rightBarButtonItems = [self.doneButton, self.photosButton] + } else { + self.customNavItem.rightBarButtonItems = [self.doneButton] + } + } + + private func updateTitle() { + guard self.focusedCollection != nil else { return } + self.titleLabel.text = self.focusedCollection?.title + updatePresentLimitedLibraryButton() + } + + private func reloadCollectionView() { + guard self.focusedCollection != nil else { + return + } + if let groupedBy = self.configure.groupByFetch, self.usedPrefetch == false { + queueForGroupedBy.async { [weak self] in + self?.focusedCollection?.reloadSection(groupedBy: groupedBy) + DispatchQueue.main.async { + self?.collectionView.reloadData() + } + } + }else { + self.collectionView.reloadData() + } + } + + private func reloadTableView() { + let count = min(5, self.collections.count) + var frame = self.albumPopView.popupView.frame + frame.size.height = CGFloat(count * 75) + self.albumPopView.popupViewHeight.constant = CGFloat(count * 75) + UIView.animate(withDuration: self.albumPopView.show ? 0.1:0) { + self.albumPopView.popupView.frame = frame + self.albumPopView.setNeedsLayout() + } + self.albumPopView.tableView.reloadData() + self.albumPopView.setupPopupFrame() + } + + private func registerChangeObserver() { + PHPhotoLibrary.shared().register(self) + } + + private func getfocusedIndex() -> Int { + guard let focused = self.focusedCollection, let result = self.collections.firstIndex(where: { $0 == focused }) else { return 0 } + return result + } + + private func getCollection(section: Int) -> PHAssetCollection? { + guard section < self.collections.count else { + return nil + } + return self.collections[section].phAssetCollection + } + + private func focused(collection: TLAssetsCollection) { + func resetRequest() { + cancelAllImageAssets() + } + resetRequest() + self.collections[getfocusedIndex()].recentPosition = self.collectionView.contentOffset + var reloadIndexPaths = [IndexPath(row: getfocusedIndex(), section: 0)] + self.focusedCollection = collection + self.focusedCollection?.fetchResult = self.photoLibrary.fetchResult(collection: collection, configure: self.configure) + reloadIndexPaths.append(IndexPath(row: getfocusedIndex(), section: 0)) + self.albumPopView.tableView.reloadRows(at: reloadIndexPaths, with: .none) + self.albumPopView.show(false, duration: self.configure.popup.duration) + self.updateTitle() + self.reloadCollectionView() + self.collectionView.contentOffset = collection.recentPosition + } + + private func cancelAllImageAssets() { + self.requestIDs.forEach{ (indexPath, requestID) in + self.photoLibrary.cancelPHImageRequest(requestID: requestID) + } + self.requestIDs.removeAll() + } + + // User Action + @objc func titleTap() { + guard collections.count > 0 else { return } + self.albumPopView.show(self.albumPopView.isHidden, duration: self.configure.popup.duration) + } + + @IBAction open func cancelButtonTap() { + self.stopPlay() + self.dismiss(done: false) + } + + @IBAction open func doneButtonTap() { + self.stopPlay() + self.dismiss(done: true) + } + + @IBAction open func limitButtonTap() { + if #available(iOS 14.0, *) { + PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self) + } + } + + private func dismiss(done: Bool) { + var shouldDismiss = true + if done { + #if swift(>=4.1) + self.delegate?.dismissPhotoPicker(withPHAssets: self.selectedAssets.compactMap{ $0.phAsset }) + #else + self.delegate?.dismissPhotoPicker(withPHAssets: self.selectedAssets.flatMap{ $0.phAsset }) + #endif + self.delegate?.dismissPhotoPicker(withTLPHAssets: self.selectedAssets) + shouldDismiss = self.delegate?.shouldDismissPhotoPicker(withTLPHAssets: self.selectedAssets) ?? true + self.completionWithTLPHAssets?(self.selectedAssets) + #if swift(>=4.1) + self.completionWithPHAssets?(self.selectedAssets.compactMap{ $0.phAsset }) + #else + self.completionWithPHAssets?(self.selectedAssets.flatMap{ $0.phAsset }) + #endif + }else { + self.delegate?.photoPickerDidCancel() + self.didCancel?() + } + if shouldDismiss { + self.dismiss(animated: true) { [weak self] in + self?.delegate?.dismissComplete() + self?.dismissCompletion?() + } + } + } + + private func canSelect(phAsset: PHAsset) -> Bool { + if let closure = self.canSelectAsset { + return closure(phAsset) + }else if let delegate = self.delegate { + return delegate.canSelectAsset(phAsset: phAsset) + } + return true + } + + private func focusFirstCollection() { + if self.focusedCollection == nil, let collection = self.collections.first { + self.focusedCollection = collection + self.updateTitle() + self.reloadCollectionView() + } + } +} + +// MARK: - TLPhotoLibraryDelegate +extension TLPhotosPickerViewController: TLPhotoLibraryDelegate { + func loadCameraRollCollection(collection: TLAssetsCollection) { + self.collections = [collection] + self.focusFirstCollection() + self.indicator.stopAnimating() + self.reloadTableView() + } + + func loadCompleteAllCollection(collections: [TLAssetsCollection]) { + self.collections = collections + self.focusFirstCollection() + let isEmpty = self.collections.count == 0 + self.subTitleStackView.isHidden = isEmpty + self.emptyView.isHidden = !isEmpty + self.emptyImageView.isHidden = self.emptyImageView.image == nil + self.indicator.stopAnimating() + self.reloadTableView() + self.registerChangeObserver() + } +} + +// MARK: - Camera Picker +extension TLPhotosPickerViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { + private func showCameraIfAuthorized() { + let cameraAuthorization = AVCaptureDevice.authorizationStatus(for: .video) + switch cameraAuthorization { + case .authorized: + self.showCamera() + case .notDetermined: + AVCaptureDevice.requestAccess(for: .video, completionHandler: { [weak self] (authorized) in + DispatchQueue.main.async { [weak self] in + if authorized { + self?.showCamera() + } else { + self?.handleDeniedCameraAuthorization() + } + } + }) + case .restricted, .denied: + self.handleDeniedCameraAuthorization() + @unknown default: + break + } + } + + private func showCamera() { + guard !maxCheck() else { return } + let picker = UIImagePickerController() + picker.sourceType = .camera + var mediaTypes: [String] = [] + if self.configure.allowedPhotograph { + mediaTypes.append(kUTTypeImage as String) + } + if self.configure.allowedVideoRecording { + mediaTypes.append(kUTTypeMovie as String) + picker.videoQuality = self.configure.recordingVideoQuality + if let duration = self.configure.maxVideoDuration { + picker.videoMaximumDuration = duration + } + } + guard mediaTypes.count > 0 else { + return + } + picker.cameraDevice = configure.defaultToFrontFacingCamera ? .front : .rear + picker.mediaTypes = mediaTypes + picker.allowsEditing = false + picker.delegate = self + + // if user is on ipad using split view controller, present picker as popover + if UIDevice.current.userInterfaceIdiom == .pad { + picker.modalPresentationStyle = .popover + picker.popoverPresentationController?.sourceView = view + picker.popoverPresentationController?.sourceRect = .zero + } + + self.present(picker, animated: true, completion: nil) + } + + private func handleDeniedAlbumsAuthorization() { + DispatchQueue.main.async { + self.delegate?.handleNoAlbumPermissions(picker: self) + self.handleNoAlbumPermissions?(self) + } + } + + private func handleDeniedCameraAuthorization() { + DispatchQueue.main.async { + self.delegate?.handleNoCameraPermissions(picker: self) + self.handleNoCameraPermissions?(self) + } + } + + open func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { + picker.dismiss(animated: true, completion: nil) + } + + open func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { + if let image = (info[.originalImage] as? UIImage) { + var placeholderAsset: PHObjectPlaceholder? = nil + PHPhotoLibrary.shared().performChanges({ + let newAssetRequest = PHAssetChangeRequest.creationRequestForAsset(from: image) + placeholderAsset = newAssetRequest.placeholderForCreatedAsset + }, completionHandler: { [weak self] (success, error) in + guard self?.maxCheck() == false else { return } + if success, let `self` = self, let identifier = placeholderAsset?.localIdentifier { + guard let asset = PHAsset.fetchAssets(withLocalIdentifiers: [identifier], options: nil).firstObject, + self.canSelect(phAsset: asset) else { return } + var result = TLPHAsset(asset: asset) + result.selectedOrder = self.selectedAssets.count + 1 + result.isSelectedFromCamera = true + self.selectedAssets.append(result) + self.logDelegate?.selectedPhoto(picker: self, at: 1) + } + }) + } + else if (info[.mediaType] as? String) == kUTTypeMovie as String { + var placeholderAsset: PHObjectPlaceholder? = nil + PHPhotoLibrary.shared().performChanges({ + let newAssetRequest = PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: info[.mediaURL] as! URL) + placeholderAsset = newAssetRequest?.placeholderForCreatedAsset + }) { [weak self] (sucess, error) in + guard self?.maxCheck() == false else { return } + if sucess, let `self` = self, let identifier = placeholderAsset?.localIdentifier { + guard let asset = PHAsset.fetchAssets(withLocalIdentifiers: [identifier], options: nil).firstObject, + self.canSelect(phAsset: asset) else { return } + var result = TLPHAsset(asset: asset) + result.selectedOrder = self.selectedAssets.count + 1 + result.isSelectedFromCamera = true + self.selectedAssets.append(result) + self.logDelegate?.selectedPhoto(picker: self, at: 1) + } + } + } + + picker.dismiss(animated: true, completion: nil) + } +} + +// MARK: - UICollectionView Scroll Delegate +extension TLPhotosPickerViewController { + open func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { + if !decelerate { + videoCheck() + } + } + + open func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { + videoCheck() + } + + private func videoCheck() { + func play(asset: (IndexPath,TLPHAsset)) { + if self.playRequestID?.indexPath != asset.0 { + playVideo(asset: asset.1, indexPath: asset.0) + } + } + guard self.configure.autoPlay else { return } + guard self.playRequestID == nil else { return } + let visibleIndexPaths = self.collectionView.indexPathsForVisibleItems.sorted(by: { $0.row < $1.row }) + #if swift(>=4.1) + let boundAssets = visibleIndexPaths.compactMap{ indexPath -> (IndexPath,TLPHAsset)? in + guard let asset = self.focusedCollection?.getTLAsset(at: indexPath), asset.phAsset?.mediaType == .video else { return nil } + return (indexPath,asset) + } + #else + let boundAssets = visibleIndexPaths.flatMap{ indexPath -> (IndexPath,TLPHAsset)? in + guard let asset = self.focusedCollection?.getTLAsset(at: indexPath.row),asset.phAsset?.mediaType == .video else { return nil } + return (indexPath,asset) + } + #endif + if let firstSelectedVideoAsset = (boundAssets.filter{ getSelectedAssets($0.1) != nil }.first) { + play(asset: firstSelectedVideoAsset) + }else if let firstVideoAsset = boundAssets.first { + play(asset: firstVideoAsset) + } + + } +} +// MARK: - Video & LivePhotos Control PHLivePhotoViewDelegate +extension TLPhotosPickerViewController: PHLivePhotoViewDelegate { + private func stopPlay() { + guard let playRequest = self.playRequestID else { return } + self.playRequestID = nil + guard let cell = self.collectionView.cellForItem(at: playRequest.indexPath) as? TLPhotoCollectionViewCell else { return } + cell.stopPlay() + } + + private func playVideo(asset: TLPHAsset, indexPath: IndexPath) { + stopPlay() + guard let phAsset = asset.phAsset else { return } + if asset.type == .video { + guard let cell = self.collectionView.cellForItem(at: indexPath) as? TLPhotoCollectionViewCell else { return } + let requestID = self.photoLibrary.videoAsset(asset: phAsset, completionBlock: { (playerItem, info) in + DispatchQueue.main.async { [weak self, weak cell] in + guard let `self` = self, let cell = cell, cell.player == nil else { return } + let player = AVPlayer(playerItem: playerItem) + cell.player = player + player.play() + player.isMuted = self.configure.muteAudio + } + }) + if requestID > 0 { + self.playRequestID = (indexPath,requestID) + } + }else if asset.type == .livePhoto && self.allowedLivePhotos { + guard let cell = self.collectionView.cellForItem(at: indexPath) as? TLPhotoCollectionViewCell else { return } + let requestID = self.photoLibrary.livePhotoAsset(asset: phAsset, size: self.thumbnailSize, completionBlock: { [weak cell] (livePhoto,complete) in + cell?.livePhotoView?.isHidden = false + cell?.livePhotoView?.livePhoto = livePhoto + cell?.livePhotoView?.isMuted = true + cell?.livePhotoView?.startPlayback(with: self.configure.startplayBack) + }) + if requestID > 0 { + self.playRequestID = (indexPath,requestID) + } + } + } + + public func livePhotoView(_ livePhotoView: PHLivePhotoView, didEndPlaybackWith playbackStyle: PHLivePhotoViewPlaybackStyle) { + livePhotoView.isMuted = true + livePhotoView.startPlayback(with: self.configure.startplayBack) + } + + public func livePhotoView(_ livePhotoView: PHLivePhotoView, willBeginPlaybackWith playbackStyle: PHLivePhotoViewPlaybackStyle) { + } +} + +// MARK: - PHPhotoLibraryChangeObserver +extension TLPhotosPickerViewController: PHPhotoLibraryChangeObserver { + private func getChanges(_ changeInstance: PHChange) -> PHFetchResultChangeDetails<PHAsset>? { + func isChangesCount<T>(changeDetails: PHFetchResultChangeDetails<T>?) -> Bool { + guard let changeDetails = changeDetails else { + return false + } + let before = changeDetails.fetchResultBeforeChanges.count + let after = changeDetails.fetchResultAfterChanges.count + return before != after + } + + func isAlbumsChanges() -> Bool { + guard let albums = self.photoLibrary.albums else { + return false + } + let changeDetails = changeInstance.changeDetails(for: albums) + return isChangesCount(changeDetails: changeDetails) + } + + func isCollectionsChanges() -> Bool { + for fetchResultCollection in self.photoLibrary.assetCollections { + let changeDetails = changeInstance.changeDetails(for: fetchResultCollection) + if isChangesCount(changeDetails: changeDetails) == true { + return true + } + } + return false + } + + if isAlbumsChanges() || isCollectionsChanges() { + DispatchQueue.main.async { + self.albumPopView.show(false, duration: self.configure.popup.duration) + self.photoLibrary.fetchCollection(configure: self.configure) + } + return nil + }else { + guard let changeFetchResult = self.focusedCollection?.fetchResult else { return nil } + guard let changes = changeInstance.changeDetails(for: changeFetchResult) else { return nil } + return changes + } + } + + public func photoLibraryDidChange(_ changeInstance: PHChange) { + var addIndex = 0 + if getfocusedIndex() == 0 { + addIndex = self.usedCameraButton ? 1 : 0 + } + DispatchQueue.main.async { + guard let changes = self.getChanges(changeInstance) else { + return + } + + if changes.hasIncrementalChanges, self.configure.groupByFetch == nil { + var deletedSelectedAssets = false + var order = 0 + #if swift(>=4.1) + self.selectedAssets = self.selectedAssets.enumerated().compactMap({ (offset,asset) -> TLPHAsset? in + var asset = asset + if let phAsset = asset.phAsset, changes.fetchResultAfterChanges.contains(phAsset) { + order += 1 + asset.selectedOrder = order + return asset + } + deletedSelectedAssets = true + return nil + }) + #else + self.selectedAssets = self.selectedAssets.enumerated().flatMap({ (offset,asset) -> TLPHAsset? in + var asset = asset + if let phAsset = asset.phAsset, changes.fetchResultAfterChanges.contains(phAsset) { + order += 1 + asset.selectedOrder = order + return asset + } + deletedSelectedAssets = true + return nil + }) + #endif + if deletedSelectedAssets { + self.focusedCollection?.fetchResult = changes.fetchResultAfterChanges + self.reloadCollectionView() + }else { + self.collectionView.performBatchUpdates({ [weak self] in + guard let `self` = self else { return } + self.focusedCollection?.fetchResult = changes.fetchResultAfterChanges + if let removed = changes.removedIndexes, removed.count > 0 { + self.collectionView.deleteItems(at: removed.map { IndexPath(item: $0+addIndex, section:0) }) + } + if let inserted = changes.insertedIndexes, inserted.count > 0 { + self.collectionView.insertItems(at: inserted.map { IndexPath(item: $0+addIndex, section:0) }) + } + changes.enumerateMoves { fromIndex, toIndex in + self.collectionView.moveItem(at: IndexPath(item: fromIndex, section: 0), + to: IndexPath(item: toIndex, section: 0)) + } + }, completion: { [weak self] (completed) in + guard let `self` = self else { return } + if completed { + if let changed = changes.changedIndexes, changed.count > 0 { + self.collectionView.reloadItems(at: changed.map { IndexPath(item: $0+addIndex, section:0) }) + } + } + }) + } + }else { + self.focusedCollection?.fetchResult = changes.fetchResultAfterChanges + self.reloadCollectionView() + } + if let collection = self.focusedCollection { + self.collections[self.getfocusedIndex()] = collection + self.albumPopView.tableView.reloadRows(at: [IndexPath(row: self.getfocusedIndex(), section: 0)], with: .none) + } + } + } +} + +// MARK: - UICollectionView delegate & datasource +extension TLPhotosPickerViewController: UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDataSourcePrefetching { + private func getSelectedAssets(_ asset: TLPHAsset) -> TLPHAsset? { + if let index = self.selectedAssets.firstIndex(where: { $0.phAsset == asset.phAsset }) { + return self.selectedAssets[index] + } + return nil + } + + private func orderUpdateCells() { + let visibleIndexPaths = self.collectionView.indexPathsForVisibleItems.sorted(by: { $0.row < $1.row }) + for indexPath in visibleIndexPaths { + guard let cell = self.collectionView.cellForItem(at: indexPath) as? TLPhotoCollectionViewCell else { continue } + guard let asset = self.focusedCollection?.getTLAsset(at: indexPath) else { continue } + if let selectedAsset = getSelectedAssets(asset) { + cell.selectedAsset = true + cell.orderLabel?.text = "\(selectedAsset.selectedOrder)" + }else { + cell.selectedAsset = false + } + } + } + + //Delegate + open func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + guard let collection = self.focusedCollection, let cell = self.collectionView.cellForItem(at: indexPath) as? TLPhotoCollectionViewCell else { return } + + let isCameraRow = collection.useCameraButton && indexPath.section == 0 && indexPath.row == 0 + + if isCameraRow { + selectCameraCell(cell) + return + } + + toggleSelection(for: cell, at: indexPath) + } + + open func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { + if let cell = cell as? TLPhotoCollectionViewCell { + cell.endDisplayingCell() + cell.stopPlay() + if indexPath == self.playRequestID?.indexPath { + self.playRequestID = nil + } + } + guard let requestID = self.requestIDs[indexPath] else { return } + self.requestIDs.removeValue(forKey: indexPath) + self.photoLibrary.cancelPHImageRequest(requestID: requestID) + } + + //Datasource + open func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + func makeCell(nibName: String) -> TLPhotoCollectionViewCell { + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: nibName, for: indexPath) as! TLPhotoCollectionViewCell + cell.configure = self.configure + cell.imageView?.image = self.placeholderThumbnail + cell.liveBadgeImageView?.image = nil + return cell + } + let nibName = self.configure.nibSet?.nibName ?? "TLPhotoCollectionViewCell" + var cell = makeCell(nibName: nibName) + guard let collection = self.focusedCollection else { return cell } + cell.isCameraCell = collection.useCameraButton && indexPath.section == 0 && indexPath.row == 0 + if cell.isCameraCell { + if let nibName = self.configure.cameraCellNibSet?.nibName { + cell = makeCell(nibName: nibName) + }else{ + cell.imageView?.image = self.cameraImage + } + return cell + } + guard let asset = collection.getTLAsset(at: indexPath) else { return cell } + + cell.asset = asset.phAsset + + if let selectedAsset = getSelectedAssets(asset) { + cell.selectedAsset = true + cell.orderLabel?.text = "\(selectedAsset.selectedOrder)" + }else{ + cell.selectedAsset = false + } + if asset.state == .progress { + cell.indicator?.startAnimating() + }else { + cell.indicator?.stopAnimating() + } + if let phAsset = asset.phAsset { + if self.usedPrefetch { + let options = PHImageRequestOptions() + options.deliveryMode = .opportunistic + options.resizeMode = .exact + options.isNetworkAccessAllowed = true + let requestID = self.photoLibrary.imageAsset(asset: phAsset, size: self.thumbnailSize, options: options) { [weak self, weak cell] (image,complete) in + guard let `self` = self else { return } + DispatchQueue.main.async { + if self.requestIDs[indexPath] != nil { + cell?.imageView?.image = image + cell?.update(with: phAsset) + if self.allowedVideo { + cell?.durationView?.isHidden = asset.type != .video + cell?.duration = asset.type == .video ? phAsset.duration : nil + } + if complete { + self.requestIDs.removeValue(forKey: indexPath) + } + } + } + } + if requestID > 0 { + self.requestIDs[indexPath] = requestID + } + }else { + queue.async { [weak self, weak cell] in + guard let `self` = self else { return } + let requestID = self.photoLibrary.imageAsset(asset: phAsset, size: self.thumbnailSize, completionBlock: { (image,complete) in + DispatchQueue.main.async { + if self.requestIDs[indexPath] != nil { + cell?.imageView?.image = image + cell?.update(with: phAsset) + if self.allowedVideo { + cell?.durationView?.isHidden = asset.type != .video + cell?.duration = asset.type == .video ? phAsset.duration : nil + } + if complete { + self.requestIDs.removeValue(forKey: indexPath) + } + } + } + }) + if requestID > 0 { + self.requestIDs[indexPath] = requestID + } + } + } + if self.allowedLivePhotos { + cell.liveBadgeImageView?.image = asset.type == .livePhoto ? PHLivePhotoView.livePhotoBadgeImage(options: .overContent) : nil + cell.livePhotoView?.delegate = asset.type == .livePhoto ? self : nil + } + } + cell.alpha = 0 + UIView.transition(with: cell, duration: 0.1, options: .curveEaseIn, animations: { + cell.alpha = 1 + }, completion: nil) + return cell + } + + open func numberOfSections(in collectionView: UICollectionView) -> Int { + return self.focusedCollection?.sections?.count ?? 1 + } + + open func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + guard let collection = self.focusedCollection else { + return 0 + } + return self.focusedCollection?.sections?[safe: section]?.assets.count ?? collection.count + } + + //Prefetch + open func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath]) { + if self.usedPrefetch { + queue.async { [weak self] in + guard let `self` = self, let collection = self.focusedCollection else { return } + var assets = [PHAsset]() + for indexPath in indexPaths { + if let asset = collection.getAsset(at: indexPath.row) { + assets.append(asset) + } + } + let scale = max(UIScreen.main.scale,2) + let targetSize = CGSize(width: self.thumbnailSize.width*scale, height: self.thumbnailSize.height*scale) + self.photoLibrary.imageManager.startCachingImages(for: assets, targetSize: targetSize, contentMode: .aspectFill, options: nil) + } + } + } + + open func collectionView(_ collectionView: UICollectionView, cancelPrefetchingForItemsAt indexPaths: [IndexPath]) { + if self.usedPrefetch { + for indexPath in indexPaths { + guard let requestID = self.requestIDs[indexPath] else { continue } + self.photoLibrary.cancelPHImageRequest(requestID: requestID) + self.requestIDs.removeValue(forKey: indexPath) + } + queue.async { [weak self] in + guard let `self` = self, let collection = self.focusedCollection else { return } + var assets = [PHAsset]() + for indexPath in indexPaths { + if let asset = collection.getAsset(at: indexPath.row) { + assets.append(asset) + } + } + let scale = max(UIScreen.main.scale,2) + let targetSize = CGSize(width: self.thumbnailSize.width*scale, height: self.thumbnailSize.height*scale) + self.photoLibrary.imageManager.stopCachingImages(for: assets, targetSize: targetSize, contentMode: .aspectFill, options: nil) + } + } + } + + public func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { + guard let cell = cell as? TLPhotoCollectionViewCell else { + return + } + cell.willDisplayCell() + if self.usedPrefetch, let collection = self.focusedCollection, let asset = collection.getTLAsset(at: indexPath) { + if let selectedAsset = getSelectedAssets(asset) { + cell.selectedAsset = true + cell.orderLabel?.text = "\(selectedAsset.selectedOrder)" + }else{ + cell.selectedAsset = false + } + } + } +} + +// MARK: - CustomDataSources for supplementary view +extension TLPhotosPickerViewController: UICollectionViewDelegateFlowLayout { + open func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { + guard let identifier = self.customDataSouces?.supplementIdentifier(kind: kind) else { + return UICollectionReusableView() + } + let reuseView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, + withReuseIdentifier: identifier, + for: indexPath) + if let section = self.focusedCollection?.sections?[safe: indexPath.section] { + self.customDataSouces?.configure(supplement: reuseView, section: section) + } + return reuseView + } + + open func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize { + if let sections = self.focusedCollection?.sections?[safe: section], sections.title != "camera" { + return self.customDataSouces?.headerReferenceSize() ?? CGSize.zero + } + return CGSize.zero + } + + open func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize { + if let sections = self.focusedCollection?.sections?[safe: section], sections.title != "camera" { + return self.customDataSouces?.footerReferenceSize() ?? CGSize.zero + } + return CGSize.zero + } +} + +// MARK: - UITableView datasource & delegate +extension TLPhotosPickerViewController: UITableViewDelegate, UITableViewDataSource { + //delegate + open func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + self.logDelegate?.selectedAlbum(picker: self, title: self.collections[indexPath.row].title, at: indexPath.row) + self.focused(collection: self.collections[indexPath.row]) + } + + //datasource + open func numberOfSections(in tableView: UITableView) -> Int { + return 1 + } + + open func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return self.collections.count + } + + open func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "TLCollectionTableViewCell", for: indexPath) as! TLCollectionTableViewCell + let collection = self.collections[indexPath.row] + cell.titleLabel.text = collection.title + cell.subTitleLabel.text = "\(collection.fetchResult?.count ?? 0)" + if let phAsset = collection.getAsset(at: collection.useCameraButton ? 1 : 0) { + let scale = UIScreen.main.scale + let size = CGSize(width: 80*scale, height: 80*scale) + self.photoLibrary.imageAsset(asset: phAsset, size: size, completionBlock: { (image,complete) in + DispatchQueue.main.async { + if let cell = tableView.cellForRow(at: indexPath) as? TLCollectionTableViewCell { + cell.thumbImageView.image = image + } + } + }) + } + cell.accessoryType = getfocusedIndex() == indexPath.row ? .checkmark : .none + cell.selectionStyle = .none + return cell + } +} + +// MARK: - UIViewControllerPreviewingDelegate +extension TLPhotosPickerViewController: UIViewControllerPreviewingDelegate { + public func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { + guard self.previewAtForceTouch == true else { return nil } + guard let pressingIndexPath = collectionView.indexPathForItem(at: location) else { return nil } + guard let pressingCell = collectionView.cellForItem(at: pressingIndexPath) as? TLPhotoCollectionViewCell else { return nil } + + previewingContext.sourceRect = pressingCell.frame + let previewController = TLAssetPreviewViewController() + previewController.asset = pressingCell.asset + + return previewController + } + + public func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {} + + @available(iOS 13.0, *) + public func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? { + guard self.previewAtForceTouch == true else { return nil } + guard let cell = collectionView.cellForItem(at: indexPath) as? TLPhotoCollectionViewCell else { return nil } + + return UIContextMenuConfiguration(identifier: nil, previewProvider: { + let previewController = TLAssetPreviewViewController() + previewController.asset = cell.asset + return previewController + + }, actionProvider: { [weak self] suggestedActions in + guard let self = self else { return nil } + let isSelected = cell.selectedAsset + let title = isSelected ? self.configure.deselectMessage : self.configure.selectMessage + let imageName = isSelected ? "checkmark.circle" : "circle" + let toggleSelection = UIAction(title: title, image: UIImage(systemName: imageName)) { [weak self] action in + self?.toggleSelection(for: cell, at: indexPath) + } + + return UIMenu(title: "", children: [toggleSelection]) + } + ) + } +} + +extension TLPhotosPickerViewController { + func selectCameraCell(_ cell: TLPhotoCollectionViewCell) { + if Platform.isSimulator { + print("not supported by the simulator.") + } else { + if configure.cameraCellNibSet?.nibName != nil { + cell.selectedCell() + } else { + showCameraIfAuthorized() + } + logDelegate?.selectedCameraCell(picker: self) + } + } + + func toggleSelection(for cell: TLPhotoCollectionViewCell, at indexPath: IndexPath) { + guard let collection = focusedCollection, var asset = collection.getTLAsset(at: indexPath), let phAsset = asset.phAsset else { return } + + cell.popScaleAnim() + + if let index = selectedAssets.firstIndex(where: { $0.phAsset == asset.phAsset }) { + //deselect + logDelegate?.deselectedPhoto(picker: self, at: indexPath.row) + selectedAssets.remove(at: index) + #if swift(>=4.1) + selectedAssets = selectedAssets.enumerated().compactMap({ (offset,asset) -> TLPHAsset? in + var asset = asset + asset.selectedOrder = offset + 1 + return asset + }) + #else + selectedAssets = selectedAssets.enumerated().flatMap({ (offset,asset) -> TLPHAsset? in + var asset = asset + asset.selectedOrder = offset + 1 + return asset + }) + #endif + cell.selectedAsset = false + cell.stopPlay() + orderUpdateCells() + if playRequestID?.indexPath == indexPath { + stopPlay() + } + } else { + //select + logDelegate?.selectedPhoto(picker: self, at: indexPath.row) + guard !maxCheck(), canSelect(phAsset: phAsset) else { return } + + asset.selectedOrder = selectedAssets.count + 1 + selectedAssets.append(asset) + cell.selectedAsset = true + cell.orderLabel?.text = "\(asset.selectedOrder)" + + if asset.type != .photo, configure.autoPlay { + playVideo(asset: asset, indexPath: indexPath) + } + } + + } +} + +extension TLPhotosPickerViewController: UINavigationBarDelegate { + public func position(for bar: UIBarPositioning) -> UIBarPosition { + return .topAttached + } +} + +extension Array where Element == PopupConfigure { + var duration: TimeInterval { + var result: TimeInterval = 0.1 + forEach { + if case let .animation(duration) = $0 { + result = duration + } + } + return result + } +} + +extension UIImage { + public func colorMask(color:UIColor) -> UIImage { + var result: UIImage? + let rect = CGRect(x:0, y:0, width:size.width, height:size.height) + UIGraphicsBeginImageContextWithOptions(rect.size, false, scale) + if let c = UIGraphicsGetCurrentContext() { + self.draw(in: rect) + c.setFillColor(color.cgColor) + c.setBlendMode(.sourceAtop) + c.fill(rect) + result = UIGraphicsGetImageFromCurrentImageContext() + } + UIGraphicsEndImageContext() + return result ?? self + } +} diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotosPickerViewController.xib b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotosPickerViewController.xib new file mode 100644 index 0000000..d98af0c --- /dev/null +++ b/Pods/TLPhotoPicker/TLPhotoPicker/Classes/TLPhotosPickerViewController.xib @@ -0,0 +1,232 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="17156" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> + <device id="retina4_7" orientation="portrait" appearance="light"/> + <dependencies> + <deployment identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17125"/> + <capability name="Image references" minToolsVersion="11.0"/> + <capability name="Safe area layout guides" minToolsVersion="9.0"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + </dependencies> + <objects> + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="TLPhotosPickerViewController" customModule="TLPhotoPicker"> + <connections> + <outlet property="albumPopView" destination="Jcn-hC-Umh" id="c3n-m9-wfd"/> + <outlet property="cancelButton" destination="sqJ-Z7-zxj" id="J6u-hz-ePK"/> + <outlet property="collectionView" destination="4gR-Bn-quP" id="ZOF-qU-cpd"/> + <outlet property="customNavItem" destination="5CU-MZ-p1K" id="ih7-d3-nco"/> + <outlet property="doneButton" destination="daA-Ag-vVv" id="P53-fy-Sbh"/> + <outlet property="emptyImageView" destination="YDZ-o1-AXT" id="TVN-0v-aQc"/> + <outlet property="emptyMessageLabel" destination="7qj-q4-rHC" id="Bcp-Hu-lEY"/> + <outlet property="emptyView" destination="HPm-Vc-F86" id="4FT-XL-9ql"/> + <outlet property="indicator" destination="AEv-G6-dRI" id="coA-3n-07e"/> + <outlet property="navigationBar" destination="X8O-Gg-slz" id="Sp9-g1-r4y"/> + <outlet property="navigationBarTopConstraint" destination="IKp-hS-tTy" id="MFH-eP-0tb"/> + <outlet property="photosButton" destination="spQ-SO-lth" id="Vy3-rM-vY9"/> + <outlet property="popArrowImageView" destination="5zn-je-qLx" id="6k9-cH-vcU"/> + <outlet property="subTitleArrowImageView" destination="b7w-7R-rco" id="IjY-7S-Zz1"/> + <outlet property="subTitleLabel" destination="DON-iU-Cox" id="ZyB-O9-EcR"/> + <outlet property="subTitleStackView" destination="kgt-Cn-AXg" id="Vcc-hP-iqe"/> + <outlet property="titleLabel" destination="xuG-bc-Oq9" id="2o0-aN-au6"/> + <outlet property="titleView" destination="VAz-Py-dsa" id="deY-US-9Jh"/> + <outlet property="view" destination="Zyk-dI-msE" id="dxK-gh-unF"/> + </connections> + </placeholder> + <barButtonItem title="photo" id="spQ-SO-lth"> + <imageReference key="image" image="photo" catalog="system" symbolScale="small"/> + <connections> + <action selector="limitButtonTap" destination="-1" id="VRo-CG-wO6"/> + </connections> + </barButtonItem> + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> + <view contentMode="scaleToFill" id="Zyk-dI-msE"> + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <navigationBar contentMode="scaleToFill" translucent="NO" translatesAutoresizingMaskIntoConstraints="NO" id="X8O-Gg-slz"> + <rect key="frame" x="0.0" y="0.0" width="375" height="44"/> + <items> + <navigationItem id="5CU-MZ-p1K"> + <nil key="title"/> + <barButtonItem key="leftBarButtonItem" title="Cancel" id="sqJ-Z7-zxj"> + <connections> + <action selector="cancelButtonTap" destination="-1" id="dm0-Ur-I5r"/> + </connections> + </barButtonItem> + <view key="titleView" contentMode="scaleToFill" id="VAz-Py-dsa"> + <rect key="frame" x="100.5" y="0.0" width="174.5" height="44"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <subviews> + <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="Ql8-7f-9Uk"> + <rect key="frame" x="0.0" y="0.0" width="174.5" height="44"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xuG-bc-Oq9"> + <rect key="frame" x="66.5" y="0.0" width="41.5" height="19.5"/> + <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <stackView opaque="NO" contentMode="scaleToFill" alignment="center" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="kgt-Cn-AXg"> + <rect key="frame" x="65" y="19.5" width="44.5" height="24.5"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="DON-iU-Cox"> + <rect key="frame" x="0.0" y="5.5" width="29.5" height="13.5"/> + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="11"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="b7w-7R-rco"> + <rect key="frame" x="34.5" y="7.5" width="10" height="10"/> + <constraints> + <constraint firstAttribute="width" priority="999" constant="10" id="7bM-Da-Q8A"/> + <constraint firstAttribute="height" priority="999" constant="10" id="OHz-gp-CQp"/> + </constraints> + </imageView> + </subviews> + </stackView> + </subviews> + </stackView> + </subviews> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + <constraints> + <constraint firstAttribute="trailing" secondItem="Ql8-7f-9Uk" secondAttribute="trailing" id="Vv5-au-j7y"/> + <constraint firstAttribute="bottom" secondItem="Ql8-7f-9Uk" secondAttribute="bottom" id="XNk-yU-iZJ"/> + <constraint firstItem="Ql8-7f-9Uk" firstAttribute="top" secondItem="VAz-Py-dsa" secondAttribute="top" id="h9o-f1-oRa"/> + <constraint firstItem="Ql8-7f-9Uk" firstAttribute="leading" secondItem="VAz-Py-dsa" secondAttribute="leading" id="j8K-5o-bAh"/> + </constraints> + </view> + <barButtonItem key="rightBarButtonItem" title="Done" id="daA-Ag-vVv"> + <connections> + <action selector="doneButtonTap" destination="-1" id="BzF-rn-rn4"/> + </connections> + </barButtonItem> + </navigationItem> + </items> + </navigationBar> + <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="4gR-Bn-quP"> + <rect key="frame" x="0.0" y="44" width="375" height="623"/> + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="5" minimumInteritemSpacing="5" id="VDa-Pp-VBq"> + <size key="itemSize" width="50" height="50"/> + <size key="headerReferenceSize" width="0.0" height="0.0"/> + <size key="footerReferenceSize" width="0.0" height="0.0"/> + <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/> + </collectionViewFlowLayout> + <connections> + <outlet property="dataSource" destination="-1" id="6fE-SF-z6F"/> + <outlet property="delegate" destination="-1" id="pjZ-sM-fyY"/> + </connections> + </collectionView> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="HPm-Vc-F86"> + <rect key="frame" x="0.0" y="44" width="375" height="623"/> + <subviews> + <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="gi6-Sw-3Zf"> + <rect key="frame" x="137.5" y="249" width="100" height="125.5"/> + <subviews> + <imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="YDZ-o1-AXT"> + <rect key="frame" x="0.0" y="0.0" width="100" height="100"/> + <constraints> + <constraint firstAttribute="width" priority="999" constant="100" id="VUj-VB-7Kr"/> + <constraint firstAttribute="height" priority="999" constant="100" id="jBo-WN-gZr"/> + </constraints> + </imageView> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7qj-q4-rHC"> + <rect key="frame" x="29.5" y="105" width="41.5" height="20.5"/> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + </subviews> + </stackView> + </subviews> + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <constraints> + <constraint firstItem="gi6-Sw-3Zf" firstAttribute="centerX" secondItem="HPm-Vc-F86" secondAttribute="centerX" id="FpA-96-esN"/> + <constraint firstItem="gi6-Sw-3Zf" firstAttribute="centerY" secondItem="HPm-Vc-F86" secondAttribute="centerY" id="L0c-BG-65l"/> + </constraints> + </view> + <activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" hidesWhenStopped="YES" style="gray" translatesAutoresizingMaskIntoConstraints="NO" id="AEv-G6-dRI"> + <rect key="frame" x="177.5" y="323.5" width="20" height="20"/> + </activityIndicatorView> + <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Jcn-hC-Umh" customClass="TLAlbumPopView" customModule="TLPhotoPicker"> + <rect key="frame" x="0.0" y="44" width="375" height="623"/> + <subviews> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GKD-We-AdT"> + <rect key="frame" x="0.0" y="0.0" width="375" height="623"/> + <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.29999999999999999" colorSpace="calibratedRGB"/> + </view> + <view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eL2-gJ-b87"> + <rect key="frame" x="1" y="17" width="373" height="130"/> + <subviews> + <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" style="plain" separatorStyle="default" rowHeight="75" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="grw-Nk-Sxr"> + <rect key="frame" x="0.0" y="0.0" width="373" height="130"/> + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + </tableView> + </subviews> + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + <constraints> + <constraint firstItem="grw-Nk-Sxr" firstAttribute="top" secondItem="eL2-gJ-b87" secondAttribute="top" id="DAx-an-6Qt"/> + <constraint firstAttribute="height" constant="130" id="cet-yf-3jU"/> + <constraint firstAttribute="trailing" secondItem="grw-Nk-Sxr" secondAttribute="trailing" id="nM5-IG-MPJ"/> + <constraint firstItem="grw-Nk-Sxr" firstAttribute="leading" secondItem="eL2-gJ-b87" secondAttribute="leading" id="o4b-cS-L3T"/> + <constraint firstAttribute="bottom" secondItem="grw-Nk-Sxr" secondAttribute="bottom" id="sPK-1G-qLo"/> + </constraints> + </view> + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="5zn-je-qLx"> + <rect key="frame" x="180.5" y="10" width="14" height="7"/> + <constraints> + <constraint firstAttribute="height" constant="7" id="eZN-nB-EHu"/> + <constraint firstAttribute="width" constant="14" id="hWo-ji-iBX"/> + </constraints> + </imageView> + </subviews> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + <constraints> + <constraint firstItem="GKD-We-AdT" firstAttribute="top" secondItem="Jcn-hC-Umh" secondAttribute="top" id="83h-bg-tAJ"/> + <constraint firstAttribute="trailing" secondItem="eL2-gJ-b87" secondAttribute="trailing" constant="1" id="IMh-Wh-897"/> + <constraint firstItem="5zn-je-qLx" firstAttribute="centerX" secondItem="Jcn-hC-Umh" secondAttribute="centerX" id="LpE-mT-MxA"/> + <constraint firstItem="eL2-gJ-b87" firstAttribute="top" secondItem="Jcn-hC-Umh" secondAttribute="top" constant="17" id="XtI-9R-CFm"/> + <constraint firstItem="GKD-We-AdT" firstAttribute="leading" secondItem="Jcn-hC-Umh" secondAttribute="leading" id="krq-3L-sxU"/> + <constraint firstItem="eL2-gJ-b87" firstAttribute="top" secondItem="5zn-je-qLx" secondAttribute="bottom" id="tM4-Tb-JsI"/> + <constraint firstItem="eL2-gJ-b87" firstAttribute="leading" secondItem="Jcn-hC-Umh" secondAttribute="leading" constant="1" id="v5O-lt-eKe"/> + <constraint firstAttribute="bottom" secondItem="GKD-We-AdT" secondAttribute="bottom" id="x4Q-bm-MrY"/> + <constraint firstAttribute="trailing" secondItem="GKD-We-AdT" secondAttribute="trailing" id="xdF-2b-pOS"/> + </constraints> + <connections> + <outlet property="bgView" destination="GKD-We-AdT" id="ymr-tp-YBW"/> + <outlet property="popupView" destination="eL2-gJ-b87" id="xgf-xj-Rd4"/> + <outlet property="popupViewHeight" destination="cet-yf-3jU" id="OS3-MZ-s9c"/> + <outlet property="tableView" destination="grw-Nk-Sxr" id="Y3k-8m-iJp"/> + </connections> + </view> + </subviews> + <viewLayoutGuide key="safeArea" id="HLR-WT-D3I"/> + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + <constraints> + <constraint firstItem="HPm-Vc-F86" firstAttribute="bottom" secondItem="HLR-WT-D3I" secondAttribute="bottom" id="0AS-35-SWm"/> + <constraint firstItem="AEv-G6-dRI" firstAttribute="centerX" secondItem="Zyk-dI-msE" secondAttribute="centerX" id="44C-fd-MVc"/> + <constraint firstItem="X8O-Gg-slz" firstAttribute="leading" secondItem="Zyk-dI-msE" secondAttribute="leading" id="4Ud-fp-qD2"/> + <constraint firstItem="4gR-Bn-quP" firstAttribute="top" secondItem="X8O-Gg-slz" secondAttribute="bottom" id="CZx-xl-GLa"/> + <constraint firstItem="X8O-Gg-slz" firstAttribute="top" secondItem="HLR-WT-D3I" secondAttribute="top" id="IKp-hS-tTy"/> + <constraint firstItem="Jcn-hC-Umh" firstAttribute="top" secondItem="X8O-Gg-slz" secondAttribute="bottom" id="KdD-nT-6tf"/> + <constraint firstItem="HPm-Vc-F86" firstAttribute="leading" secondItem="HLR-WT-D3I" secondAttribute="leading" id="M3L-CU-HdQ"/> + <constraint firstAttribute="trailing" secondItem="4gR-Bn-quP" secondAttribute="trailing" id="M6b-2G-2m1"/> + <constraint firstAttribute="trailing" secondItem="Jcn-hC-Umh" secondAttribute="trailing" id="Njh-ZO-lnq"/> + <constraint firstAttribute="bottom" secondItem="Jcn-hC-Umh" secondAttribute="bottom" id="NxH-d8-b65"/> + <constraint firstItem="HPm-Vc-F86" firstAttribute="top" secondItem="X8O-Gg-slz" secondAttribute="bottom" id="YyG-QW-0ZP"/> + <constraint firstItem="AEv-G6-dRI" firstAttribute="centerY" secondItem="Zyk-dI-msE" secondAttribute="centerY" id="aLU-u9-ALA"/> + <constraint firstItem="Jcn-hC-Umh" firstAttribute="leading" secondItem="Zyk-dI-msE" secondAttribute="leading" id="aY7-Ml-cd3"/> + <constraint firstItem="HPm-Vc-F86" firstAttribute="trailing" secondItem="HLR-WT-D3I" secondAttribute="trailing" id="aoA-8G-xDA"/> + <constraint firstItem="4gR-Bn-quP" firstAttribute="leading" secondItem="Zyk-dI-msE" secondAttribute="leading" id="kb7-vy-yTu"/> + <constraint firstItem="4gR-Bn-quP" firstAttribute="bottom" secondItem="HLR-WT-D3I" secondAttribute="bottom" id="qqE-w2-Tsc"/> + <constraint firstAttribute="trailing" secondItem="X8O-Gg-slz" secondAttribute="trailing" id="yWV-L2-0f4"/> + </constraints> + <point key="canvasLocation" x="33.5" y="53.5"/> + </view> + </objects> + <resources> + <image name="arrow.png" width="18" height="18"/> + <image name="photo" catalog="system" width="128" height="93"/> + <image name="pop_arrow.png" width="41" height="20"/> + </resources> +</document> diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/arrow.png b/Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..94910cf0960045e5764820649279ea9a89858425 GIT binary patch literal 1105 zcmaJ=TWkzb7(Ut(ZMJcF(6l5@W>tvp&Sft(ldg8nwrpaWX1nNvhtAHNb|>vz%$(ZU zB1+R*BrXXNp77vF1o6ZJi6)5f;F2JM;K3V>Y8oM&sqXS%O>*Y^|H=1#|K<GWP*>-s z+M0$M06=YWb0S6drQTY&fc&>TI=Y=~^|-wUcbk1UC))_bRWpNNQkVNt3dw4I=Y7-y zK&4+x_uw9Bi=dc#Q1&oESGNcofR<L*l9d63VFvYUMvVG&^A-g)HAZcZNQ`8OD64HA zwo&(RXIdE^P<WMU-2hu$fe7db%h1&a4M%We)U2*RZ10$+;4B0W#Him%^+;V%G;IVU z!AL-1I2JbZK{gWRS+)ss3>%_ZhUWMH%L?IUfsMksk0Q}*wNFSTI_6>#FGgiCwgj5a z<#NGXC}`UKG|Tfm&2Tiw1qdSG<P9vl0mJbZ6%xo%Y|X-&X+Td=&X_|uMv+W^m!MlE zS;LuY6KNRj$`;KA8Ly-wP?G)+)%6nE!7217-+u}_>AZ#L6mrZVTOk+M=l4Qcf@mWd zn|9hX2a8?o%9_}8vZe(^5w4MBMKe5q?JPl(grwnM*-%h25u=DiP}5W)%=2uNXF}^m zVzBL@c(W*WFzZ9{Fwb#JC|cwuOl3$%1}<{dKiqIxt~U$1MItAVt?fc;hi&R`wq`*q zp9@=7Z;q>$&xI??rAachce8)pbn%Fck7t(VmN=!!M+O;po6L1*_2-M^O-v*c@wEFg z^Zn<~*2)O*Kl5?X=*7eFExvRG9PI;>`)VeA$K(07J%x(9E2_@S<383cJ_sg7&X)%h z=V7Q<o@yxk7@1jKJwEdEoA~uY)pR2~I{NL*;+aKTcUP~z-PG7PcImCKCJC-q&Ko^D z;tJQmjrf(@Pv&Q&72}sG-wkFSFS+;PYTKUrBd^eo*ZtILc!H{0HGS&o$-OHJch22^ zUq_77nPnCGhe6@XiRZo#4HMwu#;FI_)9a3b3Ln@>ZJ2yhb9l^q<jMBV#N~~>2Yvz1 C>1Ja9 literal 0 HcmV?d00001 diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/camera@3x.png b/Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/camera@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..2c7ebe0c7cd6f9ccd69effbf7ce4e2e93da3b0da GIT binary patch literal 3079 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 P`M4><%J_+)Ys`NDI~1p? literal 0 HcmV?d00001 diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/insertPhotoMaterial@3x.png b/Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/insertPhotoMaterial@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..19a8656929646848f76a5e18066902823ea0e839 GIT binary patch literal 1672 zcmd^==|9v70LFhaV`NMS%NRKl;}|(7SE6y7Msh834zkEK61ho^9Jw~v5>YwA$jzb# zX@zx7V-|yC*~S$a!;-Q3JNCu%e4iK3+voG7Sy`I#aEo#S0KkJYH?}!t#1C<Cp1RI$ z&8bs>LT$_p0n(Tl0{}P;amEIA5unYd8F{6e=S+IrwZexjQU9K}k5a<(!b-I#Jsj-D zFR46mW70`e7qJP45=l;pvt7|mK`KVM9a6n8hQ7=+uKAEVhNn;_7RCrQ=exP?p%!?b zQj*$$jX8NDobKn~1=UYp{}nhHT?Htf@mx5iz2e)hLBLk9)MTZ~26b?DdAR%af!Yh5 z1Hn{ZTQ4YKFVK8vN6-ErQB~qw$$fOFCN$!k8@4@R1~-!b)ET5LkaYa;d{eeJu3T}q zf-G{)gls&b_H|%zjs-4I6@Qkc*wK)t`!&@R?ou|RUe4VERmIr-AV`&xeM&l{NM^T| zj0dq`no$}+mZH-YJ8ZU3s#OCX96%)&AqfAw_~~BFciBlliv)@lXump#ZJ}H5>IYgN z>0Lwa<IPW!nbGD0DjCV%G+FZ8&Uevt_K}^~5I>8Bxh$_ho-;l<m%j6GblSJ?`wRcm z%6bHw+vEVWs^GOKX{#GGBTF8U@qNkcz?-hKqieAvvEZwXaT`7`QbFcj=D7b#!I*VG zIWUfgw>IRe_aRogF`zQjZ)yQ?MGG3;`4=*me{Yrm2~M=e&_UrU@@sM8fm+ao^Mp#9 zMB(>EN*iA$<XC@%^w9fLGyGW`MSf&$k_@_GzB-WSl`==E;}XNRdrOcSL1&^by(yV@ z4n9*kacA?n4ySfo+@gqlSBh>cA;yorJlESwc=s4<6n^=zUsUiYI`LIg9tJ6kwSlx1 z+iot>A)jjfu<QJSJSYfaOi#<!d%a2SW+5hQc}s^z@^XT#^12IZaVn#d(w7}b*8QIG zE^FWG!h&ET1hpEcx-WK;z2T#?Y!?ISY#5gWtxA_R))XDDNREEDk}~vfdR9r@G!6NV zU&AxaN6S!=9BM#q;dTqWFg!oI*2vrI_|lm$>Pqn)YzwNHY!pu5-#5R9lru7w6Tmc7 z{S<j8#LHnb+aEH9Qr7xVX6D9tc4yP=c?syQMjcGMqqBCPTJJaxcFx(9cZTE)C&EIO zrGwYEYjKj=M(Jt!E-k-c3M1$)aH2v8QvX;?U<Bo5?>8<T%P2Kt4VHv9ESQnh#GD~S zzmP~K1UXriS<oMFD_FR@zH$%E(^=4Y_F7dU!pVGZNaKNsfzM<~qs*t-&jLLYLXKXZ zNd;3aLa_?g0z`NSe@2p;lnp8eNoqggbA^W~-IXqglC;2IQ7>+CCz;heqS{)ut@7n` zAr~8jEau%Sq0#{XCbfGXtR<SpIJ6F3{(fm3L^eSqg*qRgc%;|GA}z@rKkF>A=)gD* z!B}XwT(Br32aUptmdtapef9^O-)^11u1xkXpQi(b^~zI;p*_N}xey}t!*0DgD^~sR z^FZI4HF;*M^-Wuly>3}%s=k0WxM+#XKqxk)J`<d(p${&4hIVdsFqK63posJHl5ZCj zK#1d2h0UwUym&j{&*Dgn=H7&^iK7>awM0Q^*44@qJ4eI~TWkV_dF6CO`r^&4+;HM= zZq<rP<Z7b=dk?_B^5TsaOg<Y;_UX@eqk*<7y2hCPYmd^oV=AD#jH=OUa5;#+wya&A z$6BEpZ9Js09~-(;?E~B80ZIj5)%NS=75RLfWN>C?iYXrc{;$_Z`5%d##|#|Ek$1rT z=rHYmcR&DpygSNfEh%iNZghv@3>R@1QHQBtFQp_z?}*bh2z0P|TD(*QBCkFk>iZ<d z1Jh1-TtOu;$9q1~GLCEP%khb|GZ!LZ#CvBZm?N!Uj&dBc`)&;lqtRGAYA4A%F<s~E cw9jVz_8Z-sdYhNBPOk;PnOGW=3<-(<0hpK!fB*mh literal 0 HcmV?d00001 diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/pop_arrow.png b/Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/pop_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..220d39e6ace20809f783efcaeb74ee5adc00fd74 GIT binary patch literal 1496 zcmV;}1t<E6P)<h;3K|Lk000e1NJLTq001cf000yS1^@s65QG$k00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru;RG5D3LQ$>WV`?X03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00lfrL_t(Y$IX@9Z(LUu z#ee7AbMJh{ADJ<pM6sRV8RH67A&FYk@r-LHmB<XOD$yo!Byj&okO~h-MS}8}2CGt9 z0z5<|Q8IQCkMH-Kvw4`Yn-&r%5a@b3I?~Zzd#%0pQLkM%Pqk9zU^rxde~-h%Lp)<> zHk;&G&b@p0P+Bt@jmXlBN~OZ7)2Go|^T*FWM;XQW^FN?>wa4bxWxlt%Du4ar3-z0i zKH|e){G23C2&0Gx4;~Q35pkR_vLlpID5Ve)taHpvPtj~PiKB?8PY)Olha^c%xm?CX zQ3QasBaCP8v`3z03<d+rr84Dm8KpIG6q9E;);f|n!5EKXu}E#MM!UVv8|`&2Ub-Y& zYgSfPWO{m9rAf@~Pd?!<fBG}kN(Cp5G|j*QfQTS~QsBgqBnerTqZDXQgHkvV%#+7Y zh{6b^6r<4y>nzq<_67r@QW;|mZe+>x9OoQamh$-VKAvYdb7p~dr_E2^dynPirf97J zP+C)~*X8{i+iGfhhA52Kf4oncrZ_iYIDrySN|R+d4<9~6E6vD`$g>=09a)xP4x<pl z5Tz8_)2PYgEX_!h4A1irzU(~DbF}tYS~|t%))qhNUuF5b%W~qxiLVs*eV_UHd3kMZ zO{H1NFbp{eL!KTSe3c|1GOo9m?T<%*$t93wImYum0182X?+1)VIZ+s4jKTMPoRhId z3XCxXK|rlmr@OI1|Lq^s-Pkx*@axc8v%0z}Cue6>6h=64L{UVRWq6Y}d7fiO;~7OM zd}9z1oO3wm05CH%vm{AExm>1LDl!}nF?mj<TA@@Z6Gb7ym|&??VsUAS3l}f4^T7u! zH=EBT_$<*{y)HMlw^g}PA<uK}-n~l@1bAArx3`D27AJxSOixdvJ&!01$+C<>v53j? z4CfqLYqZiJAb@XtjPbCOj!LBxt(6ttXt#NDbCcy}Q>xV}{|bEHXTH&pPN$<pgkSyg zLk5EZ!{Na*&5Y9?6bg8rCXOOR1m74;6vc=LQ5@qY>p(;ZqX_3fYmZX7Os!t$;-yP$ zUA|1G+x@2s{zL0uc|~SVo>Xa?@cWNH=F?A~V68o#PK6>(Qas}!GOq2M!&qy_q{5IS zNf2>3C&Y0~mgXp>ICt(G>zxkoU%N)L)%wN+pCwwa)#Tds>#AI-a4;M)7!1g=>^PXi z;SfF9%g#BhwV0#i=J|*$ACuBrBhF!rW^r+mH@CLv_4_nit-nk0H-#Sr%+EKZ-CkGD zIz$|w-T911j~*c+q**!%wj2c<BS$BtK-6(Zg<_FL;}q-NE?0X!Ha9o_Z3Ul~`q|l8 zbr>EZN)g5pNgQJ*i9X&>M<f*rrN&b+?m$>rSfJb8;AcBKwEhE&Uub>3CO5Zls%o{0 z%}4C+?h=L}D2~+xFca-iGA0-V0Sk+ZT)BLOUcb*ut0gC<rg$0f{a~E>^>ONrG2FRx zhrwVlHulJFP{>5RVxho%qd~XZrPuGXxwZ9QSMWut55o|ETeofz$MKiT+<FF)@f@C7 zI?G14!%ug1Sa}H+zi{E#YO=k3Q&lQe@_fYZ?jJZJZLD(?3I!Gy7I^E*75cp%E3KAH zy(EjDhad=OG#b+FbkxxYFt+{?X7=<MzB5;6tJC4_evi%0`u|M9=UIQUR#RD;QYZx6 zzI_|>{a0V*^$Qoc{_Z<0pI!RD5&XLK*KgcVGcz;zzK?1DaE-S*9hT27Nwrep+W_D9 ynVXxF*VopR6M<j<_IFro<=Y5rt=zwVpT7aQh%Dd6$sb<;0000<MNUMnLSTYbb+2gv literal 0 HcmV?d00001 diff --git a/Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/video.png b/Pods/TLPhotoPicker/TLPhotoPicker/TLPhotoPickerController.bundle/video.png new file mode 100644 index 0000000000000000000000000000000000000000..68268fb150855c6c452665b7b72c4f1ea6f91570 GIT binary patch literal 834 zcmV-I1HJr-P)<h;3K|Lk000e1NJLTq001`t001`#1^@s6sN2#;00006VoOIv00000 z008+zyMF)x010qNS#tmY3ljhU3ljkVnw%H_000McNliru;ROc?2_@0&fzJQ{03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00O2-L_t(&-eX`G1*2dT zjDk@x3P!=u1{@sh3>=&s3_LvC48A@-?7MdD?E3xt_ly5D21kz`U7L^)FUil($H2|a z#lX$YMH|n_%E~ZIoic^>{{VoE8#gK%7#J|{@bJ*abA5fi%>M@vtX#R0Pf}8n`ku42 zv|#u@2tasvI3u<E!~|m`B_){*hP)pe8=FdXL$6%9vS2X8+{cd}XOimn0|ySI|M~Oh z(UT`n*3O+fw;4mhix)5U{U0QNSWk6#cVjIhHf-3Ci=y!J=g*ghlINyQo5qey|EpK8 z4xxMQ!cg(t^y$+DNHXK|=g;Scg6EbmUoJ_q8J|CYJ~P-ow{g=ZO;XHYLDKtgFgFkP z?%iwd<m7aM6g|kE`#)GccJ$~`Un?uCO=MT%gEi)k9z7aQj>iVQ=N8OgkZEOQwSeO0 z*I-PRPEL+CRB2ld#+Z|plZzU*o}*f?U|4&Ok&$uGdG7J!$9slt%<bR5{~T2e`ts$= zj=|XcI)3a}Ik{#G>Z*W&fq}u&%Bu6k@#DF}wm`A8vYK+>z=7ytTUt6gIxgF`b*l@x zd2Z8C=+CWQxzdzmGroNJvSFz7#OKbMrAeyi)(xdGlzFpf$>Y-h;lqbb=%ZiFLv8eH z=EMm?*!1t%yvY+q;ngcwat4FPzJ2|=ij=aVC^d!m#F4`r|Ni~^>-p2CXI3s=I3GjN z{5iAP27~AJZQtfZ^|s}z#Y=t-h9ZC6@@4y|?zwB1E;7uVJc)52J+^h-TEA0A4pZM? z1wlRrBUL4a`7@>u$ZXH9Et`uy&CM9KM1^SKIerEOL4F1m5g~@Spg@KLd-jC?{rmSl ztvz+-`0*7bX{pM(65<S+B0>zBB0>zKU=)mkQ7{Td!6+C7qhLq^0O#0}D>q`P9{>OV M07*qoM6N<$g4GI$?EnA( literal 0 HcmV?d00001 diff --git a/Pods/Target Support Files/FSPagerView/FSPagerView-Info.plist b/Pods/Target Support Files/FSPagerView/FSPagerView-Info.plist deleted file mode 100644 index 582bd8b..0000000 --- a/Pods/Target Support Files/FSPagerView/FSPagerView-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>${PODS_DEVELOPMENT_LANGUAGE}</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>0.8.3</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/Pods/Target Support Files/FSPagerView/FSPagerView-dummy.m b/Pods/Target Support Files/FSPagerView/FSPagerView-dummy.m deleted file mode 100644 index aea684a..0000000 --- a/Pods/Target Support Files/FSPagerView/FSPagerView-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_FSPagerView : NSObject -@end -@implementation PodsDummy_FSPagerView -@end diff --git a/Pods/Target Support Files/FSPagerView/FSPagerView-prefix.pch b/Pods/Target Support Files/FSPagerView/FSPagerView-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/Pods/Target Support Files/FSPagerView/FSPagerView-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Pods/Target Support Files/FSPagerView/FSPagerView-umbrella.h b/Pods/Target Support Files/FSPagerView/FSPagerView-umbrella.h deleted file mode 100644 index 474ff62..0000000 --- a/Pods/Target Support Files/FSPagerView/FSPagerView-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FSPagerViewObjcCompat.h" - -FOUNDATION_EXPORT double FSPagerViewVersionNumber; -FOUNDATION_EXPORT const unsigned char FSPagerViewVersionString[]; - diff --git a/Pods/Target Support Files/FSPagerView/FSPagerView.debug.xcconfig b/Pods/Target Support Files/FSPagerView/FSPagerView.debug.xcconfig deleted file mode 100644 index a21eb53..0000000 --- a/Pods/Target Support Files/FSPagerView/FSPagerView.debug.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FSPagerView -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FSPagerView -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/FSPagerView/FSPagerView.modulemap b/Pods/Target Support Files/FSPagerView/FSPagerView.modulemap deleted file mode 100644 index cd9f550..0000000 --- a/Pods/Target Support Files/FSPagerView/FSPagerView.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FSPagerView { - umbrella header "FSPagerView-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/FSPagerView/FSPagerView.release.xcconfig b/Pods/Target Support Files/FSPagerView/FSPagerView.release.xcconfig deleted file mode 100644 index a21eb53..0000000 --- a/Pods/Target Support Files/FSPagerView/FSPagerView.release.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FSPagerView -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FSPagerView -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-acknowledgements.markdown b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-acknowledgements.markdown index 1d53842..7a6d9b5 100644 --- a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-acknowledgements.markdown @@ -24,29 +24,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -## FSPagerView - -Copyright (c) 2017 FSPagerView (https://github.com/WenchaoD/FSPagerView) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - ## IQKeyboardManagerSwift MIT License diff --git a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-acknowledgements.plist b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-acknowledgements.plist index 559f531..5aa48dc 100644 --- a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-acknowledgements.plist @@ -41,35 +41,6 @@ THE SOFTWARE. <key>Type</key> <string>PSGroupSpecifier</string> </dict> - <dict> - <key>FooterText</key> - <string>Copyright (c) 2017 FSPagerView (https://github.com/WenchaoD/FSPagerView) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -</string> - <key>License</key> - <string>MIT</string> - <key>Title</key> - <string>FSPagerView</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> <dict> <key>FooterText</key> <string>MIT License diff --git a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Debug-input-files.xcfilelist b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Debug-input-files.xcfilelist index f3a6877..1c544db 100644 --- a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Debug-input-files.xcfilelist +++ b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Debug-input-files.xcfilelist @@ -1,6 +1,5 @@ ${PODS_ROOT}/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks.sh ${BUILT_PRODUCTS_DIR}/EPSignature/EPSignature.framework -${BUILT_PRODUCTS_DIR}/FSPagerView/FSPagerView.framework ${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework ${BUILT_PRODUCTS_DIR}/ImagePicker/ImagePicker.framework ${BUILT_PRODUCTS_DIR}/LanguageManager-iOS/LanguageManager_iOS.framework diff --git a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Debug-output-files.xcfilelist b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Debug-output-files.xcfilelist index 9369e2e..13e73d2 100644 --- a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Debug-output-files.xcfilelist +++ b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Debug-output-files.xcfilelist @@ -1,5 +1,4 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/EPSignature.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FSPagerView.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IQKeyboardManagerSwift.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ImagePicker.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/LanguageManager_iOS.framework diff --git a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Release-input-files.xcfilelist b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Release-input-files.xcfilelist index f3a6877..1c544db 100644 --- a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Release-input-files.xcfilelist +++ b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Release-input-files.xcfilelist @@ -1,6 +1,5 @@ ${PODS_ROOT}/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks.sh ${BUILT_PRODUCTS_DIR}/EPSignature/EPSignature.framework -${BUILT_PRODUCTS_DIR}/FSPagerView/FSPagerView.framework ${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework ${BUILT_PRODUCTS_DIR}/ImagePicker/ImagePicker.framework ${BUILT_PRODUCTS_DIR}/LanguageManager-iOS/LanguageManager_iOS.framework diff --git a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Release-output-files.xcfilelist b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Release-output-files.xcfilelist index 9369e2e..13e73d2 100644 --- a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Release-output-files.xcfilelist +++ b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks-Release-output-files.xcfilelist @@ -1,5 +1,4 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/EPSignature.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FSPagerView.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IQKeyboardManagerSwift.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ImagePicker.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/LanguageManager_iOS.framework diff --git a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks.sh b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks.sh index 9594529..0119b97 100755 --- a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks.sh +++ b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks.sh @@ -177,7 +177,6 @@ code_sign_if_enabled() { if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/EPSignature/EPSignature.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FSPagerView/FSPagerView.framework" install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework" install_framework "${BUILT_PRODUCTS_DIR}/ImagePicker/ImagePicker.framework" install_framework "${BUILT_PRODUCTS_DIR}/LanguageManager-iOS/LanguageManager_iOS.framework" @@ -185,7 +184,6 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/EPSignature/EPSignature.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FSPagerView/FSPagerView.framework" install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework" install_framework "${BUILT_PRODUCTS_DIR}/ImagePicker/ImagePicker.framework" install_framework "${BUILT_PRODUCTS_DIR}/LanguageManager-iOS/LanguageManager_iOS.framework" diff --git a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner.debug.xcconfig b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner.debug.xcconfig index fd38585..6ebb170 100644 --- a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner.debug.xcconfig +++ b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner.debug.xcconfig @@ -1,11 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EPSignature" "${PODS_CONFIGURATION_BUILD_DIR}/FSPagerView" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/ImagePicker" "${PODS_CONFIGURATION_BUILD_DIR}/LanguageManager-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/NBBottomSheet" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EPSignature" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/ImagePicker" "${PODS_CONFIGURATION_BUILD_DIR}/LanguageManager-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/NBBottomSheet" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EPSignature/EPSignature.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FSPagerView/FSPagerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ImagePicker/ImagePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LanguageManager-iOS/LanguageManager_iOS.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/NBBottomSheet/NBBottomSheet.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EPSignature/EPSignature.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ImagePicker/ImagePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LanguageManager-iOS/LanguageManager_iOS.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/NBBottomSheet/NBBottomSheet.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift -OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "AVFoundation" -framework "CoreGraphics" -framework "EPSignature" -framework "FSPagerView" -framework "Foundation" -framework "IQKeyboardManagerSwift" -framework "ImagePicker" -framework "LanguageManager_iOS" -framework "NBBottomSheet" -framework "QuartzCore" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "AVFoundation" -framework "CoreGraphics" -framework "EPSignature" -framework "Foundation" -framework "IQKeyboardManagerSwift" -framework "ImagePicker" -framework "LanguageManager_iOS" -framework "NBBottomSheet" -framework "QuartzCore" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner.release.xcconfig b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner.release.xcconfig index fd38585..6ebb170 100644 --- a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner.release.xcconfig +++ b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner.release.xcconfig @@ -1,11 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EPSignature" "${PODS_CONFIGURATION_BUILD_DIR}/FSPagerView" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/ImagePicker" "${PODS_CONFIGURATION_BUILD_DIR}/LanguageManager-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/NBBottomSheet" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EPSignature" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/ImagePicker" "${PODS_CONFIGURATION_BUILD_DIR}/LanguageManager-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/NBBottomSheet" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EPSignature/EPSignature.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FSPagerView/FSPagerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ImagePicker/ImagePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LanguageManager-iOS/LanguageManager_iOS.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/NBBottomSheet/NBBottomSheet.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EPSignature/EPSignature.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ImagePicker/ImagePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LanguageManager-iOS/LanguageManager_iOS.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/NBBottomSheet/NBBottomSheet.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift -OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "AVFoundation" -framework "CoreGraphics" -framework "EPSignature" -framework "FSPagerView" -framework "Foundation" -framework "IQKeyboardManagerSwift" -framework "ImagePicker" -framework "LanguageManager_iOS" -framework "NBBottomSheet" -framework "QuartzCore" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "AVFoundation" -framework "CoreGraphics" -framework "EPSignature" -framework "Foundation" -framework "IQKeyboardManagerSwift" -framework "ImagePicker" -framework "LanguageManager_iOS" -framework "NBBottomSheet" -framework "QuartzCore" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -- GitLab