diff --git a/MiniScanner.xcodeproj/project.pbxproj b/MiniScanner.xcodeproj/project.pbxproj index c0cab02e385f07d97835ed8f2c32cf371e6559ee..7e060a14b42ea55103d62f6c2e5452e57bbd01a7 100644 --- a/MiniScanner.xcodeproj/project.pbxproj +++ b/MiniScanner.xcodeproj/project.pbxproj @@ -67,6 +67,8 @@ 5359841B2C145E55003EB6ED /* DocumentsTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 535984192C145E55003EB6ED /* DocumentsTableViewCell.xib */; }; 5359841E2C14B835003EB6ED /* SearchFilesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5359841D2C14B835003EB6ED /* SearchFilesView.swift */; }; 535984202C14B8C5003EB6ED /* SearchFilesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5359841F2C14B8C5003EB6ED /* SearchFilesView.xib */; }; + 53BAE0ED2C15E0890072189E /* EditViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53BAE0EB2C15E0890072189E /* EditViewController.swift */; }; + 53BAE0EE2C15E0890072189E /* EditViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 53BAE0EC2C15E0890072189E /* EditViewController.xib */; }; 53CD5F532C15022E0010424B /* KNAlertViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 53CD5F512C15022E0010424B /* KNAlertViewController.xib */; }; 53CD5F542C15022E0010424B /* KNAlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CD5F522C15022E0010424B /* KNAlertViewController.swift */; }; 53CD5F562C1503150010424B /* BMViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CD5F552C1503150010424B /* BMViewController.swift */; }; @@ -74,6 +76,8 @@ 53CD5F5A2C1505500010424B /* UITextView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CD5F592C1505500010424B /* UITextView+Extensions.swift */; }; 53CD5F5C2C1505A20010424B /* Globals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CD5F5B2C1505A20010424B /* Globals.swift */; }; 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 */; }; 53F21F8B2C1246AF00172BFC /* AllFolderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53F21F892C1246AF00172BFC /* AllFolderTableViewCell.swift */; }; 53F21F8C2C1246AF00172BFC /* AllFolderTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 53F21F8A2C1246AF00172BFC /* AllFolderTableViewCell.xib */; }; 53F21F912C1248EC00172BFC /* FolderCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53F21F8F2C1248EC00172BFC /* FolderCollectionViewCell.swift */; }; @@ -201,6 +205,8 @@ 535984192C145E55003EB6ED /* DocumentsTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DocumentsTableViewCell.xib; sourceTree = "<group>"; }; 5359841D2C14B835003EB6ED /* SearchFilesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchFilesView.swift; sourceTree = "<group>"; }; 5359841F2C14B8C5003EB6ED /* SearchFilesView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchFilesView.xib; sourceTree = "<group>"; }; + 53BAE0EB2C15E0890072189E /* EditViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditViewController.swift; sourceTree = "<group>"; }; + 53BAE0EC2C15E0890072189E /* EditViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = EditViewController.xib; sourceTree = "<group>"; }; 53CD5F512C15022E0010424B /* KNAlertViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KNAlertViewController.xib; sourceTree = "<group>"; }; 53CD5F522C15022E0010424B /* KNAlertViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KNAlertViewController.swift; sourceTree = "<group>"; }; 53CD5F552C1503150010424B /* BMViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BMViewController.swift; sourceTree = "<group>"; }; @@ -208,6 +214,8 @@ 53CD5F592C1505500010424B /* UITextView+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITextView+Extensions.swift"; sourceTree = "<group>"; }; 53CD5F5B2C1505A20010424B /* Globals.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Globals.swift; sourceTree = "<group>"; }; 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>"; }; 53F21F892C1246AF00172BFC /* AllFolderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AllFolderTableViewCell.swift; sourceTree = "<group>"; }; 53F21F8A2C1246AF00172BFC /* AllFolderTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AllFolderTableViewCell.xib; sourceTree = "<group>"; }; 53F21F8F2C1248EC00172BFC /* FolderCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FolderCollectionViewCell.swift; sourceTree = "<group>"; }; @@ -460,6 +468,15 @@ name = Frameworks; sourceTree = "<group>"; }; + 53BAE0EA2C15E0770072189E /* EditViewController */ = { + isa = PBXGroup; + children = ( + 53BAE0EB2C15E0890072189E /* EditViewController.swift */, + 53BAE0EC2C15E0890072189E /* EditViewController.xib */, + ); + path = EditViewController; + sourceTree = "<group>"; + }; 53CD5F502C15022E0010424B /* KNAlert */ = { isa = PBXGroup; children = ( @@ -551,6 +568,8 @@ EC702527254E066400BE1958 /* SettingsTableViewCell.swift */, EC702528254E066400BE1958 /* SettingsViewController.swift */, EC702526254E066400BE1958 /* SettingsViewController+Safari.swift */, + 53CD5F5F2C15A6210010424B /* SettingViewController.swift */, + 53CD5F602C15A6210010424B /* SettingViewController.xib */, ); path = Settings; sourceTree = "<group>"; @@ -636,6 +655,7 @@ EC8A9B2D254DE96300F9AF99 /* Modules */ = { isa = PBXGroup; children = ( + 53BAE0EA2C15E0770072189E /* EditViewController */, ECE9BBB2254E331700D45E43 /* Walktrough */, EC8A9B06254DC2EE00F9AF99 /* Documents */, EC8A9B2C254DE94900F9AF99 /* DocumentPreview */, @@ -745,8 +765,10 @@ 535984102C145083003EB6ED /* Poppins-Medium.ttf in Resources */, 53014FAE2C11A8E80071CE39 /* rotate@2x.png in Resources */, 53014FB32C11A8E80071CE39 /* flash@3x.png in Resources */, + 53CD5F622C15A6210010424B /* SettingViewController.xib in Resources */, 53F21F9E2C1377B900172BFC /* Tajawal-ExtraLight.ttf in Resources */, 53014FB22C11A8E80071CE39 /* flashUnavailable@3x.png in Resources */, + 53BAE0EE2C15E0890072189E /* EditViewController.xib in Resources */, 53014FAF2C11A8E80071CE39 /* flash@2x.png in Resources */, 53F21F9F2C1377B900172BFC /* Tajawal-Regular.ttf in Resources */, 53014FB12C11A8E80071CE39 /* flashUnavailable.png in Resources */, @@ -822,6 +844,7 @@ EC0CF215254D8DE900888722 /* DocumentsTableViewController.swift in Sources */, 53CD5F542C15022E0010424B /* KNAlertViewController.swift in Sources */, 53014F9D2C11A8E80071CE39 /* Array+Utils.swift in Sources */, + 53CD5F612C15A6210010424B /* SettingViewController.swift in Sources */, 53014FAA2C11A8E80071CE39 /* Quadrilateral.swift in Sources */, 53014FA42C11A8E80071CE39 /* EditScanViewController.swift in Sources */, EC8A9B1A254DCE3E00F9AF99 /* UIImage+Extensions.swift in Sources */, @@ -835,6 +858,7 @@ 53014F992C11A8E80071CE39 /* CGPoint+Utils.swift in Sources */, 53014FA62C11A8E80071CE39 /* Error.swift in Sources */, 53014FA72C11A8E80071CE39 /* VisionRectangleDetector.swift in Sources */, + 53BAE0ED2C15E0890072189E /* EditViewController.swift in Sources */, EC0CF1FE254D8BBF00888722 /* AppDelegate.swift in Sources */, 53014FA82C11A8E80071CE39 /* CIRectangleDetector.swift in Sources */, EC8A9AD5254DB76000F9AF99 /* BaseNavigationViewController.swift in Sources */, @@ -1045,7 +1069,7 @@ CURRENT_PROJECT_VERSION = 6; DEVELOPMENT_TEAM = 5L95SU3SLS; INFOPLIST_FILE = "MiniScanner/Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1068,7 +1092,7 @@ CURRENT_PROJECT_VERSION = 6; DEVELOPMENT_TEAM = 5L95SU3SLS; INFOPLIST_FILE = "MiniScanner/Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/MiniScanner.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist b/MiniScanner.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist index 638d735805511f6ca3f6a4ed3d89968fa1ceffed..8da66739917c83251d407aa3e0e66c7ee902fcb9 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>4</integer> + <integer>6</integer> </dict> </dict> </dict> diff --git a/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate b/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate index 1c1a90e7a00a80ba794876925e657e873221ce1b..1ce74fe5f6ed07cae276f7ff1368eef539c525d7 100644 Binary files a/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate and b/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/MiniScanner/Common/AppTabBarController.swift b/MiniScanner/Common/AppTabBarController.swift index 1ac41e36da65afe421ed1bcb98176e605d4c1498..192e8ba5963713d42049d8df10bb3ee538f276b8 100644 --- a/MiniScanner/Common/AppTabBarController.swift +++ b/MiniScanner/Common/AppTabBarController.swift @@ -1,7 +1,8 @@ import UIKit class AppTabBarController: UITabBarController, UITabBarControllerDelegate, WalkthroughViewControllerDelegate { - + var window: UIWindow? + struct Constants { static let reuseIdentifier = String(describing: AppTabBarController.self) static let storyboardName = "Documents" @@ -19,6 +20,7 @@ class AppTabBarController: UITabBarController, UITabBarControllerDelegate, Walkt override func viewDidLoad() { super.viewDidLoad() + window = UIWindow(frame: UIScreen.main.bounds) self.delegate = self } @@ -62,6 +64,13 @@ class AppTabBarController: UITabBarController, UITabBarControllerDelegate, Walkt vc.view.removeFromSuperview() }, completion: nil) } + + override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { + let index = tabBar.items?.firstIndex(of: item) + if index == 2 { + NotificationCenter.default.post(name: NSNotification.Name.rightButtonTapped, object: item) + } + } } class AppTabBar: UITabBar { @@ -113,18 +122,18 @@ class AppTabBar: UITabBar { } @objc private func setupMiddleButton() { - let image = UIImage(named: "add_doc_icon") - middleButton.setImage(image, for: UIControl.State.normal) - middleButton.contentVerticalAlignment = .fill - middleButton.contentHorizontalAlignment = .fill - middleButton.imageEdgeInsets = .zero - middleButton.frame.size = CGSize(width: 100, height: 100) - middleButton.layer.masksToBounds = true - middleButton.layer.cornerRadius = 50 - - middleButton.center = CGPoint(x: UIScreen.main.bounds.width / 2, y: 0) - middleButton.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside) - addSubview(middleButton) + let image = UIImage(named: "add_doc_icon") + middleButton.setImage(image, for: UIControl.State.normal) + middleButton.contentVerticalAlignment = .fill + middleButton.contentHorizontalAlignment = .fill + middleButton.imageEdgeInsets = .zero + middleButton.frame.size = CGSize(width: 100, height: 100) + middleButton.layer.masksToBounds = true + middleButton.layer.cornerRadius = 50 + + middleButton.center = CGPoint(x: UIScreen.main.bounds.width / 2, y: 0) + middleButton.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside) + addSubview(middleButton) } @objc private func buttonPressed() { @@ -147,22 +156,22 @@ class AppTabBar: UITabBar { let height: CGFloat = 120 let path = UIBezierPath() let centerWidth = self.frame.width / 2 - + path.move(to: CGPoint(x: 0, y: 0)) // start top left path.addLine(to: CGPoint(x: (centerWidth - height * 0.5), y: 0)) // the beginning of the trough - + path.addArc(withCenter: CGPoint(x: centerWidth, y: 0), radius: height * 0.5, startAngle: CGFloat.pi, endAngle: 0, clockwise: false) - + path.addLine(to: CGPoint(x: (centerWidth + height * 0.5), y: 0)) path.addLine(to: CGPoint(x: self.frame.width, y: 0)) path.addLine(to: CGPoint(x: self.frame.width, y: self.frame.height)) path.addLine(to: CGPoint(x: 0, y: self.frame.height)) path.close() - + return path.cgPath } } diff --git a/MiniScanner/Extensions/NSNotification+Extensions.swift b/MiniScanner/Extensions/NSNotification+Extensions.swift index 50a98a4203197015e0bb6c22106994136e16391a..bcedabc3be0c74d95d3a58cbac831bd4a5449b2e 100644 --- a/MiniScanner/Extensions/NSNotification+Extensions.swift +++ b/MiniScanner/Extensions/NSNotification+Extensions.swift @@ -2,5 +2,6 @@ import UIKit extension NSNotification.Name { static let MiddleButtonTapped = NSNotification.Name("MiddleButtonTapped") + static let rightButtonTapped = NSNotification.Name("RightButtonTapped") static let ReloadViewModels = NSNotification.Name("ReloadViewModels") } diff --git a/MiniScanner/Extensions/UserDefaults+Extensions.swift b/MiniScanner/Extensions/UserDefaults+Extensions.swift index 8dd9b68f8bbaad2a6b15e432fa946a8145814039..ccd8950b561c152edc17bbda9a325c27de6d5bd6 100644 --- a/MiniScanner/Extensions/UserDefaults+Extensions.swift +++ b/MiniScanner/Extensions/UserDefaults+Extensions.swift @@ -4,7 +4,7 @@ extension UserDefaults { var isPhotoEditigOn: Bool { get { - return bool(forKey: "isPhotoEditigOn") + return true } set { set(newValue, forKey: "isPhotoEditigOn") synchronize() diff --git a/MiniScanner/Managers/PDFManager.swift b/MiniScanner/Managers/PDFManager.swift index 12d33ed7b29b3d7ce6c53f0b79e321308b2635d2..9aac313060d900f6c99864583a97545e9c446b99 100644 --- a/MiniScanner/Managers/PDFManager.swift +++ b/MiniScanner/Managers/PDFManager.swift @@ -58,6 +58,29 @@ class PDFManager { } } + class func createMultiImagesPDFDocument(from images: [UIImage], localFileManager: LocalFileManager?, folder: AppConfigurator.Folder) { + guard let allDoc = localFileManager?.AllDocUrl else { return } + guard let scannerURL = localFileManager?.getFolderUrl(folder: folder) else { return } + + let urlPDFtoSaveInAllDoc = allDoc.appendingPathComponent(String.getDocumentName()) + let urlPDFtoSave = scannerURL.appendingPathComponent(String.getDocumentName()) + + let document = PDFDocument() + for (index, image) in images.enumerated() { + if let pdfPage = PDFPage(image: image) { + document.insert(pdfPage, at: index) + } + } + do { + try document.dataRepresentation()?.write(to: urlPDFtoSave) + if folder.savedName != "all_documents" { + try document.dataRepresentation()?.write(to: urlPDFtoSaveInAllDoc) + } + } catch { + print(error.localizedDescription) + } + } + class func createPDFDocument(from image: UIImage, urlPDFtoSave: URL) { let document = PDFDocument() diff --git a/MiniScanner/Modules/Documents/CustomCells/DocumentsTableViewCell/DocumentsTableViewCell.swift b/MiniScanner/Modules/Documents/CustomCells/DocumentsTableViewCell/DocumentsTableViewCell.swift index e3456ff855ffcde62ab3a723de1b6e1e16808844..d71dc4755847636ffc6455d833db55291ca9f4b0 100644 --- a/MiniScanner/Modules/Documents/CustomCells/DocumentsTableViewCell/DocumentsTableViewCell.swift +++ b/MiniScanner/Modules/Documents/CustomCells/DocumentsTableViewCell/DocumentsTableViewCell.swift @@ -18,6 +18,7 @@ final class DocumentsTableViewCell: UITableViewCell { override func awakeFromNib() { super.awakeFromNib() // Initialization code + selectionStyle = .none containerImageView.layer.cornerRadius = 10 containerImageView.backgroundColor = .cellBackground } diff --git a/MiniScanner/Modules/Documents/CustomCells/DocumentsTableViewCell/DocumentsTableViewCell.xib b/MiniScanner/Modules/Documents/CustomCells/DocumentsTableViewCell/DocumentsTableViewCell.xib index 0fba204f35c90fbd4902790eda6d9a015103d079..775b63b077335d884ccb7c789aea35951b3eaaa3 100644 --- a/MiniScanner/Modules/Documents/CustomCells/DocumentsTableViewCell/DocumentsTableViewCell.xib +++ b/MiniScanner/Modules/Documents/CustomCells/DocumentsTableViewCell/DocumentsTableViewCell.xib @@ -11,7 +11,7 @@ <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="112" id="KGk-i7-Jjw" customClass="DocumentsTableViewCell" customModule="MiniScanner" customModuleProvider="target"> + <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="DocumentsTableViewCell" rowHeight="112" id="KGk-i7-Jjw" customClass="DocumentsTableViewCell" customModule="MiniScanner" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="461" height="112"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM"> diff --git a/MiniScanner/Modules/Documents/Documents.storyboard b/MiniScanner/Modules/Documents/Documents.storyboard index 4ca2ef5fbd50f13cd6c3742dc273a330e53fdad1..357a8497e2bd6088251dc9945a47ab53eda679c8 100644 --- a/MiniScanner/Modules/Documents/Documents.storyboard +++ b/MiniScanner/Modules/Documents/Documents.storyboard @@ -46,10 +46,6 @@ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="27n-zM-bE7"> <rect key="frame" x="0.0" y="342" width="414" height="554"/> <subviews> - <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" style="plain" separatorStyle="none" allowsSelection="NO" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="60c-jY-XTk"> - <rect key="frame" x="0.0" y="80" width="414" height="450"/> - <color key="backgroundColor" systemColor="systemBackgroundColor"/> - </tableView> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="VPm-dN-3u7" customClass="SearchFilesView" customModule="MiniScanner" customModuleProvider="target"> <rect key="frame" x="0.0" y="10" width="414" height="70"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> @@ -57,6 +53,10 @@ <constraint firstAttribute="height" constant="70" id="eOB-Os-XoP"/> </constraints> </view> + <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="60c-jY-XTk"> + <rect key="frame" x="0.0" y="80" width="414" height="450"/> + <color key="backgroundColor" systemColor="systemBackgroundColor"/> + </tableView> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> @@ -111,73 +111,6 @@ </objects> <point key="canvasLocation" x="100" y="930"/> </scene> - <!--Settings View Controller--> - <scene sceneID="HKR-9o-RHm"> - <objects> - <tableViewController storyboardIdentifier="SettingsViewController" id="kga-io-JMM" customClass="SettingsViewController" customModule="MiniScanner" customModuleProvider="target" sceneMemberID="viewController"> - <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" id="0UH-aU-H6Y"> - <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <color key="backgroundColor" systemColor="systemBackgroundColor"/> - <prototypes> - <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="SettingsTableViewCell" rowHeight="50" id="1SO-UK-YpT" customClass="SettingsTableViewCell" customModule="MiniScanner" customModuleProvider="target"> - <rect key="frame" x="0.0" y="50" width="414" height="50"/> - <autoresizingMask key="autoresizingMask"/> - <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="1SO-UK-YpT" id="n7G-Id-eYr"> - <rect key="frame" x="0.0" y="0.0" width="414" height="50"/> - <autoresizingMask key="autoresizingMask"/> - <subviews> - <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="UGO-O1-ZkV"> - <rect key="frame" x="24" y="13" width="24" height="24"/> - <constraints> - <constraint firstAttribute="width" constant="24" id="lUP-lv-Pzj"/> - <constraint firstAttribute="height" constant="24" id="vvy-Id-nIJ"/> - </constraints> - </imageView> - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dSx-7P-GzB"> - <rect key="frame" x="62" y="14.5" width="251" height="21"/> - <fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="18"/> - <nil key="textColor"/> - <nil key="highlightedColor"/> - </label> - <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="9GN-Db-fhO"> - <rect key="frame" x="345" y="9.5" width="51" height="31"/> - <constraints> - <constraint firstAttribute="width" constant="49" id="rxe-pB-rXh"/> - </constraints> - <connections> - <action selector="didTapSwitching:" destination="1SO-UK-YpT" eventType="valueChanged" id="Cwk-Hn-Kz8"/> - </connections> - </switch> - </subviews> - <constraints> - <constraint firstItem="UGO-O1-ZkV" firstAttribute="centerY" secondItem="n7G-Id-eYr" secondAttribute="centerY" id="BjK-Y8-apM"/> - <constraint firstAttribute="trailing" secondItem="9GN-Db-fhO" secondAttribute="trailing" constant="20" symbolic="YES" id="E6r-FB-ae3"/> - <constraint firstItem="9GN-Db-fhO" firstAttribute="leading" secondItem="dSx-7P-GzB" secondAttribute="trailing" constant="32" id="V9t-sL-ocu"/> - <constraint firstItem="dSx-7P-GzB" firstAttribute="leading" secondItem="UGO-O1-ZkV" secondAttribute="trailing" constant="14" id="dSw-ny-XcT"/> - <constraint firstItem="UGO-O1-ZkV" firstAttribute="leading" secondItem="n7G-Id-eYr" secondAttribute="leading" constant="24" id="fqF-Bv-Vmj"/> - <constraint firstItem="dSx-7P-GzB" firstAttribute="centerY" secondItem="n7G-Id-eYr" secondAttribute="centerY" id="hV4-ZS-iZ2"/> - <constraint firstItem="9GN-Db-fhO" firstAttribute="centerY" secondItem="n7G-Id-eYr" secondAttribute="centerY" id="vjy-Ln-n57"/> - </constraints> - </tableViewCellContentView> - <connections> - <outlet property="imgView" destination="UGO-O1-ZkV" id="Euj-tU-0Ep"/> - <outlet property="nameLabel" destination="dSx-7P-GzB" id="OAj-da-382"/> - <outlet property="settingsSwitch" destination="9GN-Db-fhO" id="q5j-qB-JiC"/> - </connections> - </tableViewCell> - </prototypes> - <connections> - <outlet property="dataSource" destination="kga-io-JMM" id="rqK-Z1-rb4"/> - <outlet property="delegate" destination="kga-io-JMM" id="Sou-5v-bXI"/> - </connections> - </tableView> - <navigationItem key="navigationItem" id="1wT-BT-hl9"/> - </tableViewController> - <placeholder placeholderIdentifier="IBFirstResponder" id="zVa-qn-b5u" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> - </objects> - <point key="canvasLocation" x="2034.7826086956522" y="606.69642857142856"/> - </scene> <!--App Tab Bar Controller--> <scene sceneID="fE7-cR-ZAd"> <objects> @@ -193,7 +126,7 @@ <connections> <segue destination="cKa-08-wzp" kind="relationship" relationship="viewControllers" id="cmG-E6-cLT"/> <segue destination="X96-Kr-3o1" kind="relationship" relationship="viewControllers" id="wZA-Em-Yv2"/> - <segue destination="OGd-a1-RyU" kind="relationship" relationship="viewControllers" id="cRB-zr-FXl"/> + <segue destination="IlP-xF-OWr" kind="relationship" relationship="viewControllers" id="4ui-uR-jDw"/> </connections> </tabBarController> <placeholder placeholderIdentifier="IBFirstResponder" id="OcG-fV-cWh" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> @@ -219,24 +152,21 @@ </objects> <point key="canvasLocation" x="1124.6376811594205" y="-98.4375"/> </scene> - <!--Navigation Controller--> - <scene sceneID="uqv-8W-A0Z"> + <!--View Controller--> + <scene sceneID="DuV-X1-dAh"> <objects> - <navigationController automaticallyAdjustsScrollViewInsets="NO" id="OGd-a1-RyU" sceneMemberID="viewController"> - <tabBarItem key="tabBarItem" title="" image="Gallery" id="zH9-VT-a3h"/> - <toolbarItems/> - <navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="HL0-yh-IYt"> - <rect key="frame" x="0.0" y="48" width="414" height="44"/> - <autoresizingMask key="autoresizingMask"/> - </navigationBar> - <nil name="viewControllers"/> - <connections> - <segue destination="kga-io-JMM" kind="relationship" relationship="rootViewController" id="GIJ-Fo-ono"/> - </connections> - </navigationController> - <placeholder placeholderIdentifier="IBFirstResponder" id="Iot-Hj-feT" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> + <viewController id="IlP-xF-OWr" sceneMemberID="viewController"> + <view key="view" contentMode="scaleToFill" id="Ipm-3v-8uG"> + <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <viewLayoutGuide key="safeArea" id="aHS-9n-mUa"/> + <color key="backgroundColor" systemColor="systemBackgroundColor"/> + </view> + <tabBarItem key="tabBarItem" title="" image="Gallery" id="KPT-xc-0W6"/> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="D4U-HX-ONB" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> </objects> - <point key="canvasLocation" x="1124.6376811594205" y="606.69642857142856"/> + <point key="canvasLocation" x="1125" y="619"/> </scene> </scenes> <resources> diff --git a/MiniScanner/Modules/Documents/DocumentsTableViewController.swift b/MiniScanner/Modules/Documents/DocumentsTableViewController.swift index 9cedbe365a5aa5f01c69f23f542b0e3aec670f33..966f5afc4ffe9d6ababc86c5006a5e805b5da730 100644 --- a/MiniScanner/Modules/Documents/DocumentsTableViewController.swift +++ b/MiniScanner/Modules/Documents/DocumentsTableViewController.swift @@ -1,5 +1,6 @@ import UIKit import VisionKit +import ImagePicker final class DocumentsTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @@ -35,23 +36,30 @@ final class DocumentsTableViewController: UIViewController, UITableViewDelegate, private var renameFileName: String? private var selectedFolder: AppConfigurator.Folder? private var isSearching: Bool = false + private var pageViewControllers: [UIViewController] = [] + @IBOutlet weak var allFolderView_height: NSLayoutConstraint! override func viewDidLoad() { super.viewDidLoad() navigationItem.title = "File Manager" + let settingsButton = UIBarButtonItem(image: UIImage(named: "settings"), style: .done, target: self, action: #selector(openSettings)) + navigationItem.rightBarButtonItem = settingsButton + + tableView.register(UINib(nibName: "DocumentsTableViewCell", bundle: nil), forCellReuseIdentifier: "DocumentsTableViewCell") + tableView.tableFooterView = UIView() tableView.delegate = self tableView.dataSource = self - tableView.register(UINib(nibName: "DocumentsTableViewCell", bundle: nil), forCellReuseIdentifier: "DocumentsTableViewCell") + tableView.reloadData() let savedFolders = AppConfigurator().getFolders() - for item in savedFolders { - if item.isSelected == true { - selectedFolder = item - } - } + for item in savedFolders { + if item.isSelected == true { + selectedFolder = item + } + } if let folder = selectedFolder { AllFolderView?.set(selectedFolder: folder, delegate: self) @@ -67,6 +75,8 @@ final class DocumentsTableViewController: UIViewController, UITableViewDelegate, NotificationCenter.default.addObserver(self, selector: #selector(fetchViewModels), name: NSNotification.Name.ReloadViewModels, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(rightButtonTapped(_:)), + name: NSNotification.Name.rightButtonTapped, object: nil) if UserDefaults.standard.startsAppWithCamera { openCamera() } @@ -79,7 +89,7 @@ final class DocumentsTableViewController: UIViewController, UITableViewDelegate, fixedTableSheet.backgroundColor = .white // or any non-clear color fixedTableSheet.clipsToBounds = false fetchViewModels() - + } override func viewWillAppear(_ animated: Bool) { @@ -101,6 +111,11 @@ final class DocumentsTableViewController: UIViewController, UITableViewDelegate, } } + @objc private func openSettings() { + let settings = SettingViewController() + self.navigationController?.pushViewController(settings, animated: false) + } + // MARK: - Table view data source func numberOfSections(in tableView: UITableView) -> Int { @@ -146,12 +161,12 @@ final class DocumentsTableViewController: UIViewController, UITableViewDelegate, } func tableView(_ tableView: UITableView, - editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle { + editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle { return .none } func tableView(_ tableView: UITableView, - trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { + trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { // Trash action let trash = UIContextualAction(style: .destructive, @@ -178,47 +193,37 @@ final class DocumentsTableViewController: UIViewController, UITableViewDelegate, } @objc private func middleButtonTapped(_ notification: NSNotification) { - let alertController = UIAlertController(title: nil, - message: nil, preferredStyle: .actionSheet) - - let cameraAction = UIAlertAction(title: "Camera".localized, style: .default, handler: { action in - self.openCamera() - }) - - let galleryAction = UIAlertAction(title: "Gallery".localized, style: .default, handler: { action in - self.openGallery() - }) - - alertController.addAction(cameraAction) - cameraAction.setValue(UIImage(systemName: "camera"), forKey: "image") - cameraAction.setValue(CATextLayerAlignmentMode.left, forKey: "titleTextAlignment") - - alertController.addAction(galleryAction) - galleryAction.setValue(UIImage(systemName: "photo"), forKey: "image") - galleryAction.setValue(CATextLayerAlignmentMode.left, forKey: "titleTextAlignment") - - alertController.addAction(UIAlertAction(title: "Cancel".localized, style: .cancel, handler: nil)) - alertController.popoverPresentationController?.sourceView = notification.object as? UIButton - present(alertController, animated: true) + openCamera() + } + + @objc private func rightButtonTapped(_ notification: NSNotification) { + openGallery() } + private func openCamera() { let scannerOptions = ImageScannerOptions(scanMultipleItems: true, allowAutoScan: false, allowTapToFocus: false, defaultColorRenderOption:.color) - let scannerViewController = ImageScannerController(options: scannerOptions) - scannerViewController.imageScannerDelegate = self - present(scannerViewController, animated: true) + let scannerViewController = ScannerViewController(scanSession: nil, options: scannerOptions) + + + scannerViewController.delegate = self + + scannerViewController.hidesBottomBarWhenPushed = true + self.navigationController?.pushViewController(scannerViewController, animated: true) +// +// scannerViewController.modalPresentationStyle = .overFullScreen +// self.present(scannerViewController, animated: true) } private func openGallery() { - guard UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) else { return } - let imagePickerController = UIImagePickerController() - imagePickerController.delegate = self - imagePickerController.sourceType = UIImagePickerController.SourceType.savedPhotosAlbum - imagePickerController.allowsEditing = UserDefaults.standard.isPhotoEditigOn + let imagePickerController = ImagePickerController() + imagePickerController.expandGalleryView() + imagePickerController.delegate = self + imagePickerController.modalPresentationStyle = .fullScreen present(imagePickerController, animated: true, completion: nil) } @@ -307,9 +312,15 @@ extension DocumentsTableViewController: UINavigationControllerDelegate, UIImageP if let folder = selectedFolder { PDFManager.createPDFDocument(from: image, localFileManager: self.localFileManager, folder: folder) self.fetchViewModels() + self.tabBarController?.selectedIndex = 0 } } } + func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { + picker.dismiss(animated: true) { [weak self] in + self?.tabBarController?.selectedIndex = 0 + } + } } extension DocumentsTableViewController: ImageScannerControllerDelegate { @@ -351,6 +362,23 @@ extension DocumentsTableViewController: ImageScannerControllerDelegate { } } +extension DocumentsTableViewController: ScannerViewControllerDelegate { + func scannerViewController(_ scannerViewController: ScannerViewController, reviewItems inSession: MultiPageScanSession) { + let multipageScanViewController = MultiPageScanSessionViewController(scanSession: inSession) + multipageScanViewController.delegate = self + self.navigationController?.pushViewController(multipageScanViewController, animated: true) + + } + + func scannerViewController(_ scannerViewController: ScannerViewController, didFail withError: Error) { + scannerViewController.dismiss(animated: true) + } + + func scannerViewControllerDidCancel(_ scannerViewController: ScannerViewController) { + scannerViewController.dismiss(animated: true) + } +} + extension DocumentsTableViewController: AllFolderTableViewCellDelegate { func addFolderTapped() { alert(confirm: "Add Folder", destructive: "Cancel", message: "Add Folder?"){ folderName in @@ -381,12 +409,98 @@ extension DocumentsTableViewController: SearchFilesViewDelegate { } } else { isSearching = true - UIView.animate(withDuration: 0.5) { - self.allFolderView_height.constant = 0 - self.AllFolderView.isHidden = true - } self.searchedViewModel = self.viewModels.filter { $0.displayName.lowercased().contains(text.lowercased()) } } tableView.reloadData() } } + +extension DocumentsTableViewController: ImagePickerDelegate { + + func wrapperDidPress(_ imagePicker: ImagePicker.ImagePickerController, images: [UIImage]) { + guard !images.isEmpty else { return } + + // Create a view controller for each image + let viewControllers = images.map { image -> UIViewController in + let viewController = UIViewController() + viewController.view.backgroundColor = .white + + let imageView = UIImageView(image: image) + imageView.contentMode = .scaleAspectFit + imageView.translatesAutoresizingMaskIntoConstraints = false + + viewController.view.addSubview(imageView) + NSLayoutConstraint.activate([ + imageView.leadingAnchor.constraint(equalTo: viewController.view.leadingAnchor), + imageView.trailingAnchor.constraint(equalTo: viewController.view.trailingAnchor), + imageView.topAnchor.constraint(equalTo: viewController.view.topAnchor), + imageView.bottomAnchor.constraint(equalTo: viewController.view.bottomAnchor) + ]) + + return viewController + } + + self.pageViewControllers = viewControllers + // Create a page view controller to allow the user to scroll through the images + let pageViewController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil) + pageViewController.dataSource = self + + pageViewController.setViewControllers([viewControllers[0]], direction: .forward, animated: false, completion: nil) + + // Present the page view controller + imagePicker.present(pageViewController, animated: true, completion: nil) + } + + + func doneButtonDidPress(_ imagePicker: ImagePicker.ImagePickerController, images: [UIImage]) { + imagePicker.dismiss(animated: true) { [weak self] in + guard let self = self else { return } + if let folder = selectedFolder { + PDFManager.createMultiImagesPDFDocument(from: images, localFileManager: self.localFileManager, folder: folder) + self.fetchViewModels() + self.tabBarController?.selectedIndex = 0 + } + } + } + + func cancelButtonDidPress(_ imagePicker: ImagePicker.ImagePickerController) { + imagePicker.dismiss(animated: true) { [weak self] in + self?.tabBarController?.selectedIndex = 0 + } + } +} +extension DocumentsTableViewController: MultiPageScanSessionViewControllerDelegate { + + public func multiPageScanSessionViewController(_ multiPageScanSessionViewController: MultiPageScanSessionViewController, + finished session: MultiPageScanSession) { + var images = [URL]() + for index in 0..<session.scannedItems.count { + if let url = session.scannedItems[index].renderedImage { + images.append(url) + } + } + print("images: \(images)") + if let folder = selectedFolder { + PDFManager.createMultiPDFPage(from: images, localFileManager: localFileManager, folder: folder) { + self.fetchViewModels() + self.navigationController?.popViewController(animated: true) + } + } + } +} + +extension DocumentsTableViewController: UIPageViewControllerDataSource { + func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { + guard let index = pageViewControllers.firstIndex(of: viewController), index > 0 else { + return nil + } + return pageViewControllers[index - 1] + } + + func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { + guard let index = pageViewControllers.firstIndex(of: viewController), index < pageViewControllers.count - 1 else { + return nil + } + return pageViewControllers[index + 1] + } +} diff --git a/MiniScanner/Modules/EditViewController/EditViewController.swift b/MiniScanner/Modules/EditViewController/EditViewController.swift new file mode 100644 index 0000000000000000000000000000000000000000..e87eaa27a4f6c71d56e76bd4afe468e3dcfe2936 --- /dev/null +++ b/MiniScanner/Modules/EditViewController/EditViewController.swift @@ -0,0 +1,33 @@ +// +// EditViewController.swift +// MiniScanner +// +// Created by George Makhoul on 09/06/2024. +// Copyright © 2024 AppsNectar. All rights reserved. +// + +import UIKit +public protocol EditViewControllerDelegate: NSObjectProtocol { + func editViewController(_ editViewController: EditViewController, finished session: MultiPageScanSession) +} + +public class EditViewController: UIViewController { + + private var scanSession:MultiPageScanSession + private var pages:Array<ScannedPageViewController> = [] + + weak public var delegate:EditViewControllerDelegate? + + public override func viewDidLoad() { + super.viewDidLoad() + } + + public init(scanSession: MultiPageScanSession){ + self.scanSession = scanSession + super.init(nibName: nil, bundle: nil) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) should not be called for this class") + } +} diff --git a/MiniScanner/Modules/EditViewController/EditViewController.xib b/MiniScanner/Modules/EditViewController/EditViewController.xib new file mode 100644 index 0000000000000000000000000000000000000000..43e098ff4a45e4a067179b52b2c88e8bf9e2bc26 --- /dev/null +++ b/MiniScanner/Modules/EditViewController/EditViewController.xib @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13142" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> + <dependencies> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12042"/> + <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="EditViewController" customModuleProvider="target"> + <connections> + <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> + </connections> + </placeholder> + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> + <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> + <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> + </view> + </objects> +</document> diff --git a/MiniScanner/Modules/Settings/SettingViewController.swift b/MiniScanner/Modules/Settings/SettingViewController.swift new file mode 100644 index 0000000000000000000000000000000000000000..0f07b63db138ae6330dc9778a7acddd8dbb6c5f7 --- /dev/null +++ b/MiniScanner/Modules/Settings/SettingViewController.swift @@ -0,0 +1,18 @@ +// +// SettingViewController.swift +// MiniScanner +// +// Created by George Makhoul on 09/06/2024. +// Copyright © 2024 AppsNectar. All rights reserved. +// + +import UIKit + +class SettingViewController: UIViewController { + + @IBOutlet weak var tableView: UITableView! + + override func viewDidLoad() { + super.viewDidLoad() + } +} diff --git a/MiniScanner/Modules/Settings/SettingViewController.xib b/MiniScanner/Modules/Settings/SettingViewController.xib new file mode 100644 index 0000000000000000000000000000000000000000..7184c71cb6dad8e1fb42675a52e143ed10c834af --- /dev/null +++ b/MiniScanner/Modules/Settings/SettingViewController.xib @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22155" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> + <device id="retina6_12" orientation="portrait" appearance="light"/> + <dependencies> + <deployment identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22131"/> + <capability name="Safe area layout guides" minToolsVersion="9.0"/> + <capability name="System colors in document resources" minToolsVersion="11.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="SettingViewController" customModule="MiniScanner" customModuleProvider="target"> + <connections> + <outlet property="tableView" destination="DbZ-SH-Oyu" id="IRH-zW-oGa"/> + <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> + </connections> + </placeholder> + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> + <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> + <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="DbZ-SH-Oyu"> + <rect key="frame" x="0.0" y="59" width="393" height="759"/> + <color key="backgroundColor" systemColor="systemBackgroundColor"/> + </tableView> + </subviews> + <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> + <color key="backgroundColor" systemColor="systemBackgroundColor"/> + <constraints> + <constraint firstItem="DbZ-SH-Oyu" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="Ogh-rC-sV8"/> + <constraint firstItem="DbZ-SH-Oyu" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="gnE-NX-Vux"/> + <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="DbZ-SH-Oyu" secondAttribute="trailing" id="gyH-Zf-es7"/> + <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="DbZ-SH-Oyu" secondAttribute="bottom" id="n1F-n8-wln"/> + </constraints> + <point key="canvasLocation" x="140" y="20"/> + </view> + </objects> + <resources> + <systemColor name="systemBackgroundColor"> + <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + </systemColor> + </resources> +</document> diff --git a/MiniScanner/Modules/Settings/SettingsViewController.swift b/MiniScanner/Modules/Settings/SettingsViewController.swift index 58fbb4bf30d5943f1d007ee7177e419d8511de99..8282ed33170fd5a9394edab5c93d6ef4e4cc5c05 100644 --- a/MiniScanner/Modules/Settings/SettingsViewController.swift +++ b/MiniScanner/Modules/Settings/SettingsViewController.swift @@ -1,120 +1,31 @@ import UIKit -final class SettingsViewController: UITableViewController { +class SettingsViewController: UIViewController { + // MARK: - Outlets + @IBOutlet weak var tableView: UITableView! - private var viewModels: [SettingsViewModel] = [] - - override func viewDidLoad() { - super.viewDidLoad() + // MARK: - Properties - // Do any additional setup after loading the view. - setupViewModels() - } - - private func setupViewModels() { - navigationController?.navigationBar.prefersLargeTitles = true - - let isPhotoEditing = { isEditing in - self.isPhotoEditing(isEditing) - } - - let startsAppWithCamera = { isEnabled in - self.startsAppWithCamera(isEnabled) - } - - let showWalktroughAtLaunch = { isEnabled in - self.showWalktroughAtLaunch(isEnabled) + // MARK: - LifeCycle + override func viewDidLoad() { + super.viewDidLoad() + setupUI() } - let askOnSwipeDelete = { isEnabled in - self.askOnDeleteSwipe(isEnabled) + private func setupUI() { + tableView.delegate = self + tableView.dataSource = self + tableView.reloadData() } - - let photoEditing = SettingsViewModel(imageName: "crop", - title: "Allow gallery photo editing".localized, - isSwitchOn: UserDefaults.standard.isPhotoEditigOn, - isSwitcherOn: isPhotoEditing, type: .segment) - - let cameraEditing = SettingsViewModel(imageName: "camera", - title: "Start camera at start up".localized, - isSwitchOn: UserDefaults.standard.startsAppWithCamera, - isSwitcherOn: startsAppWithCamera, type: .segment) - - let showWalktrough = SettingsViewModel(imageName: "paperplane", - title: "Show walktrough at launch".localized, - isSwitchOn: UserDefaults.standard.showWalktroughAtLaunch, - isSwitcherOn: showWalktroughAtLaunch, type: .segment) - - let deleteDocument = SettingsViewModel(imageName: "trash", - title: "Confirm on swipe delete?".localized, - isSwitchOn: UserDefaults.standard.askOnSwipeDelete, - isSwitcherOn: askOnSwipeDelete, type: .segment) - - let privacy = SettingsViewModel(imageName: "checkmark.shield", title: "Privacy Policy".localized, - urlString: AppConfigurator.Settings.privacy.rawValue, type: .url) - - let terms = SettingsViewModel(imageName: "exclamationmark.shield", title: "Terms & Conditions".localized, - urlString: AppConfigurator.Settings.terms.rawValue, type: .url) - - viewModels = [photoEditing, cameraEditing, deleteDocument, showWalktrough, privacy, terms] - - tableView.tableFooterView = UIView() - tableView.delegate = self - tableView.dataSource = self - tableView.reloadData() - } - - private func isPhotoEditing(_ isOn: Bool) { - UserDefaults.standard.isPhotoEditigOn = isOn - setupViewModels() - tableView.reloadData() - } - - private func startsAppWithCamera(_ isOn: Bool) { - UserDefaults.standard.startsAppWithCamera = isOn - setupViewModels() - tableView.reloadData() - } - - private func showWalktroughAtLaunch(_ isOn: Bool) { - UserDefaults.standard.showWalktroughAtLaunch = isOn - setupViewModels() - tableView.reloadData() - } - - private func askOnDeleteSwipe(_ isOn: Bool) { - UserDefaults.standard.askOnSwipeDelete = isOn - setupViewModels() - tableView.reloadData() - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return viewModels.count - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - guard let cell = tableView.dequeueReusableCell(withIdentifier: SettingsTableViewCell.ReuseIdentifier, - for: indexPath) as? SettingsTableViewCell else { - return UITableViewCell() +} + +// MARK: - UITableViewDelegate +extension SettingsViewController: UITableViewDelegate, UITableViewDataSource { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + 2 } - cell.configure(with: viewModels[indexPath.row]) - return cell - } - - override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let viewModel = viewModels[indexPath.row] - - switch viewModel.type { - case .url: - guard let urlString = viewModel.urlString else { return } - presentSafariController(with: urlString) - default: - break + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + UITableViewCell() } - } - - override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - return 50.0 - } } diff --git a/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSessionViewController.swift b/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSessionViewController.swift index b689c482f9f39ebf6b5f1529ef9a561312de69fb..83c9255ef4fb432fcc0261ad0680e9d98eca1fba 100644 --- a/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSessionViewController.swift +++ b/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSessionViewController.swift @@ -9,7 +9,7 @@ import UIKit public protocol MultiPageScanSessionViewControllerDelegate:NSObjectProtocol { - func multiPageScanSessionViewController(_ multiPageScanSessionViewController:MultiPageScanSessionViewController, finished session:MultiPageScanSession) + func multiPageScanSessionViewController(_ multiPageScanSessionViewController:MultiPageScanSessionViewController, finished session:MultiPageScanSession) } public class MultiPageScanSessionViewController: UIViewController { diff --git a/MiniScanner/Supporting Files/CustomWeScan/Scan/CaptureSessionManager.swift b/MiniScanner/Supporting Files/CustomWeScan/Scan/CaptureSessionManager.swift index ec3c0800e5fdd0f9b55cb4a29fbf9b38ca2544ea..f267b16c0b4e3ca6fd79bb96490cdeb375c8d5d5 100644 --- a/MiniScanner/Supporting Files/CustomWeScan/Scan/CaptureSessionManager.swift +++ b/MiniScanner/Supporting Files/CustomWeScan/Scan/CaptureSessionManager.swift @@ -123,8 +123,8 @@ final class CaptureSessionManager: NSObject, AVCaptureVideoDataOutputSampleBuffe switch authorizationStatus { case .authorized: - DispatchQueue.main.async { - self.captureSession.startRunning() + DispatchQueue.global(qos: .userInitiated).async { [weak self] in + self?.captureSession.startRunning() } isDetecting = true case .notDetermined: diff --git a/MiniScanner/Supporting Files/CustomWeScan/Scan/ScannerViewController.swift b/MiniScanner/Supporting Files/CustomWeScan/Scan/ScannerViewController.swift index 4324acda8a0f771323e5c8f29883efc53c3353da..ec0fcab695001db93533f86111126f76803639a0 100644 --- a/MiniScanner/Supporting Files/CustomWeScan/Scan/ScannerViewController.swift +++ b/MiniScanner/Supporting Files/CustomWeScan/Scan/ScannerViewController.swift @@ -23,16 +23,16 @@ protocol ScannerViewControllerDelegate:NSObjectProtocol{ public final class ScannerViewController: UIViewController { - var captureSessionManager: CaptureSessionManager? - let videoPreviewLayer = AVCaptureVideoPreviewLayer() - weak var delegate: ScannerViewControllerDelegate? - var focusRectangle: FocusRectangleView! - let quadView = QuadrilateralView() - let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .dark)) - var flashEnabled = false - var deviceOrientationHelper = DeviceOrientationHelper() - var multipageSession:MultiPageScanSession! - var options:ImageScannerOptions! + var captureSessionManager: CaptureSessionManager? + let videoPreviewLayer = AVCaptureVideoPreviewLayer() + weak var delegate: ScannerViewControllerDelegate? + var focusRectangle: FocusRectangleView! + let quadView = QuadrilateralView() + let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .dark)) + var flashEnabled = false + var deviceOrientationHelper = DeviceOrientationHelper() + var multipageSession:MultiPageScanSession! + var options:ImageScannerOptions! public override var prefersStatusBarHidden: Bool { return true @@ -114,8 +114,15 @@ public final class ScannerViewController: UIViewController { super.init(nibName: nil, bundle: nil) } + init() { + super.init(nibName: nil, bundle: nil) + } + + required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") + self.multipageSession = MultiPageScanSession() + self.options = ImageScannerOptions() + super.init(coder: aDecoder) } // MARK: - Life Cycle @@ -147,11 +154,7 @@ public final class ScannerViewController: UIViewController { captureSessionManager?.start() UIApplication.shared.isIdleTimerDisabled = true navigationController?.navigationBar.isTranslucent = true - navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) - navigationController?.navigationBar.addSubview(visualEffectView) - navigationController?.navigationBar.sendSubviewToBack(visualEffectView) - navigationController?.navigationBar.barStyle = .blackTranslucent - + navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) navigationController?.setToolbarHidden(true, animated: true) updateCounterButton() @@ -180,11 +183,6 @@ public final class ScannerViewController: UIViewController { public override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) UIApplication.shared.isIdleTimerDisabled = false - - visualEffectView.removeFromSuperview() - navigationController?.navigationBar.isTranslucent = false - navigationController?.navigationBar.barStyle = originalBarStyle ?? .default - guard let device = AVCaptureDevice.default(for: AVMediaType.video) else { return } if device.torchMode == .on { toggleFlash() @@ -394,7 +392,8 @@ public final class ScannerViewController: UIViewController { } @objc private func cancelImageScannerController() { - self.delegate?.scannerViewControllerDidCancel(self) +// self.delegate?.scannerViewControllerDidCancel(self) + self.navigationController?.popViewController(animated: true) } @objc private func counterImageScannerController(){ diff --git a/Podfile b/Podfile index 8803dd298d15be66d84f2227276c076ccf62ef9d..5ab5f4c8424c259c0266260477641f3015932aff 100644 --- a/Podfile +++ b/Podfile @@ -8,6 +8,7 @@ target 'MiniScanner' do # Pods for MiniScanner pod 'LanguageManager-iOS' pod 'IQKeyboardManagerSwift' + pod 'ImagePicker' post_install do |installer| diff --git a/Podfile.lock b/Podfile.lock index e3f77d72e1a7f27afac22a9f490be7155c70fe16..51278307aab4e57bb547b83800709729773c7341 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,20 +1,24 @@ PODS: + - ImagePicker (3.2.0) - IQKeyboardManagerSwift (7.0.3) - LanguageManager-iOS (1.2.7) DEPENDENCIES: + - ImagePicker - IQKeyboardManagerSwift - LanguageManager-iOS SPEC REPOS: trunk: + - ImagePicker - IQKeyboardManagerSwift - LanguageManager-iOS SPEC CHECKSUMS: + ImagePicker: 1d950bbb2422548ed58791b4ec7f42fe42920511 IQKeyboardManagerSwift: f9c5dc36cba16ddd2e51fa7d51c34a2e083029b5 LanguageManager-iOS: 6b2dbb3793445827114708f0759b76e96932d7c8 -PODFILE CHECKSUM: 144b9dcd597bb6f7ec4e403aff5675d2db4f19f1 +PODFILE CHECKSUM: 59f2191e004e9844b551fefec6ab23a2f539129e COCOAPODS: 1.14.3 diff --git a/Pods/ImagePicker/Images/AUTO@3x.png b/Pods/ImagePicker/Images/AUTO@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c0b0ca60d651973fcd9e0a9b5c30d62c52b36731 Binary files /dev/null and b/Pods/ImagePicker/Images/AUTO@3x.png differ diff --git a/Pods/ImagePicker/Images/OFF@3x.png b/Pods/ImagePicker/Images/OFF@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c0b0ca60d651973fcd9e0a9b5c30d62c52b36731 Binary files /dev/null and b/Pods/ImagePicker/Images/OFF@3x.png differ diff --git a/Pods/ImagePicker/Images/ON@3x.png b/Pods/ImagePicker/Images/ON@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..4f6dbf9b4e10893aa26e576667e414452362ceeb Binary files /dev/null and b/Pods/ImagePicker/Images/ON@3x.png differ diff --git a/Pods/ImagePicker/Images/cameraIcon@3x.png b/Pods/ImagePicker/Images/cameraIcon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..bd146fcc4f3970804f6b7c054a203270d75f41e5 Binary files /dev/null and b/Pods/ImagePicker/Images/cameraIcon@3x.png differ diff --git a/Pods/ImagePicker/Images/focusIcon@3x.png b/Pods/ImagePicker/Images/focusIcon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a0c2400c3417a23dd4b4a958ad627388c98e2880 Binary files /dev/null and b/Pods/ImagePicker/Images/focusIcon@3x.png differ diff --git a/Pods/ImagePicker/Images/selectedImageGallery@3x.png b/Pods/ImagePicker/Images/selectedImageGallery@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..45595cee5238772747a2d3df821024a9cf67ab4d Binary files /dev/null and b/Pods/ImagePicker/Images/selectedImageGallery@3x.png differ diff --git a/Pods/ImagePicker/Images/video@3x.png b/Pods/ImagePicker/Images/video@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..bede1c67cb08114b31201fa125e08bf9f08d3287 Binary files /dev/null and b/Pods/ImagePicker/Images/video@3x.png differ diff --git a/Pods/ImagePicker/LICENSE.md b/Pods/ImagePicker/LICENSE.md new file mode 100644 index 0000000000000000000000000000000000000000..65e9840763a469adb9866f507cf8fa87498fba54 --- /dev/null +++ b/Pods/ImagePicker/LICENSE.md @@ -0,0 +1,22 @@ +Licensed under the **MIT** license + +> Copyright (c) 2015 Hyper Interaktiv AS +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> "Software"), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Pods/ImagePicker/README.md b/Pods/ImagePicker/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e608ebdc3e9614cbcd3d3b5f6eeae41b4f4ece3d --- /dev/null +++ b/Pods/ImagePicker/README.md @@ -0,0 +1,98 @@ + + +[](https://github.com/Carthage/Carthage) +[](http://cocoadocs.org/docsets/ImagePicker) +[](http://cocoadocs.org/docsets/ImagePicker) + +## Description + +<img src="https://github.com/hyperoslo/ImagePicker/blob/master/Resources/ImagePickerIcon.png" alt="ImagePicker Icon" align="right" /> + +**ImagePicker** is an all-in-one camera solution for your iOS app. It lets your users select images from the library and take pictures at the same time. As a developer you get notified of all the user interactions and get the beautiful UI for free, out of the box, it's just that simple. + +**ImagePicker** has been optimized to give a great user experience, it passes around referenced images instead of the image itself which makes it less memory consuming. This is what makes it smooth as butter. + +## Usage + +**ImagePicker** works as a normal controller, just instantiate it and present it. + +```swift +let imagePickerController = ImagePickerController() +imagePickerController.delegate = self +present(imagePickerController, animated: true, completion: nil) +``` + +**ImagePicker** has three delegate methods that will inform you what the users are up to: + +```swift +func wrapperDidPress(_ imagePicker: ImagePickerController, images: [UIImage]) +func doneButtonDidPress(_ imagePicker: ImagePickerController, images: [UIImage]) +func cancelButtonDidPress(_ imagePicker: ImagePickerController) +``` + +**ImagePicker** supports limiting the amount of images that can be selected, it defaults +to zero, which means that the user can select as many images as he/she wants. + +```swift +let imagePickerController = ImagePickerController() +imagePickerController.imageLimit = 5 +``` + +### Optional bonus + +##### Configuration + +You can inject `Configuration` instance to ImagePicker, which allows you to configure text, colors, fonts and camera features + +```swift +var configuration = Configuration() +configuration.doneButtonTitle = "Finish" +configuration.noImagesTitle = "Sorry! There are no images here!" +configuration.recordLocation = false + +let imagePicker = ImagePickerController(configuration: configuration) +``` + +##### Resolve assets + +As said before, **ImagePicker** works with referenced images, that is really powerful because it lets you download the asset and choose the size you want. If you want to change the default implementation, just add a variable in your controller. + +```swift +public var imageAssets: [UIImage] { + return AssetManager.resolveAssets(imagePicker.stack.assets) +} +``` + +And when you call any delegate method that returns images, add in the first line: + +```swift +let images = imageAssets +``` + +## Installation + +**ImagePicker** is available through [CocoaPods](http://cocoapods.org). To install +it, simply add the following line to your Podfile: + +```ruby +pod 'ImagePicker' +``` + +**ImagePicker** is also available through [Carthage](https://github.com/Carthage/Carthage). +To install just write into your Cartfile: + +```ruby +github "hyperoslo/ImagePicker" +``` + +## Author + +[Hyper](http://hyper.no) made this with â¤ï¸ + +## Contribute + +We would love you to contribute to **ImagePicker**, check the [CONTRIBUTING](https://github.com/hyperoslo/ImagePicker/blob/master/CONTRIBUTING.md) file for more info. + +## License + +**ImagePicker** is available under the MIT license. See the [LICENSE](https://github.com/hyperoslo/ImagePicker/blob/master/LICENSE.md) file for more info. diff --git a/Pods/ImagePicker/Source/AssetManager.swift b/Pods/ImagePicker/Source/AssetManager.swift new file mode 100644 index 0000000000000000000000000000000000000000..1f50d068ea2fdda35eec12703eef4158e15aee29 --- /dev/null +++ b/Pods/ImagePicker/Source/AssetManager.swift @@ -0,0 +1,69 @@ +import Foundation +import UIKit +import Photos + +open class AssetManager { + + public static func getImage(_ name: String) -> UIImage { + let traitCollection = UITraitCollection(displayScale: 3) + var bundle = Bundle(for: AssetManager.self) + + if let resource = bundle.resourcePath, let resourceBundle = Bundle(path: resource + "/ImagePicker.bundle") { + bundle = resourceBundle + } + + return UIImage(named: name, in: bundle, compatibleWith: traitCollection) ?? UIImage() + } + + public static func fetch(withConfiguration configuration: Configuration1, _ completion: @escaping (_ assets: [PHAsset]) -> Void) { + guard PHPhotoLibrary.authorizationStatus() == .authorized else { return } + + DispatchQueue.global(qos: .background).async { + let fetchResult = configuration.allowVideoSelection + ? PHAsset.fetchAssets(with: PHFetchOptions()) + : PHAsset.fetchAssets(with: .image, options: PHFetchOptions()) + + if fetchResult.count > 0 { + var assets = [PHAsset]() + fetchResult.enumerateObjects({ object, _, _ in + assets.insert(object, at: 0) + }) + + DispatchQueue.main.async { + completion(assets) + } + } + } + } + + public static func resolveAsset(_ asset: PHAsset, size: CGSize = CGSize(width: 720, height: 1280), shouldPreferLowRes: Bool = false, completion: @escaping (_ image: UIImage?) -> Void) { + let imageManager = PHImageManager.default() + let requestOptions = PHImageRequestOptions() + requestOptions.deliveryMode = shouldPreferLowRes ? .fastFormat : .highQualityFormat + requestOptions.isNetworkAccessAllowed = true + + imageManager.requestImage(for: asset, targetSize: size, contentMode: .aspectFill, options: requestOptions) { image, info in + if let info = info, info["PHImageFileUTIKey"] == nil { + DispatchQueue.main.async(execute: { + completion(image) + }) + } + } + } + + public static func resolveAssets(_ assets: [PHAsset], size: CGSize = CGSize(width: 720, height: 1280)) -> [UIImage] { + let imageManager = PHImageManager.default() + let requestOptions = PHImageRequestOptions() + requestOptions.isSynchronous = true + + var images = [UIImage]() + for asset in assets { + imageManager.requestImage(for: asset, targetSize: size, contentMode: .aspectFill, options: requestOptions) { image, _ in + if let image = image { + images.append(image) + } + } + } + return images + } +} diff --git a/Pods/ImagePicker/Source/BottomView/BottomContainerView.swift b/Pods/ImagePicker/Source/BottomView/BottomContainerView.swift new file mode 100644 index 0000000000000000000000000000000000000000..57e62a2cfd281e1fc31991aca0e773cae5c5d031 --- /dev/null +++ b/Pods/ImagePicker/Source/BottomView/BottomContainerView.swift @@ -0,0 +1,128 @@ +import UIKit + +protocol BottomContainerViewDelegate: class { + + func pickerButtonDidPress() + func doneButtonDidPress() + func cancelButtonDidPress() + func imageStackViewDidPress() +} + +open class BottomContainerView: UIView { + + struct Dimensions { + static let height: CGFloat = 101 + } + + var configuration = Configuration1() + + lazy var pickerButton: ButtonPicker = { [unowned self] in + let pickerButton = ButtonPicker(configuration: self.configuration) + pickerButton.setTitleColor(UIColor.white, for: UIControl.State()) + pickerButton.delegate = self + pickerButton.numberLabel.isHidden = !self.configuration.showsImageCountLabel + + return pickerButton + }() + + lazy var borderPickerButton: UIView = { + let view = UIView() + view.backgroundColor = UIColor.clear + view.layer.borderColor = UIColor.white.cgColor + view.layer.borderWidth = ButtonPicker.Dimensions.borderWidth + view.layer.cornerRadius = ButtonPicker.Dimensions.buttonBorderSize / 2 + + return view + }() + + open lazy var doneButton: UIButton = { [unowned self] in + let button = UIButton() + button.setTitle(self.configuration.cancelButtonTitle, for: UIControl.State()) + button.titleLabel?.font = self.configuration.doneButton + button.addTarget(self, action: #selector(doneButtonDidPress(_:)), for: .touchUpInside) + + return button + }() + + lazy var stackView = ImageStackView(frame: CGRect(x: 0, y: 0, width: 80, height: 80)) + + lazy var topSeparator: UIView = { [unowned self] in + let view = UIView() + view.backgroundColor = self.configuration.backgroundColor + + return view + }() + + lazy var tapGestureRecognizer: UITapGestureRecognizer = { [unowned self] in + let gesture = UITapGestureRecognizer() + gesture.addTarget(self, action: #selector(handleTapGestureRecognizer(_:))) + + return gesture + }() + + weak var delegate: BottomContainerViewDelegate? + var pastCount = 0 + + // MARK: Initializers + + public init(configuration: Configuration1? = nil) { + if let configuration = configuration { + self.configuration = configuration + } + super.init(frame: .zero) + configure() + } + + public required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func configure() { + [borderPickerButton, pickerButton, doneButton, stackView, topSeparator].forEach { + addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + backgroundColor = configuration.backgroundColor + stackView.accessibilityLabel = "Image stack" + stackView.addGestureRecognizer(tapGestureRecognizer) + + setupConstraints() + } + + // MARK: - Action methods + + @objc func doneButtonDidPress(_ button: UIButton) { + if button.currentTitle == configuration.cancelButtonTitle { + delegate?.cancelButtonDidPress() + } else { + delegate?.doneButtonDidPress() + } + } + + @objc func handleTapGestureRecognizer(_ recognizer: UITapGestureRecognizer) { + delegate?.imageStackViewDidPress() + } + + fileprivate func animateImageView(_ imageView: UIImageView) { + imageView.transform = CGAffineTransform(scaleX: 0, y: 0) + + UIView.animate(withDuration: 0.3, animations: { + imageView.transform = CGAffineTransform(scaleX: 1.05, y: 1.05) + }, completion: { _ in + UIView.animate(withDuration: 0.2, animations: { + imageView.transform = CGAffineTransform.identity + }) + }) + } +} + +// MARK: - ButtonPickerDelegate methods + +@available(iOS 15.0, *) +extension BottomContainerView: ButtonPickerDelegate { + + func buttonDidPress() { + delegate?.pickerButtonDidPress() + } +} diff --git a/Pods/ImagePicker/Source/BottomView/ButtonPicker.swift b/Pods/ImagePicker/Source/BottomView/ButtonPicker.swift new file mode 100644 index 0000000000000000000000000000000000000000..e9dbb318c85705b0360e61edc978e0462c23b55f --- /dev/null +++ b/Pods/ImagePicker/Source/BottomView/ButtonPicker.swift @@ -0,0 +1,104 @@ +import UIKit + +protocol ButtonPickerDelegate: class { + + func buttonDidPress() +} + +class ButtonPicker: UIButton { + + struct Dimensions { + static let borderWidth: CGFloat = 2 + static let buttonSize: CGFloat = 58 + static let buttonBorderSize: CGFloat = 68 + } + + var configuration1 = Configuration1() + + lazy var numberLabel: UILabel = { [unowned self] in + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.font = self.configuration1.numberLabelFont + + return label + }() + + weak var delegate: ButtonPickerDelegate? + + // MARK: - Initializers + + public init(configuration: Configuration1? = nil) { + if let configuration = configuration { + self.configuration1 = configuration + } + super.init(frame: .zero) + configure() + } + + override init(frame: CGRect) { + super.init(frame: frame) + configure() + } + + func configure() { + addSubview(numberLabel) + + subscribe() + setupButton() + setupConstraints() + } + + deinit { + NotificationCenter.default.removeObserver(self) + } + + func subscribe() { + NotificationCenter.default.addObserver(self, + selector: #selector(recalculatePhotosCount(_:)), + name: NSNotification.Name(rawValue: ImageStack.Notifications.imageDidPush), + object: nil) + + NotificationCenter.default.addObserver(self, + selector: #selector(recalculatePhotosCount(_:)), + name: NSNotification.Name(rawValue: ImageStack.Notifications.imageDidDrop), + object: nil) + + NotificationCenter.default.addObserver(self, + selector: #selector(recalculatePhotosCount(_:)), + name: NSNotification.Name(rawValue: ImageStack.Notifications.stackDidReload), + object: nil) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Configuration + + func setupButton() { + backgroundColor = UIColor.white + layer.cornerRadius = Dimensions.buttonSize / 2 + accessibilityLabel = "Take photo" + addTarget(self, action: #selector(pickerButtonDidPress(_:)), for: .touchUpInside) + addTarget(self, action: #selector(pickerButtonDidHighlight(_:)), for: .touchDown) + } + + // MARK: - Actions + + @objc func recalculatePhotosCount(_ notification: Notification) { + guard let sender = notification.object as? ImageStack else { return } + numberLabel.text = sender.assets.isEmpty ? "" : String(sender.assets.count) + } + + @objc func pickerButtonDidPress(_ button: UIButton) { + backgroundColor = UIColor.white + numberLabel.textColor = UIColor.black + numberLabel.sizeToFit() + delegate?.buttonDidPress() + } + + @objc func pickerButtonDidHighlight(_ button: UIButton) { + numberLabel.textColor = UIColor.white + backgroundColor = UIColor(red: 0.3, green: 0.3, blue: 0.3, alpha: 1) + } +} diff --git a/Pods/ImagePicker/Source/BottomView/ImageStack.swift b/Pods/ImagePicker/Source/BottomView/ImageStack.swift new file mode 100644 index 0000000000000000000000000000000000000000..ec591a074cb70e77736a5bf254879f9e4b57b76a --- /dev/null +++ b/Pods/ImagePicker/Source/BottomView/ImageStack.swift @@ -0,0 +1,33 @@ +import UIKit +import Photos + +open class ImageStack { + + public struct Notifications { + public static let imageDidPush = "imageDidPush" + public static let imageDidDrop = "imageDidDrop" + public static let stackDidReload = "stackDidReload" + } + + open var assets = [PHAsset]() + fileprivate let imageKey = "image" + + open func pushAsset(_ asset: PHAsset) { + assets.append(asset) + NotificationCenter.default.post(name: Notification.Name(rawValue: Notifications.imageDidPush), object: self, userInfo: [imageKey: asset]) + } + + open func dropAsset(_ asset: PHAsset) { + assets = assets.filter {$0 != asset} + NotificationCenter.default.post(name: Notification.Name(rawValue: Notifications.imageDidDrop), object: self, userInfo: [imageKey: asset]) + } + + open func resetAssets(_ assetsArray: [PHAsset]) { + assets = assetsArray + NotificationCenter.default.post(name: Notification.Name(rawValue: Notifications.stackDidReload), object: self, userInfo: nil) + } + + open func containsAsset(_ asset: PHAsset) -> Bool { + return assets.contains(asset) + } +} diff --git a/Pods/ImagePicker/Source/BottomView/StackView.swift b/Pods/ImagePicker/Source/BottomView/StackView.swift new file mode 100644 index 0000000000000000000000000000000000000000..9402c8ba969e15bcf15f272e0de2f663594a052a --- /dev/null +++ b/Pods/ImagePicker/Source/BottomView/StackView.swift @@ -0,0 +1,174 @@ +import UIKit +import Photos + +protocol ImageStackViewDelegate: class { + func imageStackViewDidPress() +} + +class ImageStackView: UIView { + + struct Dimensions { + static let imageSize: CGFloat = 58 + } + + weak var delegate: ImageStackViewDelegate? + + lazy var activityView: UIActivityIndicatorView = { + let view = UIActivityIndicatorView() + view.alpha = 0.0 + + return view + }() + + var views: [UIImageView] = { + var array = [UIImageView]() + for _ in 0...3 { + let view = UIImageView() + view.layer.cornerRadius = 3 + view.layer.borderColor = UIColor.white.cgColor + view.layer.borderWidth = 1 + view.contentMode = .scaleAspectFill + view.clipsToBounds = true + view.alpha = 0 + array.append(view) + } + return array + }() + + // MARK: - Initializers + + override init(frame: CGRect) { + super.init(frame: frame) + + subscribe() + + views.forEach { addSubview($0) } + addSubview(activityView) + views.first?.alpha = 1 + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + deinit { + NotificationCenter.default.removeObserver(self) + } + + // MARK: - Helpers + + func subscribe() { + NotificationCenter.default.addObserver(self, + selector: #selector(imageDidPush(_:)), + name: NSNotification.Name(rawValue: ImageStack.Notifications.imageDidPush), + object: nil) + + NotificationCenter.default.addObserver(self, + selector: #selector(imageStackDidChangeContent(_:)), + name: NSNotification.Name(rawValue: ImageStack.Notifications.imageDidDrop), + object: nil) + + NotificationCenter.default.addObserver(self, + selector: #selector(imageStackDidChangeContent(_:)), + name: NSNotification.Name(rawValue: ImageStack.Notifications.stackDidReload), + object: nil) + } + + override func layoutSubviews() { + let step: CGFloat = -3.0 + let scale: CGFloat = 0.8 + let viewSize = CGSize(width: frame.width * scale, + height: frame.height * scale) + + let offset = -step * CGFloat(views.count) + var origin = CGPoint(x: offset, y: offset) + + for view in views { + origin.x += step + origin.y += step + view.frame = CGRect(origin: origin, size: viewSize) + } + } + + func startLoader() { + if let firstVisibleView = views.filter({ $0.alpha == 1.0 }).last { + activityView.frame.origin.x = firstVisibleView.center.x + activityView.frame.origin.y = firstVisibleView.center.y + } + + activityView.startAnimating() + UIView.animate(withDuration: 0.3, animations: { + self.activityView.alpha = 1.0 + }) + } +} + +extension ImageStackView { + + @objc func imageDidPush(_ notification: Notification) { + let emptyView = views.filter { $0.image == nil }.first + + if let emptyView = emptyView { + animateImageView(emptyView) + } + + if let sender = notification.object as? ImageStack { + renderViews(sender.assets) + activityView.stopAnimating() + } + } + + @objc func imageStackDidChangeContent(_ notification: Notification) { + if let sender = notification.object as? ImageStack { + renderViews(sender.assets) + activityView.stopAnimating() + } + } + + @objc func renderViews(_ assets: [PHAsset]) { + if let firstView = views.first, assets.isEmpty { + views.forEach { + $0.image = nil + $0.alpha = 0 + } + + firstView.alpha = 1 + return + } + + let photos = Array(assets.suffix(4)) + + for (index, view) in views.enumerated() { + if index <= photos.count - 1 { + AssetManager.resolveAsset(photos[index], size: CGSize(width: Dimensions.imageSize, height: Dimensions.imageSize)) { image in + view.image = image + } + view.alpha = 1 + } else { + view.image = nil + view.alpha = 0 + } + + if index == photos.count { + UIView.animate(withDuration: 0.3, animations: { + self.activityView.frame.origin = CGPoint(x: view.center.x + 3, y: view.center.x + 3) + }) + } + } + } + + fileprivate func animateImageView(_ imageView: UIImageView) { + imageView.transform = CGAffineTransform(scaleX: 0, y: 0) + + UIView.animate(withDuration: 0.3, animations: { + imageView.transform = CGAffineTransform(scaleX: 1.05, y: 1.05) + }, completion: { _ in + UIView.animate(withDuration: 0.2, animations: { () -> Void in + self.activityView.alpha = 0.0 + imageView.transform = CGAffineTransform.identity + }, completion: { _ in + self.activityView.stopAnimating() + }) + }) + } +} diff --git a/Pods/ImagePicker/Source/CameraView/CameraMan.swift b/Pods/ImagePicker/Source/CameraView/CameraMan.swift new file mode 100644 index 0000000000000000000000000000000000000000..8714823f6f9df000df844b1a43783b3c722964f3 --- /dev/null +++ b/Pods/ImagePicker/Source/CameraView/CameraMan.swift @@ -0,0 +1,250 @@ +import Foundation +import AVFoundation +import PhotosUI + +protocol CameraManDelegate: class { + func cameraManNotAvailable(_ cameraMan: CameraMan) + func cameraManDidStart(_ cameraMan: CameraMan) + func cameraMan(_ cameraMan: CameraMan, didChangeInput input: AVCaptureDeviceInput) +} + +class CameraMan { + weak var delegate: CameraManDelegate? + + let session = AVCaptureSession() + let queue = DispatchQueue(label: "no.hyper.ImagePicker.Camera.SessionQueue") + + var backCamera: AVCaptureDeviceInput? + var frontCamera: AVCaptureDeviceInput? + var stillImageOutput: AVCaptureStillImageOutput? + var startOnFrontCamera: Bool = false + + deinit { + stop() + } + + // MARK: - Setup + + func setup(_ startOnFrontCamera: Bool = false) { + self.startOnFrontCamera = startOnFrontCamera + checkPermission() + } + + func setupDevices() { + // Input + AVCaptureDevice + .devices() + .filter { + return $0.hasMediaType(AVMediaType.video) + }.forEach { + switch $0.position { + case .front: + self.frontCamera = try? AVCaptureDeviceInput(device: $0) + case .back: + self.backCamera = try? AVCaptureDeviceInput(device: $0) + default: + break + } + } + + // Output + stillImageOutput = AVCaptureStillImageOutput() + stillImageOutput?.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG] + } + + func addInput(_ input: AVCaptureDeviceInput) { + configurePreset(input) + + if session.canAddInput(input) { + session.addInput(input) + + DispatchQueue.main.async { + self.delegate?.cameraMan(self, didChangeInput: input) + } + } + } + + // MARK: - Permission + + func checkPermission() { + let status = AVCaptureDevice.authorizationStatus(for: AVMediaType.video) + + switch status { + case .authorized: + start() + case .notDetermined: + requestPermission() + default: + delegate?.cameraManNotAvailable(self) + } + } + + func requestPermission() { + AVCaptureDevice.requestAccess(for: AVMediaType.video) { granted in + DispatchQueue.main.async { + if granted { + self.start() + } else { + self.delegate?.cameraManNotAvailable(self) + } + } + } + } + + // MARK: - Session + + var currentInput: AVCaptureDeviceInput? { + return session.inputs.first as? AVCaptureDeviceInput + } + + fileprivate func start() { + // Devices + setupDevices() + + guard let input = (self.startOnFrontCamera) ? frontCamera ?? backCamera : backCamera, let output = stillImageOutput else { return } + + addInput(input) + + if session.canAddOutput(output) { + session.addOutput(output) + } + + queue.async { + self.session.startRunning() + + DispatchQueue.main.async { + self.delegate?.cameraManDidStart(self) + } + } + } + + func stop() { + self.session.stopRunning() + } + + func switchCamera(_ completion: (() -> Void)? = nil) { + guard let currentInput = currentInput + else { + completion?() + return + } + + queue.async { + guard let input = (currentInput == self.backCamera) ? self.frontCamera : self.backCamera + else { + DispatchQueue.main.async { + completion?() + } + return + } + + self.configure { + self.session.removeInput(currentInput) + self.addInput(input) + } + + DispatchQueue.main.async { + completion?() + } + } + } + + func takePhoto(_ previewLayer: AVCaptureVideoPreviewLayer, location: CLLocation?, completion: (() -> Void)? = nil) { + guard let connection = stillImageOutput?.connection(with: AVMediaType.video) else { return } + + connection.videoOrientation = Helper.videoOrientation() + + queue.async { + self.stillImageOutput?.captureStillImageAsynchronously(from: connection) { buffer, error in + guard let buffer = buffer, error == nil && CMSampleBufferIsValid(buffer), + let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer), + let image = UIImage(data: imageData) + else { + DispatchQueue.main.async { + completion?() + } + return + } + + self.savePhoto(image, location: location, completion: completion) + } + } + } + + func savePhoto(_ image: UIImage, location: CLLocation?, completion: (() -> Void)? = nil) { + PHPhotoLibrary.shared().performChanges({ + let request = PHAssetChangeRequest.creationRequestForAsset(from: image) + request.creationDate = Date() + request.location = location + }, completionHandler: { (_, _) in + DispatchQueue.main.async { + completion?() + } + }) + } + + func flash(_ mode: AVCaptureDevice.FlashMode) { + guard let device = currentInput?.device, device.isFlashModeSupported(mode) else { return } + + queue.async { + self.lock { + device.flashMode = mode + } + } + } + + func focus(_ point: CGPoint) { + guard let device = currentInput?.device, device.isFocusModeSupported(AVCaptureDevice.FocusMode.locked) else { return } + + queue.async { + self.lock { + device.focusPointOfInterest = point + } + } + } + + func zoom(_ zoomFactor: CGFloat) { + guard let device = currentInput?.device, device.position == .back else { return } + + queue.async { + self.lock { + device.videoZoomFactor = zoomFactor + } + } + } + + // MARK: - Lock + + func lock(_ block: () -> Void) { + if let device = currentInput?.device, (try? device.lockForConfiguration()) != nil { + block() + device.unlockForConfiguration() + } + } + + // MARK: - Configure + func configure(_ block: () -> Void) { + session.beginConfiguration() + block() + session.commitConfiguration() + } + + // MARK: - Preset + + func configurePreset(_ input: AVCaptureDeviceInput) { + for asset in preferredPresets() { + if input.device.supportsSessionPreset(AVCaptureSession.Preset(rawValue: asset)) && self.session.canSetSessionPreset(AVCaptureSession.Preset(rawValue: asset)) { + self.session.sessionPreset = AVCaptureSession.Preset(rawValue: asset) + return + } + } + } + + func preferredPresets() -> [String] { + return [ + AVCaptureSession.Preset.high.rawValue, + AVCaptureSession.Preset.high.rawValue, + AVCaptureSession.Preset.low.rawValue + ] + } +} diff --git a/Pods/ImagePicker/Source/CameraView/CameraView.swift b/Pods/ImagePicker/Source/CameraView/CameraView.swift new file mode 100644 index 0000000000000000000000000000000000000000..766a8c616ec51d95d2abde1c6d5a8223b3403d53 --- /dev/null +++ b/Pods/ImagePicker/Source/CameraView/CameraView.swift @@ -0,0 +1,323 @@ +import UIKit +import AVFoundation +import PhotosUI + +protocol CameraViewDelegate: class { + + func setFlashButtonHidden(_ hidden: Bool) + func imageToLibrary() + func cameraNotAvailable() +} + +class CameraView: UIViewController, CLLocationManagerDelegate, CameraManDelegate { + + var configuration = Configuration1() + + lazy var blurView: UIVisualEffectView = { [unowned self] in + let effect = UIBlurEffect(style: .dark) + let blurView = UIVisualEffectView(effect: effect) + + return blurView + }() + + lazy var focusImageView: UIImageView = { [unowned self] in + let imageView = UIImageView() + imageView.image = AssetManager.getImage("focusIcon") + imageView.backgroundColor = UIColor.clear + imageView.frame = CGRect(x: 0, y: 0, width: 110, height: 110) + imageView.alpha = 0 + + return imageView + }() + + lazy var capturedImageView: UIView = { [unowned self] in + let view = UIView() + view.backgroundColor = UIColor.black + view.alpha = 0 + + return view + }() + + lazy var containerView: UIView = { + let view = UIView() + view.alpha = 0 + + return view + }() + + lazy var noCameraLabel: UILabel = { [unowned self] in + let label = UILabel() + label.font = self.configuration.noCameraFont + label.textColor = self.configuration.noCameraColor + label.text = self.configuration.noCameraTitle + label.sizeToFit() + + return label + }() + + lazy var noCameraButton: UIButton = { [unowned self] in + let button = UIButton(type: .system) + let title = NSAttributedString(string: self.configuration.settingsTitle, + attributes: [ + NSAttributedString.Key.font: self.configuration.settingsFont, + NSAttributedString.Key.foregroundColor: self.configuration.settingsColor + ]) + + button.setAttributedTitle(title, for: UIControl.State()) + button.contentEdgeInsets = UIEdgeInsets(top: 5.0, left: 10.0, bottom: 5.0, right: 10.0) + button.sizeToFit() + button.layer.borderColor = self.configuration.settingsColor.cgColor + button.layer.borderWidth = 1 + button.layer.cornerRadius = 4 + button.addTarget(self, action: #selector(settingsButtonDidTap), for: .touchUpInside) + + return button + }() + + lazy var tapGestureRecognizer: UITapGestureRecognizer = { [unowned self] in + let gesture = UITapGestureRecognizer() + gesture.addTarget(self, action: #selector(tapGestureRecognizerHandler(_:))) + + return gesture + }() + + lazy var pinchGestureRecognizer: UIPinchGestureRecognizer = { [unowned self] in + let gesture = UIPinchGestureRecognizer() + gesture.addTarget(self, action: #selector(pinchGestureRecognizerHandler(_:))) + + return gesture + }() + + let cameraMan = CameraMan() + + var previewLayer: AVCaptureVideoPreviewLayer? + weak var delegate: CameraViewDelegate? + var animationTimer: Timer? + var locationManager: LocationManager? + var startOnFrontCamera: Bool = false + + private let minimumZoomFactor: CGFloat = 1.0 + private let maximumZoomFactor: CGFloat = 3.0 + + private var currentZoomFactor: CGFloat = 1.0 + private var previousZoomFactor: CGFloat = 1.0 + + public init(configuration: Configuration1? = nil) { + if let configuration = configuration { + self.configuration = configuration + } + super.init(nibName: nil, bundle: nil) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() { + super.viewDidLoad() + + if configuration.recordLocation { + locationManager = LocationManager() + } + + view.backgroundColor = configuration.mainColor + + view.addSubview(containerView) + containerView.addSubview(blurView) + + [focusImageView, capturedImageView].forEach { + view.addSubview($0) + } + + view.addGestureRecognizer(tapGestureRecognizer) + + if configuration.allowPinchToZoom { + view.addGestureRecognizer(pinchGestureRecognizer) + } + + cameraMan.delegate = self + cameraMan.setup(self.startOnFrontCamera) + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + previewLayer?.connection?.videoOrientation = .portrait + locationManager?.startUpdatingLocation() + } + + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + locationManager?.stopUpdatingLocation() + } + + func setupPreviewLayer() { + let layer = AVCaptureVideoPreviewLayer(session: cameraMan.session) + + layer.backgroundColor = configuration.mainColor.cgColor + layer.autoreverses = true + layer.videoGravity = AVLayerVideoGravity.resizeAspectFill + + view.layer.insertSublayer(layer, at: 0) + layer.frame = view.layer.frame + view.clipsToBounds = true + + previewLayer = layer + } + + // MARK: - Layout + + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + + let centerX = view.bounds.width / 2 + + noCameraLabel.center = CGPoint(x: centerX, + y: view.bounds.height / 2 - 80) + + noCameraButton.center = CGPoint(x: centerX, + y: noCameraLabel.frame.maxY + 20) + + blurView.frame = view.bounds + containerView.frame = view.bounds + capturedImageView.frame = view.bounds + } + + // MARK: - Actions + + @objc func settingsButtonDidTap() { + DispatchQueue.main.async { + if let settingsURL = URL(string: UIApplication.openSettingsURLString) { + UIApplication.shared.openURL(settingsURL) + } + } + } + + // MARK: - Camera actions + + func rotateCamera() { + UIView.animate(withDuration: 0.3, animations: { + self.containerView.alpha = 1 + }, completion: { _ in + self.cameraMan.switchCamera { + UIView.animate(withDuration: 0.7, animations: { + self.containerView.alpha = 0 + }) + } + }) + } + + func flashCamera(_ title: String) { + let mapping: [String: AVCaptureDevice.FlashMode] = [ + "ON": .on, + "OFF": .off + ] + + cameraMan.flash(mapping[title] ?? .auto) + } + + func takePicture(_ completion: @escaping () -> Void) { + guard let previewLayer = previewLayer else { return } + + UIView.animate(withDuration: 0.1, animations: { + self.capturedImageView.alpha = 1 + }, completion: { _ in + UIView.animate(withDuration: 0.1, animations: { + self.capturedImageView.alpha = 0 + }) + }) + + cameraMan.takePhoto(previewLayer, location: locationManager?.latestLocation) { + completion() + self.delegate?.imageToLibrary() + } + } + + // MARK: - Timer methods + + @objc func timerDidFire() { + UIView.animate(withDuration: 0.3, animations: { [unowned self] in + self.focusImageView.alpha = 0 + }, completion: { _ in + self.focusImageView.transform = CGAffineTransform.identity + }) + } + + // MARK: - Camera methods + + func focusTo(_ point: CGPoint) { + let convertedPoint = CGPoint(x: point.x / UIScreen.main.bounds.width, + y: point.y / UIScreen.main.bounds.height) + + cameraMan.focus(convertedPoint) + + focusImageView.center = point + UIView.animate(withDuration: 0.5, animations: { + self.focusImageView.alpha = 1 + self.focusImageView.transform = CGAffineTransform(scaleX: 0.6, y: 0.6) + }, completion: { _ in + self.animationTimer = Timer.scheduledTimer(timeInterval: 1, target: self, + selector: #selector(CameraView.timerDidFire), userInfo: nil, repeats: false) + }) + } + + func zoomTo(_ zoomFactor: CGFloat) { + guard let device = cameraMan.currentInput?.device else { return } + + let maximumDeviceZoomFactor = device.activeFormat.videoMaxZoomFactor + let newZoomFactor = previousZoomFactor * zoomFactor + currentZoomFactor = min(maximumZoomFactor, max(minimumZoomFactor, min(newZoomFactor, maximumDeviceZoomFactor))) + + cameraMan.zoom(currentZoomFactor) + } + + // MARK: - Tap + + @objc func tapGestureRecognizerHandler(_ gesture: UITapGestureRecognizer) { + let touch = gesture.location(in: view) + + focusImageView.transform = CGAffineTransform.identity + animationTimer?.invalidate() + focusTo(touch) + } + + // MARK: - Pinch + + @objc func pinchGestureRecognizerHandler(_ gesture: UIPinchGestureRecognizer) { + switch gesture.state { + case .began: + fallthrough + case .changed: + zoomTo(gesture.scale) + case .ended: + zoomTo(gesture.scale) + previousZoomFactor = currentZoomFactor + default: break + } + } + + // MARK: - Private helpers + + func showNoCamera(_ show: Bool) { + [noCameraButton, noCameraLabel].forEach { + show ? view.addSubview($0) : $0.removeFromSuperview() + } + } + + // CameraManDelegate + func cameraManNotAvailable(_ cameraMan: CameraMan) { + showNoCamera(true) + focusImageView.isHidden = true + delegate?.cameraNotAvailable() + } + + func cameraMan(_ cameraMan: CameraMan, didChangeInput input: AVCaptureDeviceInput) { + if !configuration.flashButtonAlwaysHidden { + delegate?.setFlashButtonHidden(!input.device.hasFlash) + } + } + + func cameraManDidStart(_ cameraMan: CameraMan) { + setupPreviewLayer() + } +} diff --git a/Pods/ImagePicker/Source/Configuration.swift b/Pods/ImagePicker/Source/Configuration.swift new file mode 100644 index 0000000000000000000000000000000000000000..b1a35a5515a0364db87fef4aa811f10e73f87f98 --- /dev/null +++ b/Pods/ImagePicker/Source/Configuration.swift @@ -0,0 +1,111 @@ +import AVFoundation +import UIKit + +@objc public class Configuration1: NSObject { + + // MARK: Colors + + @objc public var backgroundColor = UIColor(red: 0.15, green: 0.19, blue: 0.24, alpha: 1) + @objc public var gallerySeparatorColor = UIColor.black.withAlphaComponent(0.6) + @objc public var mainColor = UIColor(red: 0.09, green: 0.11, blue: 0.13, alpha: 1) + @objc public var noImagesColor = UIColor(red: 0.86, green: 0.86, blue: 0.86, alpha: 1) + @objc public var noCameraColor = UIColor(red: 0.86, green: 0.86, blue: 0.86, alpha: 1) + @objc public var settingsColor = UIColor.white + @objc public var bottomContainerColor = UIColor(red: 0.09, green: 0.11, blue: 0.13, alpha: 1) + + // MARK: Fonts + + @objc public var numberLabelFont = UIFont.systemFont(ofSize: 19, weight: UIFont.Weight.bold) + @objc public var doneButton = UIFont.systemFont(ofSize: 19, weight: UIFont.Weight.medium) + @objc public var flashButton = UIFont.systemFont(ofSize: 12, weight: UIFont.Weight.medium) + @objc public var noImagesFont = UIFont.systemFont(ofSize: 18, weight: UIFont.Weight.medium) + @objc public var noCameraFont = UIFont.systemFont(ofSize: 18, weight: UIFont.Weight.medium) + @objc public var settingsFont = UIFont.systemFont(ofSize: 16, weight: UIFont.Weight.medium) + + // MARK: Titles + + @objc public var OKButtonTitle = "OK" + @objc public var cancelButtonTitle = "Cancel" + @objc public var doneButtonTitle = "Done" + @objc public var noImagesTitle = "No images available" + @objc public var noCameraTitle = "Camera is not available" + @objc public var settingsTitle = "Settings" + @objc public var requestPermissionTitle = "Permission denied" + @objc public var requestPermissionMessage = "Please, allow the application to access to your photo library." + + // MARK: Dimensions + + @objc public var cellSpacing: CGFloat = 2 + @objc public var indicatorWidth: CGFloat = 41 + @objc public var indicatorHeight: CGFloat = 8 + + // MARK: Custom behaviour + + @objc public var canRotateCamera = true + @objc public var collapseCollectionViewWhileShot = true + @objc public var recordLocation = true + @objc public var allowMultiplePhotoSelection = true + @objc public var allowVideoSelection = false + @objc public var showsImageCountLabel = true + @objc public var flashButtonAlwaysHidden = false + @objc public var managesAudioSession = true + @objc public var allowPinchToZoom = true + @objc public var allowedOrientations = UIInterfaceOrientationMask.all + @objc public var allowVolumeButtonsToTakePicture = true + @objc public var useLowResolutionPreviewImage = false + + // MARK: Images + @objc public var indicatorView: UIView = { + let view = UIView() + view.backgroundColor = UIColor.white.withAlphaComponent(0.6) + view.layer.cornerRadius = 4 + view.translatesAutoresizingMaskIntoConstraints = false + return view + }() + + override public init() {} +} + +// MARK: - Orientation +extension Configuration1 { + + @objc public var rotationTransform: CGAffineTransform { + let currentOrientation = UIDevice.current.orientation + + // check if current orientation is allowed + switch currentOrientation { + case .portrait: + if allowedOrientations.contains(.portrait) { + Helper.previousOrientation = currentOrientation + } + case .portraitUpsideDown: + if allowedOrientations.contains(.portraitUpsideDown) { + Helper.previousOrientation = currentOrientation + } + case .landscapeLeft: + if allowedOrientations.contains(.landscapeLeft) { + Helper.previousOrientation = currentOrientation + } + case .landscapeRight: + if allowedOrientations.contains(.landscapeRight) { + Helper.previousOrientation = currentOrientation + } + default: break + } + + // set default orientation if current orientation is not allowed + if Helper.previousOrientation == .unknown { + if allowedOrientations.contains(.portrait) { + Helper.previousOrientation = .portrait + } else if allowedOrientations.contains(.landscapeLeft) { + Helper.previousOrientation = .landscapeLeft + } else if allowedOrientations.contains(.landscapeRight) { + Helper.previousOrientation = .landscapeRight + } else if allowedOrientations.contains(.portraitUpsideDown) { + Helper.previousOrientation = .portraitUpsideDown + } + } + + return Helper.getTransform(fromDeviceOrientation: Helper.previousOrientation) + } +} diff --git a/Pods/ImagePicker/Source/Extensions/ConstraintsSetup.swift b/Pods/ImagePicker/Source/Extensions/ConstraintsSetup.swift new file mode 100644 index 0000000000000000000000000000000000000000..119877feca6b228ad77c24698203488de1899135 --- /dev/null +++ b/Pods/ImagePicker/Source/Extensions/ConstraintsSetup.swift @@ -0,0 +1,190 @@ +import UIKit + +// MARK: - BottomContainer autolayout + +extension BottomContainerView { + + func setupConstraints() { + + for attribute: NSLayoutConstraint.Attribute in [.centerX, .centerY] { + addConstraint(NSLayoutConstraint(item: pickerButton, attribute: attribute, + relatedBy: .equal, toItem: self, attribute: attribute, + multiplier: 1, constant: 0)) + + addConstraint(NSLayoutConstraint(item: borderPickerButton, attribute: attribute, + relatedBy: .equal, toItem: self, attribute: attribute, + multiplier: 1, constant: 0)) + } + + for attribute: NSLayoutConstraint.Attribute in [.width, .left, .top] { + addConstraint(NSLayoutConstraint(item: topSeparator, attribute: attribute, + relatedBy: .equal, toItem: self, attribute: attribute, + multiplier: 1, constant: 0)) + } + + for attribute: NSLayoutConstraint.Attribute in [.width, .height] { + addConstraint(NSLayoutConstraint(item: pickerButton, attribute: attribute, + relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, + multiplier: 1, constant: ButtonPicker.Dimensions.buttonSize)) + + addConstraint(NSLayoutConstraint(item: borderPickerButton, attribute: attribute, + relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, + multiplier: 1, constant: ButtonPicker.Dimensions.buttonBorderSize)) + + addConstraint(NSLayoutConstraint(item: stackView, attribute: attribute, + relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, + multiplier: 1, constant: ImageStackView.Dimensions.imageSize)) + } + + addConstraint(NSLayoutConstraint(item: doneButton, attribute: .centerY, + relatedBy: .equal, toItem: self, attribute: .centerY, + multiplier: 1, constant: 0)) + + addConstraint(NSLayoutConstraint(item: stackView, attribute: .centerY, + relatedBy: .equal, toItem: self, attribute: .centerY, + multiplier: 1, constant: -2)) + + let screenSize = Helper.screenSizeForOrientation() + + addConstraint(NSLayoutConstraint(item: doneButton, attribute: .centerX, + relatedBy: .equal, toItem: self, attribute: .right, + multiplier: 1, constant: -(screenSize.width - (ButtonPicker.Dimensions.buttonBorderSize + screenSize.width)/2)/2)) + + addConstraint(NSLayoutConstraint(item: stackView, attribute: .centerX, + relatedBy: .equal, toItem: self, attribute: .left, + multiplier: 1, constant: screenSize.width/4 - ButtonPicker.Dimensions.buttonBorderSize/3)) + + addConstraint(NSLayoutConstraint(item: topSeparator, attribute: .height, + relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, + multiplier: 1, constant: 1)) + } +} + +// MARK: - TopView autolayout + +extension TopView { + + func setupConstraints() { + addConstraint(NSLayoutConstraint(item: flashButton, attribute: .left, + relatedBy: .equal, toItem: self, attribute: .left, + multiplier: 1, constant: Dimensions.leftOffset)) + + addConstraint(NSLayoutConstraint(item: flashButton, attribute: .centerY, + relatedBy: .equal, toItem: self, attribute: .centerY, + multiplier: 1, constant: 0)) + + addConstraint(NSLayoutConstraint(item: flashButton, attribute: .width, + relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, + multiplier: 1, constant: 55)) + + if configuration.canRotateCamera { + addConstraint(NSLayoutConstraint(item: rotateCamera, attribute: .right, + relatedBy: .equal, toItem: self, attribute: .right, + multiplier: 1, constant: Dimensions.rightOffset)) + + addConstraint(NSLayoutConstraint(item: rotateCamera, attribute: .centerY, + relatedBy: .equal, toItem: self, attribute: .centerY, + multiplier: 1, constant: 0)) + + addConstraint(NSLayoutConstraint(item: rotateCamera, attribute: .width, + relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, + multiplier: 1, constant: 55)) + + addConstraint(NSLayoutConstraint(item: rotateCamera, attribute: .height, + relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, + multiplier: 1, constant: 55)) + } + } +} + +// MARK: - Controller autolayout + +extension ImagePickerController { + + func setupConstraints() { + let attributes: [NSLayoutConstraint.Attribute] = [.bottom, .right, .width] + let topViewAttributes: [NSLayoutConstraint.Attribute] = [.left, .width] + + for attribute in attributes { + view.addConstraint(NSLayoutConstraint(item: bottomContainer, attribute: attribute, + relatedBy: .equal, toItem: view, attribute: attribute, + multiplier: 1, constant: 0)) + } + + for attribute: NSLayoutConstraint.Attribute in [.left, .top, .width] { + view.addConstraint(NSLayoutConstraint(item: cameraController.view!, attribute: attribute, + relatedBy: .equal, toItem: view, attribute: attribute, + multiplier: 1, constant: 0)) + } + + for attribute in topViewAttributes { + view.addConstraint(NSLayoutConstraint(item: topView, attribute: attribute, + relatedBy: .equal, toItem: self.view, attribute: attribute, + multiplier: 1, constant: 0)) + } + + if #available(iOS 11.0, *) { + view.addConstraint(NSLayoutConstraint(item: topView, attribute: .top, + relatedBy: .equal, toItem: view.safeAreaLayoutGuide, + attribute: .top, + multiplier: 1, constant: 0)) + } else { + view.addConstraint(NSLayoutConstraint(item: topView, attribute: .top, + relatedBy: .equal, toItem: view, + attribute: .top, + multiplier: 1, constant: 0)) + } + + if #available(iOS 11.0, *) { + let heightPadding = UIApplication.shared.keyWindow!.safeAreaInsets.bottom + view.addConstraint(NSLayoutConstraint(item: bottomContainer, attribute: .height, + relatedBy: .equal, toItem: nil, + attribute: .notAnAttribute, + multiplier: 1, + constant: BottomContainerView.Dimensions.height + heightPadding)) + } else { + view.addConstraint(NSLayoutConstraint(item: bottomContainer, attribute: .height, + relatedBy: .equal, toItem: nil, + attribute: .notAnAttribute, + multiplier: 1, + constant: BottomContainerView.Dimensions.height)) + } + + view.addConstraint(NSLayoutConstraint(item: topView, attribute: .height, + relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, + multiplier: 1, constant: TopView.Dimensions.height)) + + view.addConstraint(NSLayoutConstraint(item: cameraController.view!, attribute: .height, + relatedBy: .equal, toItem: view, attribute: .height, + multiplier: 1, constant: -BottomContainerView.Dimensions.height)) + } +} + +extension ImageGalleryViewCell { + + func setupConstraints() { + + for attribute: NSLayoutConstraint.Attribute in [.width, .height, .centerX, .centerY] { + addConstraint(NSLayoutConstraint(item: imageView, attribute: attribute, + relatedBy: .equal, toItem: self, attribute: attribute, + multiplier: 1, constant: 0)) + + addConstraint(NSLayoutConstraint(item: selectedImageView, attribute: attribute, + relatedBy: .equal, toItem: self, attribute: attribute, + multiplier: 1, constant: 0)) + } + } +} + +extension ButtonPicker { + + func setupConstraints() { + let attributes: [NSLayoutConstraint.Attribute] = [.centerX, .centerY] + + for attribute in attributes { + addConstraint(NSLayoutConstraint(item: numberLabel, attribute: attribute, + relatedBy: .equal, toItem: self, attribute: attribute, + multiplier: 1, constant: 0)) + } + } +} diff --git a/Pods/ImagePicker/Source/Helper.swift b/Pods/ImagePicker/Source/Helper.swift new file mode 100644 index 0000000000000000000000000000000000000000..780950f95930957db879e6071973eb5587b6ffce --- /dev/null +++ b/Pods/ImagePicker/Source/Helper.swift @@ -0,0 +1,47 @@ +import UIKit +import AVFoundation + +struct Helper { + + static var previousOrientation = UIDeviceOrientation.unknown + + static func getTransform(fromDeviceOrientation orientation: UIDeviceOrientation) -> CGAffineTransform { + switch orientation { + case .landscapeLeft: + return CGAffineTransform(rotationAngle: CGFloat.pi * 0.5) + case .landscapeRight: + return CGAffineTransform(rotationAngle: -(CGFloat.pi * 0.5)) + case .portraitUpsideDown: + return CGAffineTransform(rotationAngle: CGFloat.pi) + default: + return CGAffineTransform.identity + } + } + + static func getVideoOrientation(fromDeviceOrientation orientation: UIDeviceOrientation) -> AVCaptureVideoOrientation { + switch orientation { + case .landscapeLeft: + return .landscapeRight + case .landscapeRight: + return .landscapeLeft + case .portraitUpsideDown: + return .portraitUpsideDown + default: + return .portrait + } + } + + static func videoOrientation() -> AVCaptureVideoOrientation { + return getVideoOrientation(fromDeviceOrientation: previousOrientation) + } + + static func screenSizeForOrientation() -> CGSize { + switch UIDevice.current.orientation { + case .landscapeLeft, .landscapeRight: + return CGSize(width: UIScreen.main.bounds.height, + height: UIScreen.main.bounds.width) + default: + return UIScreen.main.bounds.size + } + } +} diff --git a/Pods/ImagePicker/Source/ImageGallery/ImageGalleryLayout.swift b/Pods/ImagePicker/Source/ImageGallery/ImageGalleryLayout.swift new file mode 100644 index 0000000000000000000000000000000000000000..5d31a44b95187d9935036b9e19e99d25847a54cb --- /dev/null +++ b/Pods/ImagePicker/Source/ImageGallery/ImageGalleryLayout.swift @@ -0,0 +1,30 @@ +import UIKit + +class ImageGalleryLayout: UICollectionViewFlowLayout { + + let configuration: Configuration1 + + init(configuration: Configuration1) { + self.configuration = configuration + super.init() + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { + guard let attributes = super.layoutAttributesForElements(in: rect) else { + return super.layoutAttributesForElements(in: rect) + } + + let newAttributes = attributes.map({ (attribute) -> UICollectionViewLayoutAttributes in + // swiftlint:disable force_cast + let newAttribute = attribute.copy() as! UICollectionViewLayoutAttributes + newAttribute.transform = configuration.rotationTransform + return newAttribute + }) + + return newAttributes + } +} diff --git a/Pods/ImagePicker/Source/ImageGallery/ImageGalleryView.swift b/Pods/ImagePicker/Source/ImageGallery/ImageGalleryView.swift new file mode 100644 index 0000000000000000000000000000000000000000..1bb72be7e2cedcdd714e8b9172d2c3d242296ea8 --- /dev/null +++ b/Pods/ImagePicker/Source/ImageGallery/ImageGalleryView.swift @@ -0,0 +1,255 @@ +import UIKit +import Photos + +private func < <T: Comparable>(lhs: T?, rhs: T?) -> Bool { + switch (lhs, rhs) { + case let (someLhs?, someRhs?): + return someLhs < someRhs + case (nil, _?): + return true + default: + return false + } +} + +protocol ImageGalleryPanGestureDelegate: class { + + func panGestureDidStart() + func panGestureDidChange(_ translation: CGPoint) + func panGestureDidEnd(_ translation: CGPoint, velocity: CGPoint) +} + +open class ImageGalleryView: UIView { + + struct Dimensions { + static let galleryHeight: CGFloat = 160 + static let galleryBarHeight: CGFloat = 24 + } + + var configuration1 = Configuration1() + + lazy open var collectionView: UICollectionView = { [unowned self] in + let collectionView = UICollectionView(frame: CGRect.zero, + collectionViewLayout: self.collectionViewLayout) + collectionView.translatesAutoresizingMaskIntoConstraints = false + collectionView.backgroundColor = self.configuration1.mainColor + collectionView.showsHorizontalScrollIndicator = false + collectionView.dataSource = self + collectionView.delegate = self + + return collectionView + }() + + lazy var collectionViewLayout: UICollectionViewLayout = { [unowned self] in + let layout = ImageGalleryLayout(configuration: self.configuration1) + layout.scrollDirection = .horizontal + layout.minimumInteritemSpacing = self.configuration1.cellSpacing + layout.minimumLineSpacing = 2 + layout.sectionInset = UIEdgeInsets.zero + + return layout + }() + + lazy var topSeparator: UIView = { [unowned self] in + let view = UIView() + view.translatesAutoresizingMaskIntoConstraints = false + view.addGestureRecognizer(self.panGestureRecognizer) + view.backgroundColor = self.configuration1.gallerySeparatorColor + + return view + }() + + lazy var panGestureRecognizer: UIPanGestureRecognizer = { [unowned self] in + let gesture = UIPanGestureRecognizer() + gesture.addTarget(self, action: #selector(handlePanGestureRecognizer(_:))) + + return gesture + }() + + open lazy var noImagesLabel: UILabel = { [unowned self] in + let label = UILabel() + label.font = self.configuration1.noImagesFont + label.textColor = self.configuration1.noImagesColor + label.text = self.configuration1.noImagesTitle + label.alpha = 0 + label.sizeToFit() + self.addSubview(label) + + return label + }() + + open lazy var selectedStack = ImageStack() + lazy var assets = [PHAsset]() + + weak var delegate: ImageGalleryPanGestureDelegate? + var collectionSize: CGSize? + var shouldTransform = false + var imagesBeforeLoading = 0 + var fetchResult: PHFetchResult<AnyObject>? + var imageLimit = 0 + + // MARK: - Initializers + + public init(configuration: Configuration1? = nil) { + if let configuration = configuration { + self.configuration1 = configuration + } + super.init(frame: .zero) + configure() + } + + override init(frame: CGRect) { + super.init(frame: frame) + configure() + } + + required public init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func configure() { + backgroundColor = configuration1.mainColor + + collectionView.register(ImageGalleryViewCell.self, + forCellWithReuseIdentifier: CollectionView.reusableIdentifier) + + [collectionView, topSeparator].forEach { addSubview($0) } + + topSeparator.addSubview(configuration1.indicatorView) + + imagesBeforeLoading = 0 + fetchPhotos() + } + + // MARK: - Layout + + open override func layoutSubviews() { + super.layoutSubviews() + updateNoImagesLabel() + } + + func updateFrames() { + let totalWidth = UIScreen.main.bounds.width + frame.size.width = totalWidth + let collectionFrame = frame.height == Dimensions.galleryBarHeight ? 100 + Dimensions.galleryBarHeight : frame.height + topSeparator.frame = CGRect(x: 0, y: 0, width: totalWidth, height: Dimensions.galleryBarHeight) + topSeparator.autoresizingMask = [.flexibleLeftMargin, .flexibleRightMargin, .flexibleWidth] + configuration1.indicatorView.frame = CGRect(x: (totalWidth - configuration1.indicatorWidth) / 2, y: (topSeparator.frame.height - configuration1.indicatorHeight) / 2, + width: configuration1.indicatorWidth, height: configuration1.indicatorHeight) + collectionView.frame = CGRect(x: 0, y: topSeparator.frame.height, width: totalWidth, height: collectionFrame - topSeparator.frame.height) + collectionSize = CGSize(width: collectionView.frame.height, height: collectionView.frame.height) + noImagesLabel.center = CGPoint(x: bounds.width / 2, y: (bounds.height + Dimensions.galleryBarHeight) / 2) + + collectionView.reloadData() + } + + func updateNoImagesLabel() { + let height = bounds.height + let threshold = Dimensions.galleryBarHeight * 2 + + UIView.animate(withDuration: 0.25, animations: { + if threshold > height || self.collectionView.alpha != 0 { + self.noImagesLabel.alpha = 0 + } else { + self.noImagesLabel.center = CGPoint(x: self.bounds.width / 2, y: (height + Dimensions.galleryBarHeight) / 2) + self.noImagesLabel.alpha = (height > threshold) ? 1 : (height - Dimensions.galleryBarHeight) / threshold + } + }) + } + + // MARK: - Photos handler + + func fetchPhotos(_ completion: (() -> Void)? = nil) { + AssetManager.fetch(withConfiguration: configuration1) { assets in + self.assets.removeAll() + self.assets.append(contentsOf: assets) + self.collectionView.reloadData() + + completion?() + } + } + + // MARK: - Pan gesture recognizer + + @objc func handlePanGestureRecognizer(_ gesture: UIPanGestureRecognizer) { + guard let superview = superview else { return } + + let translation = gesture.translation(in: superview) + let velocity = gesture.velocity(in: superview) + + switch gesture.state { + case .began: + delegate?.panGestureDidStart() + case .changed: + delegate?.panGestureDidChange(translation) + case .ended: + delegate?.panGestureDidEnd(translation, velocity: velocity) + default: break + } + } + + func displayNoImagesMessage(_ hideCollectionView: Bool) { + collectionView.alpha = hideCollectionView ? 0 : 1 + updateNoImagesLabel() + } +} + +// MARK: CollectionViewFlowLayout delegate methods + +extension ImageGalleryView: UICollectionViewDelegateFlowLayout { + + public func collectionView(_ collectionView: UICollectionView, + layout collectionViewLayout: UICollectionViewLayout, + sizeForItemAt indexPath: IndexPath) -> CGSize { + guard let collectionSize = collectionSize else { return CGSize.zero } + + return collectionSize + } +} + +// MARK: CollectionView delegate methods + +extension ImageGalleryView: UICollectionViewDelegate { + + public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + guard let cell = collectionView.cellForItem(at: indexPath) + as? ImageGalleryViewCell else { return } + if configuration1.allowMultiplePhotoSelection == false { + // Clear selected photos array + for asset in self.selectedStack.assets { + self.selectedStack.dropAsset(asset) + } + // Animate deselecting photos for any selected visible cells + guard let visibleCells = collectionView.visibleCells as? [ImageGalleryViewCell] else { return } + for cell in visibleCells where cell.selectedImageView.image != nil { + UIView.animate(withDuration: 0.2, animations: { + cell.selectedImageView.transform = CGAffineTransform(scaleX: 0.1, y: 0.1) + }, completion: { _ in + cell.selectedImageView.image = nil + }) + } + } + + let asset = assets[(indexPath as NSIndexPath).row] + + AssetManager.resolveAsset(asset, size: CGSize(width: 100, height: 100), shouldPreferLowRes: configuration1.useLowResolutionPreviewImage) { image in + guard image != nil else { return } + + if cell.selectedImageView.image != nil { + UIView.animate(withDuration: 0.2, animations: { + cell.selectedImageView.transform = CGAffineTransform(scaleX: 0.1, y: 0.1) + }, completion: { _ in + cell.selectedImageView.image = nil + }) + self.selectedStack.dropAsset(asset) + } else if self.imageLimit == 0 || self.imageLimit > self.selectedStack.assets.count { + cell.selectedImageView.image = AssetManager.getImage("selectedImageGallery") + cell.selectedImageView.transform = CGAffineTransform(scaleX: 0, y: 0) + UIView.animate(withDuration: 0.2, animations: { + cell.selectedImageView.transform = CGAffineTransform.identity + }) + self.selectedStack.pushAsset(asset) + } + } + } +} diff --git a/Pods/ImagePicker/Source/ImageGallery/ImageGalleryViewCell.swift b/Pods/ImagePicker/Source/ImageGallery/ImageGalleryViewCell.swift new file mode 100644 index 0000000000000000000000000000000000000000..c385318ec4d142a4f022068a3a881756483eef2f --- /dev/null +++ b/Pods/ImagePicker/Source/ImageGallery/ImageGalleryViewCell.swift @@ -0,0 +1,49 @@ +import UIKit + +class ImageGalleryViewCell: UICollectionViewCell { + + lazy var imageView = UIImageView() + lazy var selectedImageView = UIImageView() + private var videoInfoView: VideoInfoView + + private let videoInfoBarHeight: CGFloat = 15 + var duration: TimeInterval? { + didSet { + if let duration = duration, duration > 0 { + self.videoInfoView.duration = duration + self.videoInfoView.isHidden = false + } else { + self.videoInfoView.isHidden = true + } + } + } + + override init(frame: CGRect) { + let videoBarFrame = CGRect(x: 0, y: frame.height - self.videoInfoBarHeight, + width: frame.width, height: self.videoInfoBarHeight) + videoInfoView = VideoInfoView(frame: videoBarFrame) + super.init(frame: frame) + + for view in [imageView, selectedImageView, videoInfoView] as [UIView] { + view.contentMode = .scaleAspectFill + view.translatesAutoresizingMaskIntoConstraints = false + view.clipsToBounds = true + contentView.addSubview(view) + } + + isAccessibilityElement = true + accessibilityLabel = "Photo" + + setupConstraints() + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Configuration + + func configureCell(_ image: UIImage) { + imageView.image = image + } +} diff --git a/Pods/ImagePicker/Source/ImageGallery/ImageGalleryViewDataSource.swift b/Pods/ImagePicker/Source/ImageGallery/ImageGalleryViewDataSource.swift new file mode 100644 index 0000000000000000000000000000000000000000..9a186c45e9324bab91b75eb5399164bbdc480c8d --- /dev/null +++ b/Pods/ImagePicker/Source/ImageGallery/ImageGalleryViewDataSource.swift @@ -0,0 +1,47 @@ +import UIKit + +extension ImageGalleryView: UICollectionViewDataSource { + + struct CollectionView { + static let reusableIdentifier = "imagesReusableIdentifier" + } + + public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + displayNoImagesMessage(assets.isEmpty) + return assets.count + } + + public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CollectionView.reusableIdentifier, + for: indexPath) as? ImageGalleryViewCell else { return UICollectionViewCell() } + + let asset = assets[(indexPath as NSIndexPath).row] + + AssetManager.resolveAsset(asset, size: CGSize(width: 160, height: 240), shouldPreferLowRes: configuration1.useLowResolutionPreviewImage) { image in + if let image = image { + cell.configureCell(image) + + if (indexPath as NSIndexPath).row == 0 && self.shouldTransform { + cell.transform = CGAffineTransform(scaleX: 0, y: 0) + + UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: UIView.AnimationOptions(), animations: { + cell.transform = CGAffineTransform.identity + }) { _ in } + + self.shouldTransform = false + } + + if self.selectedStack.containsAsset(asset) { + cell.selectedImageView.image = AssetManager.getImage("selectedImageGallery") + cell.selectedImageView.alpha = 1 + cell.selectedImageView.transform = CGAffineTransform.identity + } else { + cell.selectedImageView.image = nil + } + cell.duration = asset.duration + } + } + + return cell + } +} diff --git a/Pods/ImagePicker/Source/ImageGallery/VideoInfoView.swift b/Pods/ImagePicker/Source/ImageGallery/VideoInfoView.swift new file mode 100644 index 0000000000000000000000000000000000000000..c3cf5569490c052de55e37aab7b77eea59c1e178 --- /dev/null +++ b/Pods/ImagePicker/Source/ImageGallery/VideoInfoView.swift @@ -0,0 +1,52 @@ +import UIKit + +class VideoInfoView: UIView { + + var duration: TimeInterval? { + didSet { + videoInfoLabel.text = dateFormatter.string(from: duration ?? 0) + } + } + + private lazy var videoIcon: UIImageView = { + var videoIcon = UIImageView(image: AssetManager.getImage("video")) + videoIcon.frame = CGRect(x: 3, + y: 0, + width: self.bounds.height, + height: self.bounds.height) + videoIcon.contentMode = .scaleAspectFit + return videoIcon + }() + + private lazy var videoInfoLabel: UILabel = { + let videoInfoLabel = UILabel(frame: CGRect(x: 0, + y: 0, + width: self.bounds.width - 5, + height: self.bounds.height)) + videoInfoLabel.font = UIFont.systemFont(ofSize: 10) + videoInfoLabel.textColor = .white + videoInfoLabel.textAlignment = .right + videoInfoLabel.text = self.dateFormatter.string(from: self.duration ?? 0) + return videoInfoLabel + }() + + private lazy var dateFormatter: DateComponentsFormatter = { + let formatter = DateComponentsFormatter() + formatter.zeroFormattingBehavior = .pad + formatter.allowedUnits = [.hour, .minute, .second] + formatter.unitsStyle = .positional + return formatter + }() + + override init(frame: CGRect) { + super.init(frame: frame) + + backgroundColor = UIColor(white: 0, alpha: 0.5) + addSubview(self.videoIcon) + addSubview(self.videoInfoLabel) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/Pods/ImagePicker/Source/ImagePickerController.swift b/Pods/ImagePicker/Source/ImagePickerController.swift new file mode 100644 index 0000000000000000000000000000000000000000..ad5561b1dd8a83c99896e5489988a460fd4308a2 --- /dev/null +++ b/Pods/ImagePicker/Source/ImagePickerController.swift @@ -0,0 +1,541 @@ +import UIKit +import MediaPlayer +import Photos + +@objc public protocol ImagePickerDelegate: NSObjectProtocol { + + func wrapperDidPress(_ imagePicker: ImagePickerController, images: [UIImage]) + func doneButtonDidPress(_ imagePicker: ImagePickerController, images: [UIImage]) + func cancelButtonDidPress(_ imagePicker: ImagePickerController) +} + +open class ImagePickerController: UIViewController { + + let configuration: Configuration1 + + struct GestureConstants { + static let maximumHeight: CGFloat = 200 + static let minimumHeight: CGFloat = 125 + static let velocity: CGFloat = 100 + } + + open lazy var galleryView: ImageGalleryView = { [unowned self] in + let galleryView = ImageGalleryView(configuration: self.configuration) + galleryView.delegate = self + galleryView.selectedStack = self.stack + galleryView.collectionView.layer.anchorPoint = CGPoint(x: 0, y: 0) + galleryView.imageLimit = self.imageLimit + + return galleryView + }() + + open lazy var bottomContainer: BottomContainerView = { [unowned self] in + let view = BottomContainerView(configuration: self.configuration) + view.backgroundColor = self.configuration.bottomContainerColor + view.delegate = self + + return view + }() + + open lazy var topView: TopView = { [unowned self] in + let view = TopView(configuration: self.configuration) + view.backgroundColor = UIColor.clear + view.delegate = self + + return view + }() + + lazy var cameraController: CameraView = { [unowned self] in + let controller = CameraView(configuration: self.configuration) + controller.delegate = self + controller.startOnFrontCamera = self.startOnFrontCamera + + return controller + }() + + lazy var panGestureRecognizer: UIPanGestureRecognizer = { [unowned self] in + let gesture = UIPanGestureRecognizer() + gesture.addTarget(self, action: #selector(panGestureRecognizerHandler(_:))) + + return gesture + }() + + lazy var volumeView: MPVolumeView = { [unowned self] in + let view = MPVolumeView() + view.frame = CGRect(x: 0, y: 0, width: 1, height: 1) + + return view + }() + + var volume = AVAudioSession.sharedInstance().outputVolume + + @objc open weak var delegate: ImagePickerDelegate? + open var stack = ImageStack() + open var imageLimit = 0 + open var preferredImageSize: CGSize? + open var startOnFrontCamera = false + var totalSize: CGSize { return UIScreen.main.bounds.size } + var initialFrame: CGRect? + var initialContentOffset: CGPoint? + var numberOfCells: Int? + var statusBarHidden = true + + fileprivate var isTakingPicture = false + open var doneButtonTitle: String? { + didSet { + if let doneButtonTitle = doneButtonTitle { + bottomContainer.doneButton.setTitle(doneButtonTitle, for: UIControl.State()) + } + } + } + + // MARK: - Initialization + + @objc public required init(configuration: Configuration1 = Configuration1()) { + self.configuration = configuration + super.init(nibName: nil, bundle: nil) + } + + public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { + self.configuration = Configuration1() + super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) + } + + public required init?(coder aDecoder: NSCoder) { + self.configuration = Configuration1() + super.init(coder: aDecoder) + } + + // MARK: - View lifecycle + + open override func viewDidLoad() { + super.viewDidLoad() + + for subview in [cameraController.view, galleryView, bottomContainer, topView] { + view.addSubview(subview!) + subview?.translatesAutoresizingMaskIntoConstraints = false + } + + view.addSubview(volumeView) + view.sendSubviewToBack(volumeView) + + view.backgroundColor = UIColor.white + view.backgroundColor = configuration.mainColor + + cameraController.view.addGestureRecognizer(panGestureRecognizer) + + subscribe() + setupConstraints() + } + + open override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + if configuration.managesAudioSession { + _ = try? AVAudioSession.sharedInstance().setActive(true) + } + + statusBarHidden = UIApplication.shared.isStatusBarHidden + + self.handleRotation(nil) + } + + open override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + let galleryHeight: CGFloat = UIScreen.main.nativeBounds.height == 960 + ? ImageGalleryView.Dimensions.galleryBarHeight : GestureConstants.minimumHeight + + galleryView.collectionView.transform = CGAffineTransform.identity + galleryView.collectionView.contentInset = UIEdgeInsets.zero + + galleryView.frame = CGRect(x: 0, + y: totalSize.height - bottomContainer.frame.height - galleryHeight, + width: totalSize.width, + height: galleryHeight) + galleryView.updateFrames() + checkStatus() + + initialFrame = galleryView.frame + initialContentOffset = galleryView.collectionView.contentOffset + + applyOrientationTransforms() + + UIAccessibility.post(notification: UIAccessibility.Notification.screenChanged, argument: bottomContainer) + } + + open func resetAssets() { + self.stack.resetAssets([]) + } + + func checkStatus() { + let currentStatus = PHPhotoLibrary.authorizationStatus() + guard currentStatus != .authorized else { return } + + if currentStatus == .notDetermined { hideViews() } + + PHPhotoLibrary.requestAuthorization { (authorizationStatus) -> Void in + DispatchQueue.main.async { + if authorizationStatus == .denied { + self.presentAskPermissionAlert() + } else if authorizationStatus == .authorized { + self.permissionGranted() + } + } + } + } + + func presentAskPermissionAlert() { + let alertController = UIAlertController(title: configuration.requestPermissionTitle, message: configuration.requestPermissionMessage, preferredStyle: .alert) + + let alertAction = UIAlertAction(title: configuration.OKButtonTitle, style: .default) { _ in + if let settingsURL = URL(string: UIApplication.openSettingsURLString) { + UIApplication.shared.openURL(settingsURL) + } + } + + let cancelAction = UIAlertAction(title: configuration.cancelButtonTitle, style: .cancel) { _ in + self.dismiss(animated: true, completion: nil) + } + + alertController.addAction(alertAction) + alertController.addAction(cancelAction) + + present(alertController, animated: true, completion: nil) + } + + func hideViews() { + enableGestures(false) + } + + func permissionGranted() { + galleryView.fetchPhotos() + enableGestures(true) + } + + // MARK: - Notifications + + deinit { + if configuration.managesAudioSession { + _ = try? AVAudioSession.sharedInstance().setActive(false) + } + + NotificationCenter.default.removeObserver(self) + } + + func subscribe() { + NotificationCenter.default.addObserver(self, + selector: #selector(adjustButtonTitle(_:)), + name: NSNotification.Name(rawValue: ImageStack.Notifications.imageDidPush), + object: nil) + + NotificationCenter.default.addObserver(self, + selector: #selector(adjustButtonTitle(_:)), + name: NSNotification.Name(rawValue: ImageStack.Notifications.imageDidDrop), + object: nil) + + NotificationCenter.default.addObserver(self, + selector: #selector(dismissIfNeeded), + name: NSNotification.Name(rawValue: ImageStack.Notifications.imageDidDrop), + object: nil) + + NotificationCenter.default.addObserver(self, + selector: #selector(didReloadAssets(_:)), + name: NSNotification.Name(rawValue: ImageStack.Notifications.stackDidReload), + object: nil) + + NotificationCenter.default.addObserver(self, + selector: #selector(volumeChanged(_:)), + name: NSNotification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), + object: nil) + + NotificationCenter.default.addObserver(self, + selector: #selector(handleRotation(_:)), + name: UIDevice.orientationDidChangeNotification, + object: nil) + } + + @objc func didReloadAssets(_ notification: Notification) { + adjustButtonTitle(notification) + galleryView.collectionView.reloadData() + galleryView.collectionView.setContentOffset(CGPoint.zero, animated: false) + } + + @objc func volumeChanged(_ notification: Notification) { + guard configuration.allowVolumeButtonsToTakePicture, + let slider = volumeView.subviews.filter({ $0 is UISlider }).first as? UISlider, + let userInfo = (notification as NSNotification).userInfo, + let changeReason = userInfo["AVSystemController_AudioVolumeChangeReasonNotificationParameter"] as? String, changeReason == "ExplicitVolumeChange" else { return } + + slider.setValue(volume, animated: false) + takePicture() + } + + @objc func adjustButtonTitle(_ notification: Notification) { + guard let sender = notification.object as? ImageStack else { return } + + let title = !sender.assets.isEmpty ? + configuration.doneButtonTitle : configuration.cancelButtonTitle + bottomContainer.doneButton.setTitle(title, for: UIControl.State()) + } + + @objc func dismissIfNeeded() { + // If only one image is requested and a push occures, automatically dismiss the ImagePicker + if imageLimit == 1 { + doneButtonDidPress() + } + } + + // MARK: - Helpers + + open override var prefersStatusBarHidden: Bool { + return statusBarHidden + } + + open func collapseGalleryView(_ completion: (() -> Void)?) { + galleryView.collectionViewLayout.invalidateLayout() + UIView.animate(withDuration: 0.3, animations: { + self.updateGalleryViewFrames(self.galleryView.topSeparator.frame.height) + self.galleryView.collectionView.transform = CGAffineTransform.identity + self.galleryView.collectionView.contentInset = UIEdgeInsets.zero + }, completion: { _ in + completion?() + }) + } + + open func showGalleryView() { + galleryView.collectionViewLayout.invalidateLayout() + UIView.animate(withDuration: 0.3, animations: { + self.updateGalleryViewFrames(GestureConstants.minimumHeight) + self.galleryView.collectionView.transform = CGAffineTransform.identity + self.galleryView.collectionView.contentInset = UIEdgeInsets.zero + }) + } + + open func expandGalleryView() { + galleryView.collectionViewLayout.invalidateLayout() + + UIView.animate(withDuration: 0.3, animations: { + self.updateGalleryViewFrames(GestureConstants.maximumHeight) + + let scale = (GestureConstants.maximumHeight - ImageGalleryView.Dimensions.galleryBarHeight) / (GestureConstants.minimumHeight - ImageGalleryView.Dimensions.galleryBarHeight) + self.galleryView.collectionView.transform = CGAffineTransform(scaleX: scale, y: scale) + + let value = self.view.frame.width * (scale - 1) / scale + self.galleryView.collectionView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: value) + }) + } + + func updateGalleryViewFrames(_ constant: CGFloat) { + galleryView.frame.origin.y = totalSize.height - bottomContainer.frame.height - constant + galleryView.frame.size.height = constant + } + + func enableGestures(_ enabled: Bool) { + galleryView.alpha = enabled ? 1 : 0 + bottomContainer.pickerButton.isEnabled = enabled + bottomContainer.tapGestureRecognizer.isEnabled = enabled + topView.flashButton.isEnabled = enabled + topView.rotateCamera.isEnabled = configuration.canRotateCamera + } + + fileprivate func isBelowImageLimit() -> Bool { + return (imageLimit == 0 || imageLimit > galleryView.selectedStack.assets.count) + } + + fileprivate func takePicture() { + guard isBelowImageLimit() && !isTakingPicture else { return } + isTakingPicture = true + bottomContainer.pickerButton.isEnabled = false + bottomContainer.stackView.startLoader() + let action: () -> Void = { [weak self] in + guard let `self` = self else { return } + self.cameraController.takePicture { self.isTakingPicture = false } + } + + if configuration.collapseCollectionViewWhileShot { + collapseGalleryView(action) + } else { + action() + } + } +} + +// MARK: - Action methods + +extension ImagePickerController: BottomContainerViewDelegate { + + func pickerButtonDidPress() { + takePicture() + } + + func doneButtonDidPress() { + var images: [UIImage] + if let preferredImageSize = preferredImageSize { + images = AssetManager.resolveAssets(stack.assets, size: preferredImageSize) + } else { + images = AssetManager.resolveAssets(stack.assets) + } + + delegate?.doneButtonDidPress(self, images: images) + } + + func cancelButtonDidPress() { + delegate?.cancelButtonDidPress(self) + } + + func imageStackViewDidPress() { + var images: [UIImage] + if let preferredImageSize = preferredImageSize { + images = AssetManager.resolveAssets(stack.assets, size: preferredImageSize) + } else { + images = AssetManager.resolveAssets(stack.assets) + } + + delegate?.wrapperDidPress(self, images: images) + } +} + +extension ImagePickerController: CameraViewDelegate { + + func setFlashButtonHidden(_ hidden: Bool) { + if configuration.flashButtonAlwaysHidden { + topView.flashButton.isHidden = hidden + } + } + + func imageToLibrary() { + guard let collectionSize = galleryView.collectionSize else { return } + + galleryView.fetchPhotos { + guard let asset = self.galleryView.assets.first else { return } + if self.configuration.allowMultiplePhotoSelection == false { + self.stack.assets.removeAll() + } + self.stack.pushAsset(asset) + } + + galleryView.shouldTransform = true + bottomContainer.pickerButton.isEnabled = true + + UIView.animate(withDuration: 0.3, animations: { + self.galleryView.collectionView.transform = CGAffineTransform(translationX: collectionSize.width, y: 0) + }, completion: { _ in + self.galleryView.collectionView.transform = CGAffineTransform.identity + }) + } + + func cameraNotAvailable() { + topView.flashButton.isHidden = true + topView.rotateCamera.isHidden = true + bottomContainer.pickerButton.isEnabled = false + } + + // MARK: - Rotation + + open override var supportedInterfaceOrientations: UIInterfaceOrientationMask { + return .portrait + } + + @objc public func handleRotation(_ note: Notification?) { + applyOrientationTransforms() + } + + func applyOrientationTransforms() { + let rotate = configuration.rotationTransform + + UIView.animate(withDuration: 0.25, animations: { + [self.topView.rotateCamera, self.bottomContainer.pickerButton, + self.bottomContainer.stackView, self.bottomContainer.doneButton].forEach { + $0.transform = rotate + } + + self.galleryView.collectionViewLayout.invalidateLayout() + + let translate: CGAffineTransform + if Helper.previousOrientation.isLandscape { + translate = CGAffineTransform(translationX: -20, y: 15) + } else { + translate = CGAffineTransform.identity + } + + self.topView.flashButton.transform = rotate.concatenating(translate) + }) + } +} + +// MARK: - TopView delegate methods + +extension ImagePickerController: TopViewDelegate { + + func flashButtonDidPress(_ title: String) { + cameraController.flashCamera(title) + } + + func rotateDeviceDidPress() { + cameraController.rotateCamera() + } +} + +// MARK: - Pan gesture handler + +extension ImagePickerController: ImageGalleryPanGestureDelegate { + + func panGestureDidStart() { + guard let collectionSize = galleryView.collectionSize else { return } + + initialFrame = galleryView.frame + initialContentOffset = galleryView.collectionView.contentOffset + if let contentOffset = initialContentOffset { numberOfCells = Int(contentOffset.x / collectionSize.width) } + } + + @objc func panGestureRecognizerHandler(_ gesture: UIPanGestureRecognizer) { + let translation = gesture.translation(in: view) + let velocity = gesture.velocity(in: view) + + if gesture.location(in: view).y > galleryView.frame.origin.y - 25 { + gesture.state == .began ? panGestureDidStart() : panGestureDidChange(translation) + } + + if gesture.state == .ended { + panGestureDidEnd(translation, velocity: velocity) + } + } + + func panGestureDidChange(_ translation: CGPoint) { + guard let initialFrame = initialFrame else { return } + + let galleryHeight = initialFrame.height - translation.y + + if galleryHeight >= GestureConstants.maximumHeight { return } + + if galleryHeight <= ImageGalleryView.Dimensions.galleryBarHeight { + updateGalleryViewFrames(ImageGalleryView.Dimensions.galleryBarHeight) + } else if galleryHeight >= GestureConstants.minimumHeight { + let scale = (galleryHeight - ImageGalleryView.Dimensions.galleryBarHeight) / (GestureConstants.minimumHeight - ImageGalleryView.Dimensions.galleryBarHeight) + galleryView.collectionView.transform = CGAffineTransform(scaleX: scale, y: scale) + galleryView.frame.origin.y = initialFrame.origin.y + translation.y + galleryView.frame.size.height = initialFrame.height - translation.y + + let value = view.frame.width * (scale - 1) / scale + galleryView.collectionView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: value) + } else { + galleryView.frame.origin.y = initialFrame.origin.y + translation.y + galleryView.frame.size.height = initialFrame.height - translation.y + } + + galleryView.updateNoImagesLabel() + } + + func panGestureDidEnd(_ translation: CGPoint, velocity: CGPoint) { + guard let initialFrame = initialFrame else { return } + let galleryHeight = initialFrame.height - translation.y + if galleryView.frame.height < GestureConstants.minimumHeight && velocity.y < 0 { + showGalleryView() + } else if velocity.y < -GestureConstants.velocity { + expandGalleryView() + } else if velocity.y > GestureConstants.velocity || galleryHeight < GestureConstants.minimumHeight { + collapseGalleryView(nil) + } + } +} diff --git a/Pods/ImagePicker/Source/LocationManager.swift b/Pods/ImagePicker/Source/LocationManager.swift new file mode 100644 index 0000000000000000000000000000000000000000..4141c56d10c3369b0e29efb45fec2cadf2af92d4 --- /dev/null +++ b/Pods/ImagePicker/Source/LocationManager.swift @@ -0,0 +1,37 @@ +import Foundation +import CoreLocation + +class LocationManager: NSObject, CLLocationManagerDelegate { + var locationManager = CLLocationManager() + var latestLocation: CLLocation? + + override init() { + super.init() + locationManager.delegate = self + locationManager.desiredAccuracy = kCLLocationAccuracyBest + locationManager.requestWhenInUseAuthorization() + } + + func startUpdatingLocation() { + locationManager.startUpdatingLocation() + } + + func stopUpdatingLocation() { + locationManager.stopUpdatingLocation() + } + + // MARK: - CLLocationManagerDelegate + + func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { + // Pick the location with best (= smallest value) horizontal accuracy + latestLocation = locations.sorted { $0.horizontalAccuracy < $1.horizontalAccuracy }.first + } + + func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { + if status == .authorizedAlways || status == .authorizedWhenInUse { + locationManager.startUpdatingLocation() + } else { + locationManager.stopUpdatingLocation() + } + } +} diff --git a/Pods/ImagePicker/Source/TopView/TopView.swift b/Pods/ImagePicker/Source/TopView/TopView.swift new file mode 100644 index 0000000000000000000000000000000000000000..27ffad2d6613a0c6fdd1469b247edb13df767b23 --- /dev/null +++ b/Pods/ImagePicker/Source/TopView/TopView.swift @@ -0,0 +1,119 @@ +import UIKit + +protocol TopViewDelegate: class { + + func flashButtonDidPress(_ title: String) + func rotateDeviceDidPress() +} + +open class TopView: UIView { + + struct Dimensions { + static let leftOffset: CGFloat = 11 + static let rightOffset: CGFloat = 7 + static let height: CGFloat = 34 + } + + var configuration = Configuration1() + + var currentFlashIndex = 0 + let flashButtonTitles = ["AUTO", "ON", "OFF"] + + open lazy var flashButton: UIButton = { [unowned self] in + let button = UIButton() + button.setImage(AssetManager.getImage("AUTO"), for: UIControl.State()) + button.setTitle("AUTO", for: UIControl.State()) + button.titleEdgeInsets = UIEdgeInsets(top: 0, left: 4, bottom: 0, right: 0) + button.setTitleColor(UIColor.white, for: UIControl.State()) + button.setTitleColor(UIColor.white, for: .highlighted) + button.titleLabel?.font = self.configuration.flashButton + button.addTarget(self, action: #selector(flashButtonDidPress(_:)), for: .touchUpInside) + button.contentHorizontalAlignment = .left + button.accessibilityLabel = "Flash mode is auto" + button.accessibilityHint = "Double-tap to change flash mode" + + return button + }() + + open lazy var rotateCamera: UIButton = { [unowned self] in + let button = UIButton() + button.accessibilityLabel = "" + button.accessibilityHint = "Double-tap to rotate camera" + button.setImage(AssetManager.getImage("cameraIcon"), for: UIControl.State()) + button.addTarget(self, action: #selector(rotateCameraButtonDidPress(_:)), for: .touchUpInside) + button.imageView?.contentMode = .center + + return button + }() + + weak var delegate: TopViewDelegate? + + // MARK: - Initializers + + public init(configuration: Configuration1? = nil) { + if let configuration = configuration { + self.configuration = configuration + } + super.init(frame: .zero) + configure() + } + + override public init(frame: CGRect) { + super.init(frame: frame) + configure() + } + + required public init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func configure() { + var buttons: [UIButton] = [flashButton] + + if configuration.canRotateCamera { + buttons.append(rotateCamera) + } + + for button in buttons { + button.layer.shadowColor = UIColor.black.cgColor + button.layer.shadowOpacity = 0.5 + button.layer.shadowOffset = CGSize(width: 0, height: 1) + button.layer.shadowRadius = 1 + button.translatesAutoresizingMaskIntoConstraints = false + addSubview(button) + } + + flashButton.isHidden = configuration.flashButtonAlwaysHidden + + setupConstraints() + } + + // MARK: - Action methods + + @objc func flashButtonDidPress(_ button: UIButton) { + currentFlashIndex += 1 + currentFlashIndex = currentFlashIndex % flashButtonTitles.count + + switch currentFlashIndex { + case 1: + button.setTitleColor(UIColor(red: 0.98, green: 0.98, blue: 0.45, alpha: 1), for: UIControl.State()) + button.setTitleColor(UIColor(red: 0.52, green: 0.52, blue: 0.24, alpha: 1), for: .highlighted) + + default: + button.setTitleColor(UIColor.white, for: UIControl.State()) + button.setTitleColor(UIColor.white, for: .highlighted) + } + + let newTitle = flashButtonTitles[currentFlashIndex] + + button.setImage(AssetManager.getImage(newTitle), for: UIControl.State()) + button.setTitle(newTitle, for: UIControl.State()) + button.accessibilityLabel = "Flash mode is \(newTitle)" + + delegate?.flashButtonDidPress(newTitle) + } + + @objc func rotateCameraButtonDidPress(_ button: UIButton) { + delegate?.rotateDeviceDidPress() + } +} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index e3f77d72e1a7f27afac22a9f490be7155c70fe16..51278307aab4e57bb547b83800709729773c7341 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -1,20 +1,24 @@ PODS: + - ImagePicker (3.2.0) - IQKeyboardManagerSwift (7.0.3) - LanguageManager-iOS (1.2.7) DEPENDENCIES: + - ImagePicker - IQKeyboardManagerSwift - LanguageManager-iOS SPEC REPOS: trunk: + - ImagePicker - IQKeyboardManagerSwift - LanguageManager-iOS SPEC CHECKSUMS: + ImagePicker: 1d950bbb2422548ed58791b4ec7f42fe42920511 IQKeyboardManagerSwift: f9c5dc36cba16ddd2e51fa7d51c34a2e083029b5 LanguageManager-iOS: 6b2dbb3793445827114708f0759b76e96932d7c8 -PODFILE CHECKSUM: 144b9dcd597bb6f7ec4e403aff5675d2db4f19f1 +PODFILE CHECKSUM: 59f2191e004e9844b551fefec6ab23a2f539129e COCOAPODS: 1.14.3 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 265cb6342897d7c99c8efdb2e67314fd6d4fe885..5566e784448da6782f7c4e9f3c6321ca24137265 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,190 +7,287 @@ objects = { /* Begin PBXBuildFile section */ - 0615219BFD2EBBE27FF41C2C8816791E /* IQTextFieldViewInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 517D7F8D28A92A90BE828A2B6F463359 /* IQTextFieldViewInfo.swift */; }; - 0718CCD0E19136B8DB2A7D4C6585E3ED /* LanguageManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 821ACCC32DDA25E12CEB2F6F8D3726E3 /* LanguageManager.swift */; }; - 08822D4E49DB8618D27BAEDED7911733 /* IQKeyboardManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AE76EF896CB4170CBABC6E7512AEFA5 /* IQKeyboardManager+Internal.swift */; }; - 08C234F2981017EEF271582022F339F3 /* IQUIView+IQKeyboardToolbarDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074AE9C63795CE067E1C72CDBE945B73 /* IQUIView+IQKeyboardToolbarDeprecated.swift */; }; - 09936CDBB25F81CCBD0688CA34E025A1 /* Pods-MiniScanner-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 123ADF4A6B2F1DEBA5B7482D4983B685 /* Pods-MiniScanner-dummy.m */; }; - 0A4DB572ACD97EC492C4E93A0FFB2E47 /* IQTextFieldViewListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F6FBD9D86BA55694389EB0CD29B11B3 /* IQTextFieldViewListener.swift */; }; - 103FE4EEFF1BE8BAD0FA047987AFED74 /* IQUIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C5E20C1DBC4A5FF8B8511CCF4D0BF31 /* IQUIView+Hierarchy.swift */; }; - 10D1A87F45AFB52D2B34D9ABA1A86105 /* UIImageView+Direction.swift in Sources */ = {isa = PBXBuildFile; fileRef = F97980DD7B51F2D18383716A1996D415 /* UIImageView+Direction.swift */; }; - 14063E1AF70EDDC9F33C8E08DCA0BEF3 /* IQPreviousNextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5AEED26E78E4244A163FCBF7FE9E8E2 /* IQPreviousNextView.swift */; }; - 154362EFC8EC0F61F54E24B09266DEB1 /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEBBFCA67A8342E7E8633D54FB526A70 /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift */; }; - 1C3881B0113D3219398154E16AA4413C /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64268BE3E3D15E6B9A3CA1D02825D5BC /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift */; }; - 23D11E770DF137CBF802A30E2B19C054 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79CF7D56C5D50C18B2EA0ED106D998C7 /* Foundation.framework */; }; - 24C699F9653980B77F44634EF44641C1 /* IQKeyboardInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8C277F89F53CC68CAA556E39994EB6A /* IQKeyboardInfo.swift */; }; - 3050954B1D31D76708C7573A0A410951 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79CF7D56C5D50C18B2EA0ED106D998C7 /* Foundation.framework */; }; - 3452528F3B9B79AD67D45FEA174F71E4 /* IQUICollectionView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89ED4E0603BF1044DE5F139BBC2BE349 /* IQUICollectionView+Additions.swift */; }; - 34BDB069A96125DAF2FEF6FF93A3F6AF /* IQToolbarPlaceholderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DAFDC4724628327C2D9E23816F637D7 /* IQToolbarPlaceholderConfiguration.swift */; }; - 3573FA382FBE08F99039CED491DB9FF0 /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A4ED0E00AAB8CACA3F6000E75530AFB2 /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 38CBE3196BDD577B5E72BC65508A77F8 /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0586AA806C9438959268322091016DF1 /* IQTextView.swift */; }; - 3E21C9612D00C6B92D3FCE3589917729 /* UIView+Direction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C71AA2CEB1CA6AA98A0875E57BC289F /* UIView+Direction.swift */; }; - 4017CF2B3EE45E7E579E68E6FCFBF732 /* IQKeyboardManager+UIKeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA2FE52F8360A77D2DC409CB89836048 /* IQKeyboardManager+UIKeyboardNotification.swift */; }; - 42B931814C7B25871333D5DA9A0E2A41 /* IQKeyboardReturnKeyHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C5AA613051563C2E57D792135A350BD /* IQKeyboardReturnKeyHandler.swift */; }; - 48A4D5E4D954CB4212E540A92570BBF0 /* UIView+Swizzling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CEB1EE4CDFE8247E3EBD87AEAFF7812 /* UIView+Swizzling.swift */; }; - 4B6666D6D3C57CF29C9767A9CF94CB4C /* Pods-MiniScanner-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E8A070B594D65627DD64F5ABC65D271 /* Pods-MiniScanner-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 028F3BD1F76536182769D7FA2BB26457 /* ImageStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 932BC8A383ACE9BE7CEB6D2B8D4A6F6E /* ImageStack.swift */; }; + 0615219BFD2EBBE27FF41C2C8816791E /* IQTextFieldViewInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = F091539577AF2A52CCD296CA28B06959 /* IQTextFieldViewInfo.swift */; }; + 0718CCD0E19136B8DB2A7D4C6585E3ED /* LanguageManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35459329B22491B6C7B191993A04DF22 /* LanguageManager.swift */; }; + 08822D4E49DB8618D27BAEDED7911733 /* IQKeyboardManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF5BA12FA02A6A415ACF7DB7CA6A84C0 /* IQKeyboardManager+Internal.swift */; }; + 08C234F2981017EEF271582022F339F3 /* IQUIView+IQKeyboardToolbarDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C49A1EE02A308B6EA2DAC5D4165043E /* IQUIView+IQKeyboardToolbarDeprecated.swift */; }; + 0A4DB572ACD97EC492C4E93A0FFB2E47 /* IQTextFieldViewListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE0D934FC0F90FBFC8AB495A08DC726A /* IQTextFieldViewListener.swift */; }; + 1021FCA162D086E55DE8D6926F8DA215 /* ImageGalleryViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A787FCA166800F902447EBBD78AF15 /* ImageGalleryViewCell.swift */; }; + 103FE4EEFF1BE8BAD0FA047987AFED74 /* IQUIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9995BBA866CC7D07B92ADF4C7BD1D578 /* IQUIView+Hierarchy.swift */; }; + 10D1A87F45AFB52D2B34D9ABA1A86105 /* UIImageView+Direction.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE3CF42909A3D3E3D162D79BB63EEDA3 /* UIImageView+Direction.swift */; }; + 14063E1AF70EDDC9F33C8E08DCA0BEF3 /* IQPreviousNextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C764B578E4823A3AABECAAF4F7591A /* IQPreviousNextView.swift */; }; + 154362EFC8EC0F61F54E24B09266DEB1 /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE00C2D2CCBF4FCD594D8B3D68B96F02 /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift */; }; + 1948830F0F143F2897657B9D75895EFA /* VideoInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B865459F6CCA8E44FC4191DC181B810 /* VideoInfoView.swift */; }; + 1BBD42E84E62842B6EA186CEF24BBF45 /* ImagePicker-ImagePicker in Resources */ = {isa = PBXBuildFile; fileRef = 97AA160F23F0CBEDDAF212103E762FC7 /* ImagePicker-ImagePicker */; }; + 1BBED45FEDD4AF437A762909E4937019 /* CameraMan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2567E8B0FE8C2DEBED587420F6316247 /* CameraMan.swift */; }; + 1C3881B0113D3219398154E16AA4413C /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D37ACB5642EA1274E990A85EABD6987C /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift */; }; + 1D5090C638CFC6ABA603A73B2D890CC7 /* Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CD0645BDEA318720AB08D2D13F9F776 /* Helper.swift */; }; + 23D11E770DF137CBF802A30E2B19C054 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C54FCF3DBFE97D4603C0EACF18FA0D04 /* Foundation.framework */; }; + 24C699F9653980B77F44634EF44641C1 /* IQKeyboardInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6C8A035F1AEEB733A516FE8BABAB425 /* IQKeyboardInfo.swift */; }; + 267C4C6C182CC853990C78F13C5318CE /* TopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9124BE58A2DBB2B35CBA645044D68239 /* TopView.swift */; }; + 3452528F3B9B79AD67D45FEA174F71E4 /* IQUICollectionView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E12E8839E65F344EB560691B9DDB51F2 /* IQUICollectionView+Additions.swift */; }; + 34BDB069A96125DAF2FEF6FF93A3F6AF /* IQToolbarPlaceholderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A40A35AE7D5D504C20486E1E7AE44F8 /* IQToolbarPlaceholderConfiguration.swift */; }; + 3573FA382FBE08F99039CED491DB9FF0 /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 17B99B6ED0F894D17B72357D78C2F98E /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 37127D5377EA0917DA66F0DC4C724016 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C54FCF3DBFE97D4603C0EACF18FA0D04 /* Foundation.framework */; }; + 3806469B2739BBFA16083760004ED9B4 /* ImageGalleryViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794568ED3CC7D20D7931B87E3E1ED5EC /* ImageGalleryViewDataSource.swift */; }; + 38CBE3196BDD577B5E72BC65508A77F8 /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09407063B4DCEC8E38B63DF4744E779C /* IQTextView.swift */; }; + 38FD95DCC2D02D5B78BE9AEE48DBDF25 /* ConstraintsSetup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95FA69B329055C5A69A025947D1A6BDE /* ConstraintsSetup.swift */; }; + 3E21C9612D00C6B92D3FCE3589917729 /* UIView+Direction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69FF1FF50F50B88798DB1D05C639A392 /* UIView+Direction.swift */; }; + 4017CF2B3EE45E7E579E68E6FCFBF732 /* IQKeyboardManager+UIKeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D60C26629AB4EB34E9509E27D3103AA /* IQKeyboardManager+UIKeyboardNotification.swift */; }; + 416D1E57C03F53F7F1D3A2FCBA276D62 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 25BAE128B5B8B1B38692C2BFAD093E48 /* PrivacyInfo.xcprivacy */; }; + 42B931814C7B25871333D5DA9A0E2A41 /* IQKeyboardReturnKeyHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3856806A73C1E1F897F21B7703C02FF2 /* IQKeyboardReturnKeyHandler.swift */; }; + 48A4D5E4D954CB4212E540A92570BBF0 /* UIView+Swizzling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12D71B9C48796CE44C929131B7E65125 /* UIView+Swizzling.swift */; }; 4CDBAE55660ED186441E9E4EDE6B3D31 /* IQKeyboardManagerSwift-IQKeyboardManagerSwift in Resources */ = {isa = PBXBuildFile; fileRef = 8D8069D3964814114ACEC3084C010B59 /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */; }; - 54BAE903D82C39392943869866252D93 /* IQNSArray+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D75E27CA01DD3A3D13F7942719A75E7 /* IQNSArray+Sort.swift */; }; - 597994C3AE8908B1E462BC03AC8C23FB /* IQKeyboardManagerCompatible.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD0CA37F495B55663C4845F92F8C9BED /* IQKeyboardManagerCompatible.swift */; }; - 5F0469C5B154DC20B844EA2A9B7F8D42 /* IQPlaceholderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DB82F0DC638C418E9156FE1254F4233 /* IQPlaceholderable.swift */; }; - 5F62DAE67CF97B7C42471EA91B79AA9A /* IQTextFieldViewInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E81825ECD551E0611FFB5F8D0B7BC9D /* IQTextFieldViewInfoModel.swift */; }; - 6418A8A5D32E73D898AB155952180B0C /* LanguageManager-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F859DF7872022F09706156C5EB2968D /* LanguageManager-iOS-dummy.m */; }; - 670310D98A231B664F5C424035D37B24 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = E9C8EEC4FCA4DFC3C660B514F2F43A03 /* PrivacyInfo.xcprivacy */; }; - 674C6B2E317E657D8EAD3CC73F608540 /* IQKeyboardManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D011DB87268C132C9849BCE1C2B0A6 /* IQKeyboardManager+Debug.swift */; }; - 6D55C34EF7CE4718D8B2FE6CE95C5674 /* DefaultsKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBDDB959E9E6ACF17E9A1407FC3F7E2 /* DefaultsKeys.swift */; }; - 6F875A0983E3FB0E0CC0BDA6376F73E8 /* String+Localiz.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA547A0350A8B9E070A709916D9517F1 /* String+Localiz.swift */; }; - 701904768C60A3F9060518DD58EC2882 /* IQToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57E2E81635BF125FB406A269ED33B812 /* IQToolbar.swift */; }; - 733CF7F19636AFF4A97708DFDE0AE53C /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3093517495679B177EFC5F1443A6F09E /* IQKeyboardManagerSwift-dummy.m */; }; - 7586D1882B962E1E31C28CC6396668B3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04D60AC13D33197690A05C641925DDDA /* UIKit.framework */; }; - 8086BD2DB5F1A0CC88E4F3386570A21C /* IQUITextFieldView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD0FD60A5A5AC2BA854999D1E27CFFA0 /* IQUITextFieldView+Additions.swift */; }; - 82950EE4BDD57F74749742A3E1566073 /* IQKeyboardManager+UITextFieldViewNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFF6CB63AE119B421AA38F50662937F2 /* IQKeyboardManager+UITextFieldViewNotification.swift */; }; - 852E6AB133CF7BDE7DE7D836AE201868 /* Languages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8213085A8B95D8D81A5DA1CCD48176DB /* Languages.swift */; }; - 8ED2E941DF0803C8AA331D0D8C722615 /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEC79518E786E0A7BC09629C4AE79C3 /* IQBarButtonItem.swift */; }; - 8FDA28363A5E49017498FD69AAA8F59F /* IQKeyboardListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CBB070ABBD305023F05B427546A9285 /* IQKeyboardListener.swift */; }; - 907FCA3049CAAF64B579D08D339D118D /* IQBarButtonItemConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F2A273B75770A5ACE51A2E41CB8EFDC /* IQBarButtonItemConfiguration.swift */; }; - 94F893223EB4C1C0F829C17900114AFA /* IQUIScrollView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC0D18E78426D786741B2D8FEE317281 /* IQUIScrollView+Additions.swift */; }; - 98A4D0D5928A35C7DB3D9272187789A8 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 840FA0B75AF62912A30DDC66B647ED98 /* CoreGraphics.framework */; }; - 9A00A25ED34A7687C62B02EBB76C1248 /* IQKeyboardConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = A715620FE6AB187DFE7D76C4DC7E36DC /* IQKeyboardConfiguration.swift */; }; - 9E704111CAAACBF64155A576FC337323 /* LanguageManager-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CC4D05FC11DD49E34C628FD4533A2568 /* LanguageManager-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9F78D56352F7D932DCEBE416C668C7BA /* IQKeyboardManager+ToolbarActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A94ED97A899EC2924B83CE2423C76E22 /* IQKeyboardManager+ToolbarActions.swift */; }; - A5E69CC013C4311C8AF52C7F7AB095C9 /* IQUITableView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65C3408050C64D7CA6084E442F3BA3C9 /* IQUITableView+Additions.swift */; }; - AE7D065E1D48171258FD8F07F7CD592C /* IQKeyboardManagerConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4E595780AD0EFFE9BC40B77C5313F58 /* IQKeyboardManagerConstants.swift */; }; - AF715064CF6458D3D89BB563DFDB00C6 /* UIButton+Direction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1DA999AC304E70850586EE4582767FA /* UIButton+Direction.swift */; }; - B1A786B1A2F11EBD1BF77305EEB710F5 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A42DBD2F42D55606EEBA514009498B87 /* QuartzCore.framework */; }; - B1BFC54288364884DDEAE75027BABE1A /* IQActiveConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDB8EF96877DD0C01B2233EBA5702C8 /* IQActiveConfiguration.swift */; }; - B9CF878085ABA2991A9C6F12F9B9DAB3 /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F84FF8DF1044B930A2FF5FD953A06A3 /* IQTitleBarButtonItem.swift */; }; - CC897E71556348377B4C31307E208C80 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79CF7D56C5D50C18B2EA0ED106D998C7 /* Foundation.framework */; }; - CC96488C33BFB3BCEE4A665A438CAC36 /* IQUIViewController+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE4138031533EEDC8A9902D7E99D501C /* IQUIViewController+Additions.swift */; }; - D2A598E7174826A7B04036E7AC8AA3B6 /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FA5A3035995F2918AACEDBCAA7A2D35 /* Storage.swift */; }; - D3D1F63C30E95311B687FA924B872C15 /* IQKeyboardManager+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 345569BAFF7969027C26148BDCD67089 /* IQKeyboardManager+Deprecated.swift */; }; - D8322CBE73400EE4382D1A042D2D53D3 /* IQUIView+IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2542B36B0E3593C4EE735B12326CEB3E /* IQUIView+IQKeyboardToolbar.swift */; }; - D88C2EA8ACCC0DE031D9E7A768062E2C /* IQKeyboardManager+Toolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FD998ABAEDD160FD4D5C8324BD5294E /* IQKeyboardManager+Toolbar.swift */; }; - DE3B5070A41194C21898D92DBFFCBE4C /* IQRootControllerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54F51BCA558A49D1481A562418DAA177 /* IQRootControllerConfiguration.swift */; }; - E483FA24409A56AAEDF8A1DEC5F55F16 /* UIImage+NextPrevious.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7371550074335F8BA7CA7223EC67EC3E /* UIImage+NextPrevious.swift */; }; - E8770A941545BB190D76BF7E5262797D /* IQToolbarConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B4AC356E7C67614B8739A99BF589079 /* IQToolbarConfiguration.swift */; }; - EBB5F245DBEEB13D48F09E0DD75A6C95 /* IQKeyboardManager+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BA86CB5FEFDEFCB074FECBF22548E30 /* IQKeyboardManager+Position.swift */; }; - F681FB74C756E0AAFFDC0D414EBD8FA0 /* IQScrollViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DC3307623E184928D1EB8BF17330A5B /* IQScrollViewConfiguration.swift */; }; - F7C3A4FED58118F9ADC5B4AF9A10B9FC /* ViewDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2946B406AC9EA1328621F52978CFBB27 /* ViewDirection.swift */; }; - F9DE1A3C506E506F4DA4B7714359E8D1 /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85BCC11955CE1DABDDDF22CE6868E687 /* IQKeyboardManager.swift */; }; - FDEFBFB34E35A4BB332264E0CACCF5D8 /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415D9AA15EF688EB94C14ED9A8F7672C /* IQInvocation.swift */; }; + 50374D59C8ED3AE3E41C30F25859F981 /* ImagePickerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1CA9FAC18E5BAD509EA5525C46C4B3 /* ImagePickerController.swift */; }; + 54BAE903D82C39392943869866252D93 /* IQNSArray+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AD85F77285996984D7DC8AA66062221 /* IQNSArray+Sort.swift */; }; + 593405FFB5F7E44BE8C49242896792EF /* Pods-MiniScanner-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 123ADF4A6B2F1DEBA5B7482D4983B685 /* Pods-MiniScanner-dummy.m */; }; + 597994C3AE8908B1E462BC03AC8C23FB /* IQKeyboardManagerCompatible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60A9AB96142FF7E5FE41168C9DFCC139 /* IQKeyboardManagerCompatible.swift */; }; + 5F0469C5B154DC20B844EA2A9B7F8D42 /* IQPlaceholderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52C66366FFABB084A228CCB1F1B765FE /* IQPlaceholderable.swift */; }; + 5F62DAE67CF97B7C42471EA91B79AA9A /* IQTextFieldViewInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5895F0210CAB26647CA29654FF007E99 /* IQTextFieldViewInfoModel.swift */; }; + 6418A8A5D32E73D898AB155952180B0C /* LanguageManager-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 05A86C0FA5B2DB6BCCC9764DD63622F2 /* LanguageManager-iOS-dummy.m */; }; + 674C6B2E317E657D8EAD3CC73F608540 /* IQKeyboardManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3476B6353A4A07F68321A11A638F1ED /* IQKeyboardManager+Debug.swift */; }; + 6D55C34EF7CE4718D8B2FE6CE95C5674 /* DefaultsKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB11A29949B45F0E21CCC9A5645F10DF /* DefaultsKeys.swift */; }; + 6F875A0983E3FB0E0CC0BDA6376F73E8 /* String+Localiz.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FA0E2CFB53D4285E48471B0E7A1E37 /* String+Localiz.swift */; }; + 6FAA62F8C663AAEDAB170956E9A298CC /* ImageGalleryLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15D842D39CD83A083226D9BF0FFC597E /* ImageGalleryLayout.swift */; }; + 701904768C60A3F9060518DD58EC2882 /* IQToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE41824D87EF444F033018D12B726748 /* IQToolbar.swift */; }; + 733CF7F19636AFF4A97708DFDE0AE53C /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CC7A3BC8A0772BB468E28CEBA54C34B /* IQKeyboardManagerSwift-dummy.m */; }; + 743ED1DCEC16DC2E7FAD8FBDD276EC8F /* ImagePicker-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A337F2F992EE958F88ED3BCB64CF58A8 /* 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 = 7FC8DCE50326C3AB2226219736FF9BEA /* BottomContainerView.swift */; }; + 78EB1850E530C480700B150286C9BE56 /* cameraIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 56DE81497BE6CBDC2B6CDAC08BA3C6F3 /* cameraIcon@3x.png */; }; + 7DB7E0E519A315B78D72BF7C63C64E30 /* ButtonPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8F6D16A50923F51B9AB8744E1F39AA2 /* ButtonPicker.swift */; }; + 7FF839630F762642F7EEC6809EC69260 /* Pods-MiniScanner-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E8A070B594D65627DD64F5ABC65D271 /* Pods-MiniScanner-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8086BD2DB5F1A0CC88E4F3386570A21C /* IQUITextFieldView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ECA8C8356419262957B02524B727F97 /* IQUITextFieldView+Additions.swift */; }; + 82950EE4BDD57F74749742A3E1566073 /* IQKeyboardManager+UITextFieldViewNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6545CB5746D70E072C0B66A6ED51C661 /* IQKeyboardManager+UITextFieldViewNotification.swift */; }; + 829A79A8C324697D5A619C029AEB0063 /* CameraView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94FA596E9338AA55BD5759CA73710FD0 /* CameraView.swift */; }; + 852E6AB133CF7BDE7DE7D836AE201868 /* Languages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39E055A62AEBFAD3130BD5CED47ED6B0 /* Languages.swift */; }; + 8880A11DBF2BF1FFC5317019D9AC81DE /* video@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5A8EE629BBC992E72001FE1BB2A86A30 /* video@3x.png */; }; + 8ED2E941DF0803C8AA331D0D8C722615 /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = F54809C99BF364CA0C71A27574215418 /* IQBarButtonItem.swift */; }; + 8FDA28363A5E49017498FD69AAA8F59F /* IQKeyboardListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67433D9DBF3522810E9E0F0EA7C9B8D3 /* IQKeyboardListener.swift */; }; + 907FCA3049CAAF64B579D08D339D118D /* IQBarButtonItemConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 776F5202042269324CC40FF99BD02B7B /* IQBarButtonItemConfiguration.swift */; }; + 930D2CF140D30530A3E5C6A5F9342096 /* selectedImageGallery@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CE69BAAD4B7B684548B97704EB6F64B /* selectedImageGallery@3x.png */; }; + 94F893223EB4C1C0F829C17900114AFA /* IQUIScrollView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B31C6CC4876FACCC77D1B29BDE6C52B2 /* IQUIScrollView+Additions.swift */; }; + 98A4D0D5928A35C7DB3D9272187789A8 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3DF46AD6E25D68DB361974528992221 /* CoreGraphics.framework */; }; + 9A00A25ED34A7687C62B02EBB76C1248 /* IQKeyboardConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AFC32EE73376AA12A98E6EE8C962B88 /* IQKeyboardConfiguration.swift */; }; + 9CEA579E5B0912F3ECE7585A26719214 /* ON@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D90AC16A8CC7F09CA132DE12CB77C635 /* ON@3x.png */; }; + 9E704111CAAACBF64155A576FC337323 /* LanguageManager-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 69969CEF39E685D764907F1ACBBAC075 /* LanguageManager-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9F78D56352F7D932DCEBE416C668C7BA /* IQKeyboardManager+ToolbarActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0991D5A676F77EE691D81F11F77AAD /* IQKeyboardManager+ToolbarActions.swift */; }; + A5E69CC013C4311C8AF52C7F7AB095C9 /* IQUITableView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87307CA39F67960430407BFDDD9CAC9 /* IQUITableView+Additions.swift */; }; + AD27127B352DC23D629CB917A9432A33 /* AUTO@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9AD203FC38F52062D4A5F294E603C17F /* AUTO@3x.png */; }; + AE7D065E1D48171258FD8F07F7CD592C /* IQKeyboardManagerConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCB9CA9D5CD8C736540D23B837766BC /* IQKeyboardManagerConstants.swift */; }; + AF715064CF6458D3D89BB563DFDB00C6 /* UIButton+Direction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C4CD3B1FDF228F5A9AF421EC7ED382 /* UIButton+Direction.swift */; }; + B0E87F4E370B3A0CD14B50D219AE7B0B /* StackView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4671537AE052A18A18878183193379A0 /* StackView.swift */; }; + B1A786B1A2F11EBD1BF77305EEB710F5 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2EE6749FC108D414ECB83B77EF11BD86 /* QuartzCore.framework */; }; + B1BFC54288364884DDEAE75027BABE1A /* IQActiveConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37F3FF354B47453D73695BEC007AC143 /* IQActiveConfiguration.swift */; }; + B9CF878085ABA2991A9C6F12F9B9DAB3 /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 212BB8E46A9CFE25AA60A6F3F3B3A112 /* IQTitleBarButtonItem.swift */; }; + BD0139B5F1C96514CB66C4310AAF1DF5 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56B28C4E9F718651E6E1B010F31566EB /* AVFoundation.framework */; }; + C1B5109626878EAF4C3156DBD7DEE9AA /* OFF@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3204AD5BD7555222FD07431DEADAB069 /* OFF@3x.png */; }; + CA8CFC49D2338D41DA4E83F941867CEB /* ImagePicker-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F759918B2149982EE1374EE88128F2A /* ImagePicker-dummy.m */; }; + CC897E71556348377B4C31307E208C80 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C54FCF3DBFE97D4603C0EACF18FA0D04 /* Foundation.framework */; }; + CC96488C33BFB3BCEE4A665A438CAC36 /* IQUIViewController+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE4E6B7F704D79ABA720D422285F9D89 /* IQUIViewController+Additions.swift */; }; + D2A598E7174826A7B04036E7AC8AA3B6 /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92B97270B2A293D9164DFF3E7DE472B9 /* Storage.swift */; }; + D3D1F63C30E95311B687FA924B872C15 /* IQKeyboardManager+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65EF3B19C7242BB5F426593A9E7423A6 /* IQKeyboardManager+Deprecated.swift */; }; + D4BB4D928CB44E6CE753BEA14E5AC918 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C54FCF3DBFE97D4603C0EACF18FA0D04 /* Foundation.framework */; }; + D8322CBE73400EE4382D1A042D2D53D3 /* IQUIView+IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22B1727A691C1A5484F16E1D8AC17554 /* IQUIView+IQKeyboardToolbar.swift */; }; + D88C2EA8ACCC0DE031D9E7A768062E2C /* IQKeyboardManager+Toolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CA0AA41D7887594E3923678E0D01B2E /* IQKeyboardManager+Toolbar.swift */; }; + DE3B5070A41194C21898D92DBFFCBE4C /* IQRootControllerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C38EA5A2F10F811754FEB35498986A /* IQRootControllerConfiguration.swift */; }; + E483FA24409A56AAEDF8A1DEC5F55F16 /* UIImage+NextPrevious.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05F4AF42F743D001C9DC09A502C85802 /* UIImage+NextPrevious.swift */; }; + E8770A941545BB190D76BF7E5262797D /* IQToolbarConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56B6273816518D69D33257DEE95BAAC6 /* IQToolbarConfiguration.swift */; }; + EBB5F245DBEEB13D48F09E0DD75A6C95 /* IQKeyboardManager+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B0113018B630AE01EAD600A31152B43 /* IQKeyboardManager+Position.swift */; }; + ECFE64B0759EFA4F555994B6CDCED624 /* AssetManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B740D3BEFBBD2B159902A4F36B4A761 /* AssetManager.swift */; }; + F2AF558F96F3C43C3E4C747E45E5637C /* LocationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE71D63EB6BD690210A482A08F65116E /* LocationManager.swift */; }; + F2ED9C9337B84D1E42E67BF7F7DAD72C /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E31E8C6413F735B8D285401EA758B8A /* Configuration.swift */; }; + F681FB74C756E0AAFFDC0D414EBD8FA0 /* IQScrollViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A1FFA4BF1326FF1A592B24CACA9CD33 /* IQScrollViewConfiguration.swift */; }; + F7C3A4FED58118F9ADC5B4AF9A10B9FC /* ViewDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = E92074E9B4338206217D020D90B31389 /* ViewDirection.swift */; }; + F9DE1A3C506E506F4DA4B7714359E8D1 /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF30E86DEEF99037365D3E815AF12C9A /* IQKeyboardManager.swift */; }; + FD9754C78D0CA8559EC35E54FDD5A33E /* focusIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D25E546753F19CF5F44A1103269C6A0C /* focusIcon@3x.png */; }; + FDEFBFB34E35A4BB332264E0CACCF5D8 /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12DA7CB8B06F9B4E75B4BE4A55D66CBB /* IQInvocation.swift */; }; + FF8C6AC907C8F4B527F9A0CBDBCC7F92 /* ImageGalleryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B6482D1F1E26819A2B81EB736397809 /* ImageGalleryView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 08906A1E152B2EBD296D726C4A00627E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B490E7485944099E16C9CBD79119D1D4; - remoteInfo = IQKeyboardManagerSwift; - }; - AA24290BD2F66F452D4FA8715BB9C199 /* PBXContainerItemProxy */ = { + 1C4DB22B1C193AC0BB96CBB3C81F497B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 75F1EA88CB9544AB5CBE20DEC9A011AE; remoteInfo = "LanguageManager-iOS"; }; - F68B8DE02DB8CE82221ED42882AEACDB /* PBXContainerItemProxy */ = { + 59D7E9C63088E22D2009A8EF3BC1B8A4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 982A68D37F5DCBC1FC1FDC0BB2F0EB8E; remoteInfo = "IQKeyboardManagerSwift-IQKeyboardManagerSwift"; }; + 6519470E4E31FF9C3F95B185C4ED3513 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 01CB8D6098C21E12CE735619344DE81E; + remoteInfo = ImagePicker; + }; + D153E77C37E9CD81F4350FC10000E1A4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 614D1818852890AC7D3CDF68D512C370; + remoteInfo = "ImagePicker-ImagePicker"; + }; + ED0DD60A1626F731705DCD41EB1F1872 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B490E7485944099E16C9CBD79119D1D4; + remoteInfo = IQKeyboardManagerSwift; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 04D60AC13D33197690A05C641925DDDA /* 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; }; - 0586AA806C9438959268322091016DF1 /* IQTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextView.swift; path = IQKeyboardManagerSwift/IQTextView/IQTextView.swift; sourceTree = "<group>"; }; - 074AE9C63795CE067E1C72CDBE945B73 /* IQUIView+IQKeyboardToolbarDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+IQKeyboardToolbarDeprecated.swift"; path = "IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbarDeprecated.swift"; sourceTree = "<group>"; }; - 0D21025AC0DFA4E915F75D3EB6ED0BC2 /* IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardManagerSwift-Info.plist"; sourceTree = "<group>"; }; + 0558475D71137D635FA6B52E29343634 /* ImagePicker.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ImagePicker.release.xcconfig; sourceTree = "<group>"; }; + 05A86C0FA5B2DB6BCCC9764DD63622F2 /* LanguageManager-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "LanguageManager-iOS-dummy.m"; sourceTree = "<group>"; }; + 05C38EA5A2F10F811754FEB35498986A /* IQRootControllerConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQRootControllerConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQRootControllerConfiguration.swift; sourceTree = "<group>"; }; + 05C4CD3B1FDF228F5A9AF421EC7ED382 /* 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>"; }; + 05F4AF42F743D001C9DC09A502C85802 /* UIImage+NextPrevious.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+NextPrevious.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/UIImage+NextPrevious.swift"; sourceTree = "<group>"; }; + 09407063B4DCEC8E38B63DF4744E779C /* IQTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextView.swift; path = IQKeyboardManagerSwift/IQTextView/IQTextView.swift; sourceTree = "<group>"; }; + 0A4D0507AE0FB32159CA30247E8605A0 /* LanguageManager-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "LanguageManager-iOS.modulemap"; sourceTree = "<group>"; }; + 0B740D3BEFBBD2B159902A4F36B4A761 /* AssetManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssetManager.swift; path = Source/AssetManager.swift; sourceTree = "<group>"; }; 0E8A070B594D65627DD64F5ABC65D271 /* Pods-MiniScanner-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MiniScanner-umbrella.h"; sourceTree = "<group>"; }; - 0EBDDB959E9E6ACF17E9A1407FC3F7E2 /* DefaultsKeys.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsKeys.swift; path = "LanguageManager-iOS/Classes/Constants/DefaultsKeys.swift"; sourceTree = "<group>"; }; + 0F759918B2149982EE1374EE88128F2A /* ImagePicker-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ImagePicker-dummy.m"; sourceTree = "<group>"; }; + 0FD1D07460FA621C6B65EF8FEB7643B5 /* LanguageManager-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "LanguageManager-iOS-Info.plist"; sourceTree = "<group>"; }; 123ADF4A6B2F1DEBA5B7482D4983B685 /* Pods-MiniScanner-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MiniScanner-dummy.m"; sourceTree = "<group>"; }; - 1BA86CB5FEFDEFCB074FECBF22548E30 /* IQKeyboardManager+Position.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Position.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Position.swift"; sourceTree = "<group>"; }; - 1C5679EFA26B0E4E1992CAA7C928899A /* LanguageManager-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "LanguageManager-iOS-Info.plist"; sourceTree = "<group>"; }; - 1DB82F0DC638C418E9156FE1254F4233 /* IQPlaceholderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPlaceholderable.swift; path = IQKeyboardManagerSwift/IQTextView/IQPlaceholderable.swift; sourceTree = "<group>"; }; - 1FDB8EF96877DD0C01B2233EBA5702C8 /* IQActiveConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQActiveConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQActiveConfiguration.swift; sourceTree = "<group>"; }; + 12D71B9C48796CE44C929131B7E65125 /* 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>"; }; + 12DA7CB8B06F9B4E75B4BE4A55D66CBB /* IQInvocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQInvocation.swift; path = IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift; sourceTree = "<group>"; }; + 13A787FCA166800F902447EBBD78AF15 /* ImageGalleryViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageGalleryViewCell.swift; path = Source/ImageGallery/ImageGalleryViewCell.swift; sourceTree = "<group>"; }; + 14C6E980E604962C8B903F524FC4EF63 /* IQKeyboardManagerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.release.xcconfig; sourceTree = "<group>"; }; + 157E715A00214E98D72A5B04D5B4B29C /* IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardManagerSwift-Info.plist"; sourceTree = "<group>"; }; + 15D842D39CD83A083226D9BF0FFC597E /* ImageGalleryLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageGalleryLayout.swift; path = Source/ImageGallery/ImageGalleryLayout.swift; sourceTree = "<group>"; }; + 17B99B6ED0F894D17B72357D78C2F98E /* IQKeyboardManagerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-umbrella.h"; sourceTree = "<group>"; }; + 1B865459F6CCA8E44FC4191DC181B810 /* VideoInfoView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoInfoView.swift; path = Source/ImageGallery/VideoInfoView.swift; 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; }; + 1CE69BAAD4B7B684548B97704EB6F64B /* selectedImageGallery@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "selectedImageGallery@3x.png"; path = "Images/selectedImageGallery@3x.png"; sourceTree = "<group>"; }; + 212BB8E46A9CFE25AA60A6F3F3B3A112 /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTitleBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift; sourceTree = "<group>"; }; 21A62BB316C6336F03408E50D730FD01 /* Pods-MiniScanner.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MiniScanner.modulemap"; sourceTree = "<group>"; }; - 22FF8311D744FA0C5E23B24C7AE67B1D /* IQKeyboardManagerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.release.xcconfig; sourceTree = "<group>"; }; - 2542B36B0E3593C4EE735B12326CEB3E /* IQUIView+IQKeyboardToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+IQKeyboardToolbar.swift"; path = "IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift"; sourceTree = "<group>"; }; - 28C0DECFE80A050466E59F2C181B9EFC /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = "<group>"; }; - 2946B406AC9EA1328621F52978CFBB27 /* ViewDirection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewDirection.swift; path = "LanguageManager-iOS/Classes/Constants/ViewDirection.swift"; sourceTree = "<group>"; }; - 2B4AC356E7C67614B8739A99BF589079 /* IQToolbarConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbarConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQToolbarConfiguration.swift; sourceTree = "<group>"; }; - 2F2A273B75770A5ACE51A2E41CB8EFDC /* IQBarButtonItemConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItemConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQBarButtonItemConfiguration.swift; sourceTree = "<group>"; }; - 3093517495679B177EFC5F1443A6F09E /* IQKeyboardManagerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManagerSwift-dummy.m"; sourceTree = "<group>"; }; + 22B1727A691C1A5484F16E1D8AC17554 /* IQUIView+IQKeyboardToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+IQKeyboardToolbar.swift"; path = "IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift"; sourceTree = "<group>"; }; + 24C764B578E4823A3AABECAAF4F7591A /* IQPreviousNextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPreviousNextView.swift; path = IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift; sourceTree = "<group>"; }; + 2567E8B0FE8C2DEBED587420F6316247 /* CameraMan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CameraMan.swift; path = Source/CameraView/CameraMan.swift; sourceTree = "<group>"; }; + 25BAE128B5B8B1B38692C2BFAD093E48 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardManagerSwift/PrivacyInfo.xcprivacy; sourceTree = "<group>"; }; + 2AFC32EE73376AA12A98E6EE8C962B88 /* IQKeyboardConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQKeyboardConfiguration.swift; sourceTree = "<group>"; }; + 2D60C26629AB4EB34E9509E27D3103AA /* IQKeyboardManager+UIKeyboardNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UIKeyboardNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+UIKeyboardNotification.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; }; + 3204AD5BD7555222FD07431DEADAB069 /* OFF@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "OFF@3x.png"; path = "Images/OFF@3x.png"; sourceTree = "<group>"; }; + 3354FDF80A0F919F09224E7D9D382931 /* LanguageManager-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LanguageManager-iOS-prefix.pch"; sourceTree = "<group>"; }; 3438B9790556194C521D4C9806D29C85 /* Pods-MiniScanner */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-MiniScanner"; path = Pods_MiniScanner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 345569BAFF7969027C26148BDCD67089 /* IQKeyboardManager+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Deprecated.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Deprecated.swift"; sourceTree = "<group>"; }; - 3AE76EF896CB4170CBABC6E7512AEFA5 /* IQKeyboardManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Internal.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Internal.swift"; sourceTree = "<group>"; }; + 35459329B22491B6C7B191993A04DF22 /* LanguageManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LanguageManager.swift; path = "LanguageManager-iOS/Classes/Main/LanguageManager.swift"; sourceTree = "<group>"; }; + 37F3FF354B47453D73695BEC007AC143 /* IQActiveConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQActiveConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQActiveConfiguration.swift; sourceTree = "<group>"; }; + 3856806A73C1E1F897F21B7703C02FF2 /* IQKeyboardReturnKeyHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardReturnKeyHandler.swift; path = IQKeyboardManagerSwift/ReturnKeyHandler/IQKeyboardReturnKeyHandler.swift; sourceTree = "<group>"; }; + 39E055A62AEBFAD3130BD5CED47ED6B0 /* Languages.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Languages.swift; path = "LanguageManager-iOS/Classes/Constants/Languages.swift"; sourceTree = "<group>"; }; 3B6258C4E2C1059AABC67D66F9314FE8 /* Pods-MiniScanner-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MiniScanner-acknowledgements.markdown"; sourceTree = "<group>"; }; - 3CEB1EE4CDFE8247E3EBD87AEAFF7812 /* 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>"; }; - 3E81825ECD551E0611FFB5F8D0B7BC9D /* IQTextFieldViewInfoModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextFieldViewInfoModel.swift; path = IQKeyboardManagerSwift/ReturnKeyHandler/IQTextFieldViewInfoModel.swift; sourceTree = "<group>"; }; - 3FD998ABAEDD160FD4D5C8324BD5294E /* IQKeyboardManager+Toolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Toolbar.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Toolbar.swift"; sourceTree = "<group>"; }; - 415D9AA15EF688EB94C14ED9A8F7672C /* IQInvocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQInvocation.swift; path = IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift; sourceTree = "<group>"; }; - 447CF01CBF4066825019B2CBB67AEBDF /* LanguageManager-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "LanguageManager-iOS.release.xcconfig"; sourceTree = "<group>"; }; - 46C8738ABBC60F8B9E148126B4956F55 /* LanguageManager-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LanguageManager-iOS-prefix.pch"; sourceTree = "<group>"; }; - 4CF6F91F9C3F1332F80F8D41322A26D0 /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist"; sourceTree = "<group>"; }; - 4F859DF7872022F09706156C5EB2968D /* LanguageManager-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "LanguageManager-iOS-dummy.m"; sourceTree = "<group>"; }; - 517D7F8D28A92A90BE828A2B6F463359 /* IQTextFieldViewInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextFieldViewInfo.swift; path = IQKeyboardManagerSwift/LIsteners/Info/IQTextFieldViewInfo.swift; sourceTree = "<group>"; }; - 54F51BCA558A49D1481A562418DAA177 /* IQRootControllerConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQRootControllerConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQRootControllerConfiguration.swift; sourceTree = "<group>"; }; - 57E2E81635BF125FB406A269ED33B812 /* IQToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbar.swift; path = IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift; sourceTree = "<group>"; }; - 5C5AA613051563C2E57D792135A350BD /* IQKeyboardReturnKeyHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardReturnKeyHandler.swift; path = IQKeyboardManagerSwift/ReturnKeyHandler/IQKeyboardReturnKeyHandler.swift; sourceTree = "<group>"; }; - 5CBB070ABBD305023F05B427546A9285 /* IQKeyboardListener.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardListener.swift; path = IQKeyboardManagerSwift/LIsteners/IQKeyboardListener.swift; sourceTree = "<group>"; }; - 64268BE3E3D15E6B9A3CA1D02825D5BC /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnKeyHandler+TextViewDelegate.swift"; path = "IQKeyboardManagerSwift/ReturnKeyHandler/IQKeyboardReturnKeyHandler+TextViewDelegate.swift"; sourceTree = "<group>"; }; + 41A97DE5272AEC2243073382592538BD /* ImagePicker-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ImagePicker-prefix.pch"; sourceTree = "<group>"; }; + 4671537AE052A18A18878183193379A0 /* StackView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StackView.swift; path = Source/BottomView/StackView.swift; sourceTree = "<group>"; }; + 4A40A35AE7D5D504C20486E1E7AE44F8 /* IQToolbarPlaceholderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbarPlaceholderConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQToolbarPlaceholderConfiguration.swift; sourceTree = "<group>"; }; + 4AD85F77285996984D7DC8AA66062221 /* IQNSArray+Sort.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQNSArray+Sort.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQNSArray+Sort.swift"; sourceTree = "<group>"; }; + 4B0113018B630AE01EAD600A31152B43 /* IQKeyboardManager+Position.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Position.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Position.swift"; sourceTree = "<group>"; }; + 4B6482D1F1E26819A2B81EB736397809 /* ImageGalleryView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageGalleryView.swift; path = Source/ImageGallery/ImageGalleryView.swift; sourceTree = "<group>"; }; + 52C66366FFABB084A228CCB1F1B765FE /* IQPlaceholderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPlaceholderable.swift; path = IQKeyboardManagerSwift/IQTextView/IQPlaceholderable.swift; sourceTree = "<group>"; }; + 55D95ACE18BA0D8C6DD05DCDCA6CFF6D /* ImagePicker.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ImagePicker.debug.xcconfig; 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; }; + 56B6273816518D69D33257DEE95BAAC6 /* IQToolbarConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbarConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQToolbarConfiguration.swift; sourceTree = "<group>"; }; + 56DE81497BE6CBDC2B6CDAC08BA3C6F3 /* cameraIcon@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "cameraIcon@3x.png"; path = "Images/cameraIcon@3x.png"; sourceTree = "<group>"; }; + 5895F0210CAB26647CA29654FF007E99 /* IQTextFieldViewInfoModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextFieldViewInfoModel.swift; path = IQKeyboardManagerSwift/ReturnKeyHandler/IQTextFieldViewInfoModel.swift; sourceTree = "<group>"; }; + 5A8EE629BBC992E72001FE1BB2A86A30 /* video@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "video@3x.png"; path = "Images/video@3x.png"; sourceTree = "<group>"; }; + 5C1CA9FAC18E5BAD509EA5525C46C4B3 /* ImagePickerController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePickerController.swift; path = Source/ImagePickerController.swift; sourceTree = "<group>"; }; + 60A9AB96142FF7E5FE41168C9DFCC139 /* IQKeyboardManagerCompatible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerCompatible.swift; path = IQKeyboardManagerSwift/IQKeyboardManagerCompatible/IQKeyboardManagerCompatible.swift; sourceTree = "<group>"; }; 6473C16F43F7217C13AEA5FBA6C8247F /* LanguageManager-iOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "LanguageManager-iOS"; path = LanguageManager_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 65C3408050C64D7CA6084E442F3BA3C9 /* IQUITableView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITableView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUITableView+Additions.swift"; sourceTree = "<group>"; }; - 6DAFDC4724628327C2D9E23816F637D7 /* IQToolbarPlaceholderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbarPlaceholderConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQToolbarPlaceholderConfiguration.swift; sourceTree = "<group>"; }; - 6DC3307623E184928D1EB8BF17330A5B /* IQScrollViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQScrollViewConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQScrollViewConfiguration.swift; sourceTree = "<group>"; }; - 6F84FF8DF1044B930A2FF5FD953A06A3 /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTitleBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift; sourceTree = "<group>"; }; - 7371550074335F8BA7CA7223EC67EC3E /* UIImage+NextPrevious.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+NextPrevious.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/UIImage+NextPrevious.swift"; sourceTree = "<group>"; }; + 6545CB5746D70E072C0B66A6ED51C661 /* IQKeyboardManager+UITextFieldViewNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UITextFieldViewNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+UITextFieldViewNotification.swift"; sourceTree = "<group>"; }; + 65EF3B19C7242BB5F426593A9E7423A6 /* IQKeyboardManager+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Deprecated.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Deprecated.swift"; sourceTree = "<group>"; }; + 66798E4BB9BC256464E59BEDB91E54F8 /* ResourceBundle-ImagePicker-ImagePicker-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-ImagePicker-ImagePicker-Info.plist"; sourceTree = "<group>"; }; + 66DBB22164C29B605473C505B42F3CFB /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist"; sourceTree = "<group>"; }; + 67433D9DBF3522810E9E0F0EA7C9B8D3 /* IQKeyboardListener.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardListener.swift; path = IQKeyboardManagerSwift/LIsteners/IQKeyboardListener.swift; sourceTree = "<group>"; }; + 69969CEF39E685D764907F1ACBBAC075 /* LanguageManager-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LanguageManager-iOS-umbrella.h"; sourceTree = "<group>"; }; + 69FF1FF50F50B88798DB1D05C639A392 /* 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>"; }; + 6D3A16C269F2DC722F5557572CE3ED73 /* IQKeyboardManagerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.debug.xcconfig; sourceTree = "<group>"; }; + 758FFBE2BEB846C3A9DFDBC7959EE71E /* ImagePicker.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ImagePicker.modulemap; sourceTree = "<group>"; }; + 776F5202042269324CC40FF99BD02B7B /* IQBarButtonItemConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItemConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQBarButtonItemConfiguration.swift; sourceTree = "<group>"; }; + 794568ED3CC7D20D7931B87E3E1ED5EC /* ImageGalleryViewDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageGalleryViewDataSource.swift; path = Source/ImageGallery/ImageGalleryViewDataSource.swift; sourceTree = "<group>"; }; 798C61760B9BC4B07BC60D42FCC09855 /* Pods-MiniScanner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MiniScanner.release.xcconfig"; sourceTree = "<group>"; }; - 79CF7D56C5D50C18B2EA0ED106D998C7 /* 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; }; + 7A1FFA4BF1326FF1A592B24CACA9CD33 /* IQScrollViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQScrollViewConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQScrollViewConfiguration.swift; sourceTree = "<group>"; }; + 7CA0AA41D7887594E3923678E0D01B2E /* IQKeyboardManager+Toolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Toolbar.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Toolbar.swift"; sourceTree = "<group>"; }; 7CC191E7994C3C7161A6641B457C9166 /* Pods-MiniScanner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MiniScanner.debug.xcconfig"; sourceTree = "<group>"; }; - 7FA5A3035995F2918AACEDBCAA7A2D35 /* Storage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Storage.swift; path = "LanguageManager-iOS/Classes/Helpers/Storage.swift"; sourceTree = "<group>"; }; - 8213085A8B95D8D81A5DA1CCD48176DB /* Languages.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Languages.swift; path = "LanguageManager-iOS/Classes/Constants/Languages.swift"; sourceTree = "<group>"; }; - 821ACCC32DDA25E12CEB2F6F8D3726E3 /* LanguageManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LanguageManager.swift; path = "LanguageManager-iOS/Classes/Main/LanguageManager.swift"; sourceTree = "<group>"; }; - 840FA0B75AF62912A30DDC66B647ED98 /* 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; }; - 85BCC11955CE1DABDDDF22CE6868E687 /* IQKeyboardManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManager.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager.swift; sourceTree = "<group>"; }; + 7E31E8C6413F735B8D285401EA758B8A /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Source/Configuration.swift; sourceTree = "<group>"; }; + 7ECA8C8356419262957B02524B727F97 /* IQUITextFieldView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITextFieldView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUITextFieldView+Additions.swift"; sourceTree = "<group>"; }; + 7FC8DCE50326C3AB2226219736FF9BEA /* BottomContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomContainerView.swift; path = Source/BottomView/BottomContainerView.swift; sourceTree = "<group>"; }; 89194C84FD5E62D9D2C9F2157676FF5C /* Pods-MiniScanner-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MiniScanner-acknowledgements.plist"; sourceTree = "<group>"; }; - 89ED4E0603BF1044DE5F139BBC2BE349 /* IQUICollectionView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUICollectionView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUICollectionView+Additions.swift"; sourceTree = "<group>"; }; - 8C71AA2CEB1CA6AA98A0875E57BC289F /* 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>"; }; - 8D75E27CA01DD3A3D13F7942719A75E7 /* IQNSArray+Sort.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQNSArray+Sort.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQNSArray+Sort.swift"; sourceTree = "<group>"; }; 8D8069D3964814114ACEC3084C010B59 /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQKeyboardManagerSwift-IQKeyboardManagerSwift"; path = IQKeyboardManagerSwift.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 8F6FBD9D86BA55694389EB0CD29B11B3 /* IQTextFieldViewListener.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextFieldViewListener.swift; path = IQKeyboardManagerSwift/LIsteners/IQTextFieldViewListener.swift; sourceTree = "<group>"; }; - 9C5E20C1DBC4A5FF8B8511CCF4D0BF31 /* IQUIView+Hierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+Hierarchy.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUIView+Hierarchy.swift"; sourceTree = "<group>"; }; + 9124BE58A2DBB2B35CBA645044D68239 /* TopView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TopView.swift; path = Source/TopView/TopView.swift; sourceTree = "<group>"; }; + 92B97270B2A293D9164DFF3E7DE472B9 /* Storage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Storage.swift; path = "LanguageManager-iOS/Classes/Helpers/Storage.swift"; sourceTree = "<group>"; }; + 932BC8A383ACE9BE7CEB6D2B8D4A6F6E /* ImageStack.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageStack.swift; path = Source/BottomView/ImageStack.swift; sourceTree = "<group>"; }; + 94FA596E9338AA55BD5759CA73710FD0 /* CameraView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CameraView.swift; path = Source/CameraView/CameraView.swift; sourceTree = "<group>"; }; + 95FA69B329055C5A69A025947D1A6BDE /* ConstraintsSetup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintsSetup.swift; path = Source/Extensions/ConstraintsSetup.swift; sourceTree = "<group>"; }; + 97AA160F23F0CBEDDAF212103E762FC7 /* ImagePicker-ImagePicker */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "ImagePicker-ImagePicker"; path = ImagePicker.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 987CD19BC0CE18F2E00B0AD5ABF8670D /* ImagePicker */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ImagePicker; path = ImagePicker.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9995BBA866CC7D07B92ADF4C7BD1D578 /* IQUIView+Hierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+Hierarchy.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUIView+Hierarchy.swift"; sourceTree = "<group>"; }; + 9AD203FC38F52062D4A5F294E603C17F /* AUTO@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "AUTO@3x.png"; path = "Images/AUTO@3x.png"; sourceTree = "<group>"; }; + 9C49A1EE02A308B6EA2DAC5D4165043E /* IQUIView+IQKeyboardToolbarDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+IQKeyboardToolbarDeprecated.swift"; path = "IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbarDeprecated.swift"; sourceTree = "<group>"; }; + 9CC7A3BC8A0772BB468E28CEBA54C34B /* IQKeyboardManagerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManagerSwift-dummy.m"; sourceTree = "<group>"; }; + 9CD0645BDEA318720AB08D2D13F9F776 /* Helper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helper.swift; path = Source/Helper.swift; sourceTree = "<group>"; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - A42DBD2F42D55606EEBA514009498B87 /* 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; }; - A4ED0E00AAB8CACA3F6000E75530AFB2 /* IQKeyboardManagerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-umbrella.h"; sourceTree = "<group>"; }; - A5A355868A86C403B3B57F24A848F501 /* IQKeyboardManagerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-prefix.pch"; sourceTree = "<group>"; }; - A715620FE6AB187DFE7D76C4DC7E36DC /* IQKeyboardConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardConfiguration.swift; path = IQKeyboardManagerSwift/Configuration/IQKeyboardConfiguration.swift; sourceTree = "<group>"; }; + A337F2F992EE958F88ED3BCB64CF58A8 /* ImagePicker-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ImagePicker-umbrella.h"; sourceTree = "<group>"; }; + A6C8A035F1AEEB733A516FE8BABAB425 /* IQKeyboardInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardInfo.swift; path = IQKeyboardManagerSwift/LIsteners/Info/IQKeyboardInfo.swift; sourceTree = "<group>"; }; A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardManagerSwift; path = IQKeyboardManagerSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A94ED97A899EC2924B83CE2423C76E22 /* IQKeyboardManager+ToolbarActions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ToolbarActions.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+ToolbarActions.swift"; sourceTree = "<group>"; }; - AFF6CB63AE119B421AA38F50662937F2 /* IQKeyboardManager+UITextFieldViewNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UITextFieldViewNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+UITextFieldViewNotification.swift"; sourceTree = "<group>"; }; - B1DA999AC304E70850586EE4582767FA /* 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>"; }; + AE0D934FC0F90FBFC8AB495A08DC726A /* IQTextFieldViewListener.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextFieldViewListener.swift; path = IQKeyboardManagerSwift/LIsteners/IQTextFieldViewListener.swift; sourceTree = "<group>"; }; B2968141E72EA49CC006DD4020E3386D /* Pods-MiniScanner-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MiniScanner-frameworks.sh"; sourceTree = "<group>"; }; - BA2FE52F8360A77D2DC409CB89836048 /* IQKeyboardManager+UIKeyboardNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UIKeyboardNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+UIKeyboardNotification.swift"; sourceTree = "<group>"; }; - BA547A0350A8B9E070A709916D9517F1 /* 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>"; }; - C4E595780AD0EFFE9BC40B77C5313F58 /* IQKeyboardManagerConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstants.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift; sourceTree = "<group>"; }; - C5AEED26E78E4244A163FCBF7FE9E8E2 /* IQPreviousNextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPreviousNextView.swift; path = IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift; sourceTree = "<group>"; }; - CC4D05FC11DD49E34C628FD4533A2568 /* LanguageManager-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LanguageManager-iOS-umbrella.h"; sourceTree = "<group>"; }; - D0D011DB87268C132C9849BCE1C2B0A6 /* IQKeyboardManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Debug.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Debug.swift"; sourceTree = "<group>"; }; - D5DEB8326457EA62DEC0C48A2B4CD8AA /* LanguageManager-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "LanguageManager-iOS.modulemap"; sourceTree = "<group>"; }; - D8C277F89F53CC68CAA556E39994EB6A /* IQKeyboardInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardInfo.swift; path = IQKeyboardManagerSwift/LIsteners/Info/IQKeyboardInfo.swift; sourceTree = "<group>"; }; - DD0FD60A5A5AC2BA854999D1E27CFFA0 /* IQUITextFieldView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITextFieldView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUITextFieldView+Additions.swift"; sourceTree = "<group>"; }; - E9C8EEC4FCA4DFC3C660B514F2F43A03 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardManagerSwift/PrivacyInfo.xcprivacy; sourceTree = "<group>"; }; - ED153F395FC11B265453987CD5F97492 /* LanguageManager-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "LanguageManager-iOS.debug.xcconfig"; sourceTree = "<group>"; }; + B31C6CC4876FACCC77D1B29BDE6C52B2 /* IQUIScrollView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIScrollView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUIScrollView+Additions.swift"; sourceTree = "<group>"; }; + B8F6D16A50923F51B9AB8744E1F39AA2 /* ButtonPicker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ButtonPicker.swift; path = Source/BottomView/ButtonPicker.swift; sourceTree = "<group>"; }; + BB11A29949B45F0E21CCC9A5645F10DF /* DefaultsKeys.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsKeys.swift; path = "LanguageManager-iOS/Classes/Constants/DefaultsKeys.swift"; sourceTree = "<group>"; }; + BF30E86DEEF99037365D3E815AF12C9A /* IQKeyboardManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManager.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager.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; }; + D25E546753F19CF5F44A1103269C6A0C /* focusIcon@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "focusIcon@3x.png"; path = "Images/focusIcon@3x.png"; sourceTree = "<group>"; }; + D3589D9CEDF985DEA8AD54D9E9AA25EF /* ImagePicker-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ImagePicker-Info.plist"; sourceTree = "<group>"; }; + D37ACB5642EA1274E990A85EABD6987C /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnKeyHandler+TextViewDelegate.swift"; path = "IQKeyboardManagerSwift/ReturnKeyHandler/IQKeyboardReturnKeyHandler+TextViewDelegate.swift"; sourceTree = "<group>"; }; + D46990DB1B81BBE4F64A411E2C83DCD4 /* LanguageManager-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "LanguageManager-iOS.debug.xcconfig"; sourceTree = "<group>"; }; + D90AC16A8CC7F09CA132DE12CB77C635 /* ON@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "ON@3x.png"; path = "Images/ON@3x.png"; sourceTree = "<group>"; }; + DBCB9CA9D5CD8C736540D23B837766BC /* IQKeyboardManagerConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstants.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift; sourceTree = "<group>"; }; + DD12317755AD407413792F5103734B67 /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = "<group>"; }; + DE0991D5A676F77EE691D81F11F77AAD /* IQKeyboardManager+ToolbarActions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ToolbarActions.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+ToolbarActions.swift"; sourceTree = "<group>"; }; + DE41824D87EF444F033018D12B726748 /* IQToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbar.swift; path = IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift; sourceTree = "<group>"; }; + DF5BA12FA02A6A415ACF7DB7CA6A84C0 /* IQKeyboardManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Internal.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Internal.swift"; sourceTree = "<group>"; }; + E12E8839E65F344EB560691B9DDB51F2 /* IQUICollectionView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUICollectionView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUICollectionView+Additions.swift"; sourceTree = "<group>"; }; + E92074E9B4338206217D020D90B31389 /* ViewDirection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewDirection.swift; path = "LanguageManager-iOS/Classes/Constants/ViewDirection.swift"; sourceTree = "<group>"; }; + E9FA0E2CFB53D4285E48471B0E7A1E37 /* 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>"; }; + ECA17CCDCF79CE17E6FFA211429CF7F5 /* IQKeyboardManagerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-prefix.pch"; sourceTree = "<group>"; }; ED8E7C0ED656254925E918D5509B655C /* Pods-MiniScanner-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MiniScanner-Info.plist"; sourceTree = "<group>"; }; - EEBBFCA67A8342E7E8633D54FB526A70 /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnKeyHandler+TextFieldDelegate.swift"; path = "IQKeyboardManagerSwift/ReturnKeyHandler/IQKeyboardReturnKeyHandler+TextFieldDelegate.swift"; sourceTree = "<group>"; }; - F97980DD7B51F2D18383716A1996D415 /* 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>"; }; - F97F62F12C7D10E03540793DDD57009B /* IQKeyboardManagerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.debug.xcconfig; sourceTree = "<group>"; }; - FAEC79518E786E0A7BC09629C4AE79C3 /* IQBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift; sourceTree = "<group>"; }; - FC0D18E78426D786741B2D8FEE317281 /* IQUIScrollView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIScrollView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUIScrollView+Additions.swift"; sourceTree = "<group>"; }; - FD0CA37F495B55663C4845F92F8C9BED /* IQKeyboardManagerCompatible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerCompatible.swift; path = IQKeyboardManagerSwift/IQKeyboardManagerCompatible/IQKeyboardManagerCompatible.swift; sourceTree = "<group>"; }; - FE4138031533EEDC8A9902D7E99D501C /* IQUIViewController+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIViewController+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUIViewController+Additions.swift"; sourceTree = "<group>"; }; + EE00C2D2CCBF4FCD594D8B3D68B96F02 /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnKeyHandler+TextFieldDelegate.swift"; path = "IQKeyboardManagerSwift/ReturnKeyHandler/IQKeyboardReturnKeyHandler+TextFieldDelegate.swift"; sourceTree = "<group>"; }; + EE4E6B7F704D79ABA720D422285F9D89 /* IQUIViewController+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIViewController+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUIViewController+Additions.swift"; sourceTree = "<group>"; }; + F091539577AF2A52CCD296CA28B06959 /* IQTextFieldViewInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextFieldViewInfo.swift; path = IQKeyboardManagerSwift/LIsteners/Info/IQTextFieldViewInfo.swift; sourceTree = "<group>"; }; + F24753DAC0B3ECA5A243AB9E54E4E70E /* LanguageManager-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "LanguageManager-iOS.release.xcconfig"; sourceTree = "<group>"; }; + F3476B6353A4A07F68321A11A638F1ED /* IQKeyboardManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Debug.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Debug.swift"; 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; }; + F54809C99BF364CA0C71A27574215418 /* IQBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift; sourceTree = "<group>"; }; + F87307CA39F67960430407BFDDD9CAC9 /* IQUITableView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITableView+Additions.swift"; path = "IQKeyboardManagerSwift/UIKitExtensions/IQUITableView+Additions.swift"; sourceTree = "<group>"; }; + FE3CF42909A3D3E3D162D79BB63EEDA3 /* 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>"; }; + FE71D63EB6BD690210A482A08F65116E /* LocationManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocationManager.swift; path = Source/LocationManager.swift; sourceTree = "<group>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 0C6107386EEB485120DE0F484775F9F2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 37127D5377EA0917DA66F0DC4C724016 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2067457DB9BF3FC9BFE99C90B602174A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BD0139B5F1C96514CB66C4310AAF1DF5 /* AVFoundation.framework in Frameworks */, + D4BB4D928CB44E6CE753BEA14E5AC918 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 3130A51D7DFF19A4DA7649752464E8ED /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -202,43 +299,62 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 8181E2665F51FD7A659B08B2AD775BAA /* Frameworks */ = { + A576A6B66E7FF54F0F06CD54397C2528 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + CC897E71556348377B4C31307E208C80 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - A2F22B93888754A7DF5F74ED4B572E1B /* Frameworks */ = { + B74027AAACA9B98926E5D708197AA216 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3050954B1D31D76708C7573A0A410951 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - A576A6B66E7FF54F0F06CD54397C2528 /* Frameworks */ = { + C293BFB221793DDF3BE8FEDE0F0FB9CA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CC897E71556348377B4C31307E208C80 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1517BE1B9476BC36DA77D9D6370B9093 /* Resources */ = { + 0285214F24466DADA9DB9AC0EF8966F0 /* iOS */ = { isa = PBXGroup; children = ( - E9C8EEC4FCA4DFC3C660B514F2F43A03 /* PrivacyInfo.xcprivacy */, + 56B28C4E9F718651E6E1B010F31566EB /* AVFoundation.framework */, + F3DF46AD6E25D68DB361974528992221 /* CoreGraphics.framework */, + C54FCF3DBFE97D4603C0EACF18FA0D04 /* Foundation.framework */, + 2EE6749FC108D414ECB83B77EF11BD86 /* QuartzCore.framework */, + 1C63F26DA7ECAFB44B0A5DD0BC0E2F89 /* UIKit.framework */, + ); + name = iOS; + sourceTree = "<group>"; + }; + 14D2BCEA9582797D7C2D9810D61E6B9B /* Resources */ = { + isa = PBXGroup; + children = ( + 9AD203FC38F52062D4A5F294E603C17F /* AUTO@3x.png */, + 56DE81497BE6CBDC2B6CDAC08BA3C6F3 /* cameraIcon@3x.png */, + D25E546753F19CF5F44A1103269C6A0C /* focusIcon@3x.png */, + 3204AD5BD7555222FD07431DEADAB069 /* OFF@3x.png */, + D90AC16A8CC7F09CA132DE12CB77C635 /* ON@3x.png */, + 1CE69BAAD4B7B684548B97704EB6F64B /* selectedImageGallery@3x.png */, + 5A8EE629BBC992E72001FE1BB2A86A30 /* video@3x.png */, ); name = Resources; sourceTree = "<group>"; }; - 19746984F7078B76BDE5AB11C2BE3B60 /* Products */ = { + 414B37470C9771914D34163C0BF04CED /* Products */ = { isa = PBXGroup; children = ( + 987CD19BC0CE18F2E00B0AD5ABF8670D /* ImagePicker */, + 97AA160F23F0CBEDDAF212103E762FC7 /* ImagePicker-ImagePicker */, A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */, 8D8069D3964814114ACEC3084C010B59 /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */, 6473C16F43F7217C13AEA5FBA6C8247F /* LanguageManager-iOS */, @@ -247,63 +363,54 @@ name = Products; sourceTree = "<group>"; }; - 1C9CDF2CD7BF08A25723B10B9A173C0C /* Pods */ = { + 51D6128417E74AF2EAD8DC2A3AD770AA /* IQKeyboardManagerSwift */ = { isa = PBXGroup; children = ( - 216745C0B58F7883065166E3E0A897BC /* IQKeyboardManagerSwift */, - E4219A16D89A1708CCE232F0E441E9E4 /* LanguageManager-iOS */, - ); - name = Pods; - sourceTree = "<group>"; - }; - 216745C0B58F7883065166E3E0A897BC /* IQKeyboardManagerSwift */ = { - isa = PBXGroup; - children = ( - 1FDB8EF96877DD0C01B2233EBA5702C8 /* IQActiveConfiguration.swift */, - FAEC79518E786E0A7BC09629C4AE79C3 /* IQBarButtonItem.swift */, - 2F2A273B75770A5ACE51A2E41CB8EFDC /* IQBarButtonItemConfiguration.swift */, - 415D9AA15EF688EB94C14ED9A8F7672C /* IQInvocation.swift */, - A715620FE6AB187DFE7D76C4DC7E36DC /* IQKeyboardConfiguration.swift */, - D8C277F89F53CC68CAA556E39994EB6A /* IQKeyboardInfo.swift */, - 5CBB070ABBD305023F05B427546A9285 /* IQKeyboardListener.swift */, - 85BCC11955CE1DABDDDF22CE6868E687 /* IQKeyboardManager.swift */, - D0D011DB87268C132C9849BCE1C2B0A6 /* IQKeyboardManager+Debug.swift */, - 345569BAFF7969027C26148BDCD67089 /* IQKeyboardManager+Deprecated.swift */, - 3AE76EF896CB4170CBABC6E7512AEFA5 /* IQKeyboardManager+Internal.swift */, - 1BA86CB5FEFDEFCB074FECBF22548E30 /* IQKeyboardManager+Position.swift */, - 3FD998ABAEDD160FD4D5C8324BD5294E /* IQKeyboardManager+Toolbar.swift */, - A94ED97A899EC2924B83CE2423C76E22 /* IQKeyboardManager+ToolbarActions.swift */, - BA2FE52F8360A77D2DC409CB89836048 /* IQKeyboardManager+UIKeyboardNotification.swift */, - AFF6CB63AE119B421AA38F50662937F2 /* IQKeyboardManager+UITextFieldViewNotification.swift */, - FD0CA37F495B55663C4845F92F8C9BED /* IQKeyboardManagerCompatible.swift */, - C4E595780AD0EFFE9BC40B77C5313F58 /* IQKeyboardManagerConstants.swift */, - 5C5AA613051563C2E57D792135A350BD /* IQKeyboardReturnKeyHandler.swift */, - EEBBFCA67A8342E7E8633D54FB526A70 /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift */, - 64268BE3E3D15E6B9A3CA1D02825D5BC /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift */, - 8D75E27CA01DD3A3D13F7942719A75E7 /* IQNSArray+Sort.swift */, - 1DB82F0DC638C418E9156FE1254F4233 /* IQPlaceholderable.swift */, - C5AEED26E78E4244A163FCBF7FE9E8E2 /* IQPreviousNextView.swift */, - 54F51BCA558A49D1481A562418DAA177 /* IQRootControllerConfiguration.swift */, - 6DC3307623E184928D1EB8BF17330A5B /* IQScrollViewConfiguration.swift */, - 517D7F8D28A92A90BE828A2B6F463359 /* IQTextFieldViewInfo.swift */, - 3E81825ECD551E0611FFB5F8D0B7BC9D /* IQTextFieldViewInfoModel.swift */, - 8F6FBD9D86BA55694389EB0CD29B11B3 /* IQTextFieldViewListener.swift */, - 0586AA806C9438959268322091016DF1 /* IQTextView.swift */, - 6F84FF8DF1044B930A2FF5FD953A06A3 /* IQTitleBarButtonItem.swift */, - 57E2E81635BF125FB406A269ED33B812 /* IQToolbar.swift */, - 2B4AC356E7C67614B8739A99BF589079 /* IQToolbarConfiguration.swift */, - 6DAFDC4724628327C2D9E23816F637D7 /* IQToolbarPlaceholderConfiguration.swift */, - 89ED4E0603BF1044DE5F139BBC2BE349 /* IQUICollectionView+Additions.swift */, - FC0D18E78426D786741B2D8FEE317281 /* IQUIScrollView+Additions.swift */, - 65C3408050C64D7CA6084E442F3BA3C9 /* IQUITableView+Additions.swift */, - DD0FD60A5A5AC2BA854999D1E27CFFA0 /* IQUITextFieldView+Additions.swift */, - 9C5E20C1DBC4A5FF8B8511CCF4D0BF31 /* IQUIView+Hierarchy.swift */, - 2542B36B0E3593C4EE735B12326CEB3E /* IQUIView+IQKeyboardToolbar.swift */, - 074AE9C63795CE067E1C72CDBE945B73 /* IQUIView+IQKeyboardToolbarDeprecated.swift */, - FE4138031533EEDC8A9902D7E99D501C /* IQUIViewController+Additions.swift */, - 7371550074335F8BA7CA7223EC67EC3E /* UIImage+NextPrevious.swift */, - 1517BE1B9476BC36DA77D9D6370B9093 /* Resources */, - B14FB62810B4B86CF960BE6F6F9FF856 /* Support Files */, + 37F3FF354B47453D73695BEC007AC143 /* IQActiveConfiguration.swift */, + F54809C99BF364CA0C71A27574215418 /* IQBarButtonItem.swift */, + 776F5202042269324CC40FF99BD02B7B /* IQBarButtonItemConfiguration.swift */, + 12DA7CB8B06F9B4E75B4BE4A55D66CBB /* IQInvocation.swift */, + 2AFC32EE73376AA12A98E6EE8C962B88 /* IQKeyboardConfiguration.swift */, + A6C8A035F1AEEB733A516FE8BABAB425 /* IQKeyboardInfo.swift */, + 67433D9DBF3522810E9E0F0EA7C9B8D3 /* IQKeyboardListener.swift */, + BF30E86DEEF99037365D3E815AF12C9A /* IQKeyboardManager.swift */, + F3476B6353A4A07F68321A11A638F1ED /* IQKeyboardManager+Debug.swift */, + 65EF3B19C7242BB5F426593A9E7423A6 /* IQKeyboardManager+Deprecated.swift */, + DF5BA12FA02A6A415ACF7DB7CA6A84C0 /* IQKeyboardManager+Internal.swift */, + 4B0113018B630AE01EAD600A31152B43 /* IQKeyboardManager+Position.swift */, + 7CA0AA41D7887594E3923678E0D01B2E /* IQKeyboardManager+Toolbar.swift */, + DE0991D5A676F77EE691D81F11F77AAD /* IQKeyboardManager+ToolbarActions.swift */, + 2D60C26629AB4EB34E9509E27D3103AA /* IQKeyboardManager+UIKeyboardNotification.swift */, + 6545CB5746D70E072C0B66A6ED51C661 /* IQKeyboardManager+UITextFieldViewNotification.swift */, + 60A9AB96142FF7E5FE41168C9DFCC139 /* IQKeyboardManagerCompatible.swift */, + DBCB9CA9D5CD8C736540D23B837766BC /* IQKeyboardManagerConstants.swift */, + 3856806A73C1E1F897F21B7703C02FF2 /* IQKeyboardReturnKeyHandler.swift */, + EE00C2D2CCBF4FCD594D8B3D68B96F02 /* IQKeyboardReturnKeyHandler+TextFieldDelegate.swift */, + D37ACB5642EA1274E990A85EABD6987C /* IQKeyboardReturnKeyHandler+TextViewDelegate.swift */, + 4AD85F77285996984D7DC8AA66062221 /* IQNSArray+Sort.swift */, + 52C66366FFABB084A228CCB1F1B765FE /* IQPlaceholderable.swift */, + 24C764B578E4823A3AABECAAF4F7591A /* IQPreviousNextView.swift */, + 05C38EA5A2F10F811754FEB35498986A /* IQRootControllerConfiguration.swift */, + 7A1FFA4BF1326FF1A592B24CACA9CD33 /* IQScrollViewConfiguration.swift */, + F091539577AF2A52CCD296CA28B06959 /* IQTextFieldViewInfo.swift */, + 5895F0210CAB26647CA29654FF007E99 /* IQTextFieldViewInfoModel.swift */, + AE0D934FC0F90FBFC8AB495A08DC726A /* IQTextFieldViewListener.swift */, + 09407063B4DCEC8E38B63DF4744E779C /* IQTextView.swift */, + 212BB8E46A9CFE25AA60A6F3F3B3A112 /* IQTitleBarButtonItem.swift */, + DE41824D87EF444F033018D12B726748 /* IQToolbar.swift */, + 56B6273816518D69D33257DEE95BAAC6 /* IQToolbarConfiguration.swift */, + 4A40A35AE7D5D504C20486E1E7AE44F8 /* IQToolbarPlaceholderConfiguration.swift */, + E12E8839E65F344EB560691B9DDB51F2 /* IQUICollectionView+Additions.swift */, + B31C6CC4876FACCC77D1B29BDE6C52B2 /* IQUIScrollView+Additions.swift */, + F87307CA39F67960430407BFDDD9CAC9 /* IQUITableView+Additions.swift */, + 7ECA8C8356419262957B02524B727F97 /* IQUITextFieldView+Additions.swift */, + 9995BBA866CC7D07B92ADF4C7BD1D578 /* IQUIView+Hierarchy.swift */, + 22B1727A691C1A5484F16E1D8AC17554 /* IQUIView+IQKeyboardToolbar.swift */, + 9C49A1EE02A308B6EA2DAC5D4165043E /* IQUIView+IQKeyboardToolbarDeprecated.swift */, + EE4E6B7F704D79ABA720D422285F9D89 /* IQUIViewController+Additions.swift */, + 05F4AF42F743D001C9DC09A502C85802 /* UIImage+NextPrevious.swift */, + 7E69879E255AADAC853FEB15D9D309B9 /* Resources */, + F337917256EB2B7DED98BB523933504C /* Support Files */, ); name = IQKeyboardManagerSwift; path = IQKeyboardManagerSwift; @@ -317,70 +424,116 @@ name = "Targets Support Files"; sourceTree = "<group>"; }; - B14FB62810B4B86CF960BE6F6F9FF856 /* Support Files */ = { + 7E69879E255AADAC853FEB15D9D309B9 /* Resources */ = { + isa = PBXGroup; + children = ( + 25BAE128B5B8B1B38692C2BFAD093E48 /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = "<group>"; + }; + 839E4189BB1A329123F56A6CD2A52237 /* ImagePicker */ = { isa = PBXGroup; children = ( - 28C0DECFE80A050466E59F2C181B9EFC /* IQKeyboardManagerSwift.modulemap */, - 3093517495679B177EFC5F1443A6F09E /* IQKeyboardManagerSwift-dummy.m */, - 0D21025AC0DFA4E915F75D3EB6ED0BC2 /* IQKeyboardManagerSwift-Info.plist */, - A5A355868A86C403B3B57F24A848F501 /* IQKeyboardManagerSwift-prefix.pch */, - A4ED0E00AAB8CACA3F6000E75530AFB2 /* IQKeyboardManagerSwift-umbrella.h */, - F97F62F12C7D10E03540793DDD57009B /* IQKeyboardManagerSwift.debug.xcconfig */, - 22FF8311D744FA0C5E23B24C7AE67B1D /* IQKeyboardManagerSwift.release.xcconfig */, - 4CF6F91F9C3F1332F80F8D41322A26D0 /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */, + 0B740D3BEFBBD2B159902A4F36B4A761 /* AssetManager.swift */, + 7FC8DCE50326C3AB2226219736FF9BEA /* BottomContainerView.swift */, + B8F6D16A50923F51B9AB8744E1F39AA2 /* ButtonPicker.swift */, + 2567E8B0FE8C2DEBED587420F6316247 /* CameraMan.swift */, + 94FA596E9338AA55BD5759CA73710FD0 /* CameraView.swift */, + 7E31E8C6413F735B8D285401EA758B8A /* Configuration.swift */, + 95FA69B329055C5A69A025947D1A6BDE /* ConstraintsSetup.swift */, + 9CD0645BDEA318720AB08D2D13F9F776 /* Helper.swift */, + 15D842D39CD83A083226D9BF0FFC597E /* ImageGalleryLayout.swift */, + 4B6482D1F1E26819A2B81EB736397809 /* ImageGalleryView.swift */, + 13A787FCA166800F902447EBBD78AF15 /* ImageGalleryViewCell.swift */, + 794568ED3CC7D20D7931B87E3E1ED5EC /* ImageGalleryViewDataSource.swift */, + 5C1CA9FAC18E5BAD509EA5525C46C4B3 /* ImagePickerController.swift */, + 932BC8A383ACE9BE7CEB6D2B8D4A6F6E /* ImageStack.swift */, + FE71D63EB6BD690210A482A08F65116E /* LocationManager.swift */, + 4671537AE052A18A18878183193379A0 /* StackView.swift */, + 9124BE58A2DBB2B35CBA645044D68239 /* TopView.swift */, + 1B865459F6CCA8E44FC4191DC181B810 /* VideoInfoView.swift */, + 14D2BCEA9582797D7C2D9810D61E6B9B /* Resources */, + A4E10488C9CDA472514A7D7EC40DB58F /* Support Files */, + ); + name = ImagePicker; + path = ImagePicker; + sourceTree = "<group>"; + }; + A4E10488C9CDA472514A7D7EC40DB58F /* Support Files */ = { + isa = PBXGroup; + children = ( + 758FFBE2BEB846C3A9DFDBC7959EE71E /* ImagePicker.modulemap */, + 0F759918B2149982EE1374EE88128F2A /* ImagePicker-dummy.m */, + D3589D9CEDF985DEA8AD54D9E9AA25EF /* ImagePicker-Info.plist */, + 41A97DE5272AEC2243073382592538BD /* ImagePicker-prefix.pch */, + A337F2F992EE958F88ED3BCB64CF58A8 /* ImagePicker-umbrella.h */, + 55D95ACE18BA0D8C6DD05DCDCA6CFF6D /* ImagePicker.debug.xcconfig */, + 0558475D71137D635FA6B52E29343634 /* ImagePicker.release.xcconfig */, + 66798E4BB9BC256464E59BEDB91E54F8 /* ResourceBundle-ImagePicker-ImagePicker-Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/IQKeyboardManagerSwift"; + path = "../Target Support Files/ImagePicker"; sourceTree = "<group>"; }; - B27A879E075CE0048B8E592B3B333D64 /* Support Files */ = { + B94D7768568A9992200DB461E8CF687F /* Frameworks */ = { isa = PBXGroup; children = ( - D5DEB8326457EA62DEC0C48A2B4CD8AA /* LanguageManager-iOS.modulemap */, - 4F859DF7872022F09706156C5EB2968D /* LanguageManager-iOS-dummy.m */, - 1C5679EFA26B0E4E1992CAA7C928899A /* LanguageManager-iOS-Info.plist */, - 46C8738ABBC60F8B9E148126B4956F55 /* LanguageManager-iOS-prefix.pch */, - CC4D05FC11DD49E34C628FD4533A2568 /* LanguageManager-iOS-umbrella.h */, - ED153F395FC11B265453987CD5F97492 /* LanguageManager-iOS.debug.xcconfig */, - 447CF01CBF4066825019B2CBB67AEBDF /* LanguageManager-iOS.release.xcconfig */, + 0285214F24466DADA9DB9AC0EF8966F0 /* iOS */, + ); + name = Frameworks; + sourceTree = "<group>"; + }; + C42396A0500CE836A0160C27E189AB1B /* Support Files */ = { + isa = PBXGroup; + children = ( + 0A4D0507AE0FB32159CA30247E8605A0 /* LanguageManager-iOS.modulemap */, + 05A86C0FA5B2DB6BCCC9764DD63622F2 /* LanguageManager-iOS-dummy.m */, + 0FD1D07460FA621C6B65EF8FEB7643B5 /* LanguageManager-iOS-Info.plist */, + 3354FDF80A0F919F09224E7D9D382931 /* LanguageManager-iOS-prefix.pch */, + 69969CEF39E685D764907F1ACBBAC075 /* LanguageManager-iOS-umbrella.h */, + D46990DB1B81BBE4F64A411E2C83DCD4 /* LanguageManager-iOS.debug.xcconfig */, + F24753DAC0B3ECA5A243AB9E54E4E70E /* LanguageManager-iOS.release.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/LanguageManager-iOS"; sourceTree = "<group>"; }; - BA4F31F07263C99FC76E66D632A59F09 /* Frameworks */ = { + C473AAD6494672FD9D6E815B92885505 /* Pods */ = { isa = PBXGroup; children = ( - F9D206BABE81E6BF0B9B23880B238CC7 /* iOS */, + 839E4189BB1A329123F56A6CD2A52237 /* ImagePicker */, + 51D6128417E74AF2EAD8DC2A3AD770AA /* IQKeyboardManagerSwift */, + DA15FA5FCA256678A318AE800A9A3225 /* LanguageManager-iOS */, ); - name = Frameworks; + name = Pods; sourceTree = "<group>"; }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - BA4F31F07263C99FC76E66D632A59F09 /* Frameworks */, - 1C9CDF2CD7BF08A25723B10B9A173C0C /* Pods */, - 19746984F7078B76BDE5AB11C2BE3B60 /* Products */, + B94D7768568A9992200DB461E8CF687F /* Frameworks */, + C473AAD6494672FD9D6E815B92885505 /* Pods */, + 414B37470C9771914D34163C0BF04CED /* Products */, 67EA5FFBCFCDDED6A445407A917EE0A1 /* Targets Support Files */, ); sourceTree = "<group>"; }; - E4219A16D89A1708CCE232F0E441E9E4 /* LanguageManager-iOS */ = { + DA15FA5FCA256678A318AE800A9A3225 /* LanguageManager-iOS */ = { isa = PBXGroup; children = ( - 0EBDDB959E9E6ACF17E9A1407FC3F7E2 /* DefaultsKeys.swift */, - 821ACCC32DDA25E12CEB2F6F8D3726E3 /* LanguageManager.swift */, - 8213085A8B95D8D81A5DA1CCD48176DB /* Languages.swift */, - 7FA5A3035995F2918AACEDBCAA7A2D35 /* Storage.swift */, - BA547A0350A8B9E070A709916D9517F1 /* String+Localiz.swift */, - B1DA999AC304E70850586EE4582767FA /* UIButton+Direction.swift */, - F97980DD7B51F2D18383716A1996D415 /* UIImageView+Direction.swift */, - 8C71AA2CEB1CA6AA98A0875E57BC289F /* UIView+Direction.swift */, - 3CEB1EE4CDFE8247E3EBD87AEAFF7812 /* UIView+Swizzling.swift */, - 2946B406AC9EA1328621F52978CFBB27 /* ViewDirection.swift */, - B27A879E075CE0048B8E592B3B333D64 /* Support Files */, + BB11A29949B45F0E21CCC9A5645F10DF /* DefaultsKeys.swift */, + 35459329B22491B6C7B191993A04DF22 /* LanguageManager.swift */, + 39E055A62AEBFAD3130BD5CED47ED6B0 /* Languages.swift */, + 92B97270B2A293D9164DFF3E7DE472B9 /* Storage.swift */, + E9FA0E2CFB53D4285E48471B0E7A1E37 /* String+Localiz.swift */, + 05C4CD3B1FDF228F5A9AF421EC7ED382 /* UIButton+Direction.swift */, + FE3CF42909A3D3E3D162D79BB63EEDA3 /* UIImageView+Direction.swift */, + 69FF1FF50F50B88798DB1D05C639A392 /* UIView+Direction.swift */, + 12D71B9C48796CE44C929131B7E65125 /* UIView+Swizzling.swift */, + E92074E9B4338206217D020D90B31389 /* ViewDirection.swift */, + C42396A0500CE836A0160C27E189AB1B /* Support Files */, ); name = "LanguageManager-iOS"; path = "LanguageManager-iOS"; @@ -403,33 +556,46 @@ path = "Target Support Files/Pods-MiniScanner"; sourceTree = "<group>"; }; - F9D206BABE81E6BF0B9B23880B238CC7 /* iOS */ = { + F337917256EB2B7DED98BB523933504C /* Support Files */ = { isa = PBXGroup; children = ( - 840FA0B75AF62912A30DDC66B647ED98 /* CoreGraphics.framework */, - 79CF7D56C5D50C18B2EA0ED106D998C7 /* Foundation.framework */, - A42DBD2F42D55606EEBA514009498B87 /* QuartzCore.framework */, - 04D60AC13D33197690A05C641925DDDA /* UIKit.framework */, + DD12317755AD407413792F5103734B67 /* IQKeyboardManagerSwift.modulemap */, + 9CC7A3BC8A0772BB468E28CEBA54C34B /* IQKeyboardManagerSwift-dummy.m */, + 157E715A00214E98D72A5B04D5B4B29C /* IQKeyboardManagerSwift-Info.plist */, + ECA17CCDCF79CE17E6FFA211429CF7F5 /* IQKeyboardManagerSwift-prefix.pch */, + 17B99B6ED0F894D17B72357D78C2F98E /* IQKeyboardManagerSwift-umbrella.h */, + 6D3A16C269F2DC722F5557572CE3ED73 /* IQKeyboardManagerSwift.debug.xcconfig */, + 14C6E980E604962C8B903F524FC4EF63 /* IQKeyboardManagerSwift.release.xcconfig */, + 66DBB22164C29B605473C505B42F3CFB /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */, ); - name = iOS; + name = "Support Files"; + path = "../Target Support Files/IQKeyboardManagerSwift"; sourceTree = "<group>"; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 1E7BDC089B22E2F58EEE97E5CC40B0DB /* Headers */ = { + 11370304D07B86BF4935D7D5A612503A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 9E704111CAAACBF64155A576FC337323 /* LanguageManager-iOS-umbrella.h in Headers */, + 743ED1DCEC16DC2E7FAD8FBDD276EC8F /* ImagePicker-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4DDD6C590954CC9327842078D4FD718D /* Headers */ = { + 19277ECC3F6703561BFCA05113EE305F /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4B6666D6D3C57CF29C9767A9CF94CB4C /* Pods-MiniScanner-umbrella.h in Headers */, + 7FF839630F762642F7EEC6809EC69260 /* Pods-MiniScanner-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1E7BDC089B22E2F58EEE97E5CC40B0DB /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 9E704111CAAACBF64155A576FC337323 /* LanguageManager-iOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -444,26 +610,63 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 01CB8D6098C21E12CE735619344DE81E /* ImagePicker */ = { + isa = PBXNativeTarget; + buildConfigurationList = CE3A25ED647A443AB573ACE0764C0105 /* Build configuration list for PBXNativeTarget "ImagePicker" */; + buildPhases = ( + 11370304D07B86BF4935D7D5A612503A /* Headers */, + 2B626AFFE9BD7779C34A93A510CE1073 /* Sources */, + 2067457DB9BF3FC9BFE99C90B602174A /* Frameworks */, + 500BEBDB28E9B664CEB4A237CBAE1EC8 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + BAA18994972D7FF9295C1312321CA22F /* PBXTargetDependency */, + ); + name = ImagePicker; + productName = ImagePicker; + productReference = 987CD19BC0CE18F2E00B0AD5ABF8670D /* ImagePicker */; + productType = "com.apple.product-type.framework"; + }; 4372AB6A3C495222906A1ABFD39A4463 /* Pods-MiniScanner */ = { isa = PBXNativeTarget; - buildConfigurationList = 04D5557B7DEECE0FC64F5301035A4CC3 /* Build configuration list for PBXNativeTarget "Pods-MiniScanner" */; + buildConfigurationList = 915D1DE42ADD74AC7AEC4E6D2FB28E6E /* Build configuration list for PBXNativeTarget "Pods-MiniScanner" */; buildPhases = ( - 4DDD6C590954CC9327842078D4FD718D /* Headers */, - F9C75295AA740325086A3FCA7458D3EE /* Sources */, - A2F22B93888754A7DF5F74ED4B572E1B /* Frameworks */, - B2D3F813B90BA06914DE6D3D710B9BFA /* Resources */, + 19277ECC3F6703561BFCA05113EE305F /* Headers */, + 1702EE92AB183E8947AE888376A83241 /* Sources */, + 0C6107386EEB485120DE0F484775F9F2 /* Frameworks */, + EF34F86EEC4B816E1D1B9F3B72A404E9 /* Resources */, ); buildRules = ( ); dependencies = ( - 70B394A376C36F5FD5FB14290629A6AF /* PBXTargetDependency */, - 9E5E0442EF5E505708CA6D618C31E468 /* PBXTargetDependency */, + 1E83CA3E91D0162597541464E78F447A /* PBXTargetDependency */, + 8708046FF22A47E0A841083FDBA4D843 /* PBXTargetDependency */, + 7FA52EEB3902D53098EE78A99D0A9E1B /* PBXTargetDependency */, ); name = "Pods-MiniScanner"; productName = Pods_MiniScanner; productReference = 3438B9790556194C521D4C9806D29C85 /* Pods-MiniScanner */; productType = "com.apple.product-type.framework"; }; + 614D1818852890AC7D3CDF68D512C370 /* ImagePicker-ImagePicker */ = { + isa = PBXNativeTarget; + buildConfigurationList = D111ABA7DE141A3E1DA6E0A3BBCAE6CD /* Build configuration list for PBXNativeTarget "ImagePicker-ImagePicker" */; + buildPhases = ( + 2E09DC90378960CB7D1FEA7029DFC9E4 /* Sources */, + B74027AAACA9B98926E5D708197AA216 /* Frameworks */, + 0C2220C690AA58374D0B265E829CA01E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "ImagePicker-ImagePicker"; + productName = ImagePicker; + productReference = 97AA160F23F0CBEDDAF212103E762FC7 /* ImagePicker-ImagePicker */; + productType = "com.apple.product-type.bundle"; + }; 75F1EA88CB9544AB5CBE20DEC9A011AE /* LanguageManager-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 3E005A95330A065B56DC3405DE620CD6 /* Build configuration list for PBXNativeTarget "LanguageManager-iOS" */; @@ -484,11 +687,11 @@ }; 982A68D37F5DCBC1FC1FDC0BB2F0EB8E /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */ = { isa = PBXNativeTarget; - buildConfigurationList = F355D0811AB05A75A0C8E6107F95470A /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */; + buildConfigurationList = 9828E23DF340160161F736A29B59044A /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */; buildPhases = ( - 8FE0832F0DF382FA18A5D3CADD1B6351 /* Sources */, - 8181E2665F51FD7A659B08B2AD775BAA /* Frameworks */, - 1F6536881239A8473B02B921C14549E4 /* Resources */, + 4E37EBCCC5FE315643A88631953693B0 /* Sources */, + C293BFB221793DDF3BE8FEDE0F0FB9CA /* Frameworks */, + 14C9CEA56EFEA45E3B0B3E68893458E6 /* Resources */, ); buildRules = ( ); @@ -511,7 +714,7 @@ buildRules = ( ); dependencies = ( - DFFDC8AC6E79C759B3548C41CB3F7C76 /* PBXTargetDependency */, + 3C27430540EA0777460F26F49BE64874 /* PBXTargetDependency */, ); name = IQKeyboardManagerSwift; productName = IQKeyboardManagerSwift; @@ -536,10 +739,12 @@ en, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 19746984F7078B76BDE5AB11C2BE3B60 /* Products */; + productRefGroup = 414B37470C9771914D34163C0BF04CED /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( + 01CB8D6098C21E12CE735619344DE81E /* ImagePicker */, + 614D1818852890AC7D3CDF68D512C370 /* ImagePicker-ImagePicker */, B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */, 982A68D37F5DCBC1FC1FDC0BB2F0EB8E /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */, 75F1EA88CB9544AB5CBE20DEC9A011AE /* LanguageManager-iOS */, @@ -549,11 +754,25 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 1F6536881239A8473B02B921C14549E4 /* Resources */ = { + 0C2220C690AA58374D0B265E829CA01E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 670310D98A231B664F5C424035D37B24 /* PrivacyInfo.xcprivacy in Resources */, + AD27127B352DC23D629CB917A9432A33 /* AUTO@3x.png in Resources */, + 78EB1850E530C480700B150286C9BE56 /* cameraIcon@3x.png in Resources */, + FD9754C78D0CA8559EC35E54FDD5A33E /* focusIcon@3x.png in Resources */, + C1B5109626878EAF4C3156DBD7DEE9AA /* OFF@3x.png in Resources */, + 9CEA579E5B0912F3ECE7585A26719214 /* ON@3x.png in Resources */, + 930D2CF140D30530A3E5C6A5F9342096 /* selectedImageGallery@3x.png in Resources */, + 8880A11DBF2BF1FFC5317019D9AC81DE /* video@3x.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 14C9CEA56EFEA45E3B0B3E68893458E6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 416D1E57C03F53F7F1D3A2FCBA276D62 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -572,7 +791,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B2D3F813B90BA06914DE6D3D710B9BFA /* Resources */ = { + 500BEBDB28E9B664CEB4A237CBAE1EC8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1BBD42E84E62842B6EA186CEF24BBF45 /* ImagePicker-ImagePicker in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EF34F86EEC4B816E1D1B9F3B72A404E9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -582,6 +809,47 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 1702EE92AB183E8947AE888376A83241 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 593405FFB5F7E44BE8C49242896792EF /* Pods-MiniScanner-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2B626AFFE9BD7779C34A93A510CE1073 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ECFE64B0759EFA4F555994B6CDCED624 /* AssetManager.swift in Sources */, + 784DF7F278DC988FEEECB999A9ADFCBB /* BottomContainerView.swift in Sources */, + 7DB7E0E519A315B78D72BF7C63C64E30 /* ButtonPicker.swift in Sources */, + 1BBED45FEDD4AF437A762909E4937019 /* CameraMan.swift in Sources */, + 829A79A8C324697D5A619C029AEB0063 /* CameraView.swift in Sources */, + F2ED9C9337B84D1E42E67BF7F7DAD72C /* Configuration.swift in Sources */, + 38FD95DCC2D02D5B78BE9AEE48DBDF25 /* ConstraintsSetup.swift in Sources */, + 1D5090C638CFC6ABA603A73B2D890CC7 /* Helper.swift in Sources */, + 6FAA62F8C663AAEDAB170956E9A298CC /* ImageGalleryLayout.swift in Sources */, + FF8C6AC907C8F4B527F9A0CBDBCC7F92 /* ImageGalleryView.swift in Sources */, + 1021FCA162D086E55DE8D6926F8DA215 /* ImageGalleryViewCell.swift in Sources */, + 3806469B2739BBFA16083760004ED9B4 /* ImageGalleryViewDataSource.swift in Sources */, + CA8CFC49D2338D41DA4E83F941867CEB /* ImagePicker-dummy.m in Sources */, + 50374D59C8ED3AE3E41C30F25859F981 /* ImagePickerController.swift in Sources */, + 028F3BD1F76536182769D7FA2BB26457 /* ImageStack.swift in Sources */, + F2AF558F96F3C43C3E4C747E45E5637C /* LocationManager.swift in Sources */, + B0E87F4E370B3A0CD14B50D219AE7B0B /* StackView.swift in Sources */, + 267C4C6C182CC853990C78F13C5318CE /* TopView.swift in Sources */, + 1948830F0F143F2897657B9D75895EFA /* VideoInfoView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2E09DC90378960CB7D1FEA7029DFC9E4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 335F86AE3E21D4BDAD21A4F79F2DA8F9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -633,7 +901,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 8FE0832F0DF382FA18A5D3CADD1B6351 /* Sources */ = { + 4E37EBCCC5FE315643A88631953693B0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -658,39 +926,78 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - F9C75295AA740325086A3FCA7458D3EE /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 09936CDBB25F81CCBD0688CA34E025A1 /* Pods-MiniScanner-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 70B394A376C36F5FD5FB14290629A6AF /* PBXTargetDependency */ = { + 1E83CA3E91D0162597541464E78F447A /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = IQKeyboardManagerSwift; target = B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */; - targetProxy = 08906A1E152B2EBD296D726C4A00627E /* PBXContainerItemProxy */; + targetProxy = ED0DD60A1626F731705DCD41EB1F1872 /* PBXContainerItemProxy */; }; - 9E5E0442EF5E505708CA6D618C31E468 /* PBXTargetDependency */ = { + 3C27430540EA0777460F26F49BE64874 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IQKeyboardManagerSwift-IQKeyboardManagerSwift"; + target = 982A68D37F5DCBC1FC1FDC0BB2F0EB8E /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */; + targetProxy = 59D7E9C63088E22D2009A8EF3BC1B8A4 /* PBXContainerItemProxy */; + }; + 7FA52EEB3902D53098EE78A99D0A9E1B /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "LanguageManager-iOS"; target = 75F1EA88CB9544AB5CBE20DEC9A011AE /* LanguageManager-iOS */; - targetProxy = AA24290BD2F66F452D4FA8715BB9C199 /* PBXContainerItemProxy */; + targetProxy = 1C4DB22B1C193AC0BB96CBB3C81F497B /* PBXContainerItemProxy */; }; - DFFDC8AC6E79C759B3548C41CB3F7C76 /* PBXTargetDependency */ = { + 8708046FF22A47E0A841083FDBA4D843 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "IQKeyboardManagerSwift-IQKeyboardManagerSwift"; - target = 982A68D37F5DCBC1FC1FDC0BB2F0EB8E /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */; - targetProxy = F68B8DE02DB8CE82221ED42882AEACDB /* PBXContainerItemProxy */; + name = ImagePicker; + target = 01CB8D6098C21E12CE735619344DE81E /* ImagePicker */; + targetProxy = 6519470E4E31FF9C3F95B185C4ED3513 /* PBXContainerItemProxy */; + }; + BAA18994972D7FF9295C1312321CA22F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "ImagePicker-ImagePicker"; + target = 614D1818852890AC7D3CDF68D512C370 /* ImagePicker-ImagePicker */; + targetProxy = D153E77C37E9CD81F4350FC10000E1A4 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 035F84A1BCB1A82A26F689D69C9D9305 /* Debug */ = { + 21302220AA8668082E71583ECE31B7CA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0558475D71137D635FA6B52E29343634 /* ImagePicker.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/ImagePicker/ImagePicker-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ImagePicker/ImagePicker-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/ImagePicker/ImagePicker.modulemap"; + PRODUCT_MODULE_NAME = ImagePicker; + PRODUCT_NAME = ImagePicker; + 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; + }; + 229409E5785773C9D010EB90A17413FC /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7CC191E7994C3C7161A6641B457C9166 /* Pods-MiniScanner.debug.xcconfig */; buildSettings = { @@ -727,9 +1034,9 @@ }; name = Debug; }; - 06630286ACD25B254ED4B6A940E09315 /* Debug */ = { + 311C6AC07566A5AF6ED8ED308952238A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F97F62F12C7D10E03540793DDD57009B /* IQKeyboardManagerSwift.debug.xcconfig */; + baseConfigurationReference = 6D3A16C269F2DC722F5557572CE3ED73 /* IQKeyboardManagerSwift.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardManagerSwift"; @@ -744,26 +1051,61 @@ }; name = Debug; }; - 216CD1C47D4C136E982A8F1B2092B21C /* Release */ = { + 39440596D0B39AE8ECC2717121684FEC /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22FF8311D744FA0C5E23B24C7AE67B1D /* IQKeyboardManagerSwift.release.xcconfig */; + baseConfigurationReference = F24753DAC0B3ECA5A243AB9E54E4E70E /* LanguageManager-iOS.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/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; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/LanguageManager-iOS/LanguageManager-iOS.modulemap"; + PRODUCT_MODULE_NAME = LanguageManager_iOS; + PRODUCT_NAME = LanguageManager_iOS; + 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; + }; + 5082CAD406BFFF88DC59454C67F817D8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 55D95ACE18BA0D8C6DD05DCDCA6CFF6D /* ImagePicker.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; + 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; + name = Debug; }; - 39440596D0B39AE8ECC2717121684FEC /* Release */ = { + 57F5390C26CAC63BC7DC9F3A897AD41C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 447CF01CBF4066825019B2CBB67AEBDF /* LanguageManager-iOS.release.xcconfig */; + baseConfigurationReference = 55D95ACE18BA0D8C6DD05DCDCA6CFF6D /* ImagePicker.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -773,8 +1115,8 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/LanguageManager-iOS/LanguageManager-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/LanguageManager-iOS/LanguageManager-iOS-Info.plist"; + 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; LD_RUNPATH_SEARCH_PATHS = ( @@ -782,21 +1124,54 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/LanguageManager-iOS/LanguageManager-iOS.modulemap"; - PRODUCT_MODULE_NAME = LanguageManager_iOS; - PRODUCT_NAME = LanguageManager_iOS; + MODULEMAP_FILE = "Target Support Files/ImagePicker/ImagePicker.modulemap"; + PRODUCT_MODULE_NAME = ImagePicker; + PRODUCT_NAME = ImagePicker; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; + name = Debug; + }; + 608F7885BB0A141F1CF9A4AC6A922085 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 14C6E980E604962C8B903F524FC4EF63 /* IQKeyboardManagerSwift.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"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + PRODUCT_NAME = IQKeyboardManagerSwift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; name = Release; }; - 7E523A73C8A76E5E9774BEAAEEA1D69D /* Release */ = { + 7C6CD226972A15C00D47B7ABFD06CBA1 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0558475D71137D635FA6B52E29343634 /* 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; + }; + 84D56D0797D079E13C9A2A89B3CE133F /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 798C61760B9BC4B07BC60D42FCC09855 /* Pods-MiniScanner.release.xcconfig */; buildSettings = { @@ -964,7 +1339,7 @@ }; A73A28CEE205ACFB6072250615C7D39D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ED153F395FC11B265453987CD5F97492 /* LanguageManager-iOS.debug.xcconfig */; + baseConfigurationReference = D46990DB1B81BBE4F64A411E2C83DCD4 /* LanguageManager-iOS.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -998,7 +1373,7 @@ }; B3CF11682A60F02B60820C17EE93D35E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F97F62F12C7D10E03540793DDD57009B /* IQKeyboardManagerSwift.debug.xcconfig */; + baseConfigurationReference = 6D3A16C269F2DC722F5557572CE3ED73 /* IQKeyboardManagerSwift.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1033,7 +1408,7 @@ }; C15C4E31ADF19556825A2743AEF62A77 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22FF8311D744FA0C5E23B24C7AE67B1D /* IQKeyboardManagerSwift.release.xcconfig */; + baseConfigurationReference = 14C6E980E604962C8B903F524FC4EF63 /* IQKeyboardManagerSwift.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1070,15 +1445,6 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 04D5557B7DEECE0FC64F5301035A4CC3 /* Build configuration list for PBXNativeTarget "Pods-MiniScanner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 035F84A1BCB1A82A26F689D69C9D9305 /* Debug */, - 7E523A73C8A76E5E9774BEAAEEA1D69D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 397157E58CC1977C23EB745CC0C04035 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -1106,11 +1472,38 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - F355D0811AB05A75A0C8E6107F95470A /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */ = { + 915D1DE42ADD74AC7AEC4E6D2FB28E6E /* Build configuration list for PBXNativeTarget "Pods-MiniScanner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 229409E5785773C9D010EB90A17413FC /* Debug */, + 84D56D0797D079E13C9A2A89B3CE133F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9828E23DF340160161F736A29B59044A /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 311C6AC07566A5AF6ED8ED308952238A /* Debug */, + 608F7885BB0A141F1CF9A4AC6A922085 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CE3A25ED647A443AB573ACE0764C0105 /* Build configuration list for PBXNativeTarget "ImagePicker" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 57F5390C26CAC63BC7DC9F3A897AD41C /* Debug */, + 21302220AA8668082E71583ECE31B7CA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D111ABA7DE141A3E1DA6E0A3BBCAE6CD /* Build configuration list for PBXNativeTarget "ImagePicker-ImagePicker" */ = { isa = XCConfigurationList; buildConfigurations = ( - 06630286ACD25B254ED4B6A940E09315 /* Debug */, - 216CD1C47D4C136E982A8F1B2092B21C /* Release */, + 5082CAD406BFFF88DC59454C67F817D8 /* Debug */, + 7C6CD226972A15C00D47B7ABFD06CBA1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/ImagePicker-ImagePicker.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/ImagePicker-ImagePicker.xcscheme new file mode 100644 index 0000000000000000000000000000000000000000..55930cb7b8bf60d32396da87d978089b183c5aa7 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/ImagePicker-ImagePicker.xcscheme @@ -0,0 +1,58 @@ +<?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 = "614D1818852890AC7D3CDF68D512C370" + BuildableName = "ImagePicker.bundle" + BlueprintName = "ImagePicker-ImagePicker" + 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/ImagePicker.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/ImagePicker.xcscheme new file mode 100644 index 0000000000000000000000000000000000000000..b6a143e01e1f8994b8f327be629bc3111c352fda --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/ImagePicker.xcscheme @@ -0,0 +1,58 @@ +<?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 = "01CB8D6098C21E12CE735619344DE81E" + BuildableName = "ImagePicker.framework" + BlueprintName = "ImagePicker" + 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 d37251436a5f23ce869d2e247067d2e20b51d59d..d6d0b45d0bb9b88d367d96c04acd9d33375a2c2e 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist @@ -9,9 +9,23 @@ <key>isShown</key> <false/> <key>orderHint</key> - <integer>1</integer> + <integer>3</integer> </dict> <key>IQKeyboardManagerSwift.xcscheme</key> + <dict> + <key>isShown</key> + <false/> + <key>orderHint</key> + <integer>2</integer> + </dict> + <key>ImagePicker-ImagePicker.xcscheme</key> + <dict> + <key>isShown</key> + <false/> + <key>orderHint</key> + <integer>1</integer> + </dict> + <key>ImagePicker.xcscheme</key> <dict> <key>isShown</key> <false/> @@ -23,14 +37,14 @@ <key>isShown</key> <false/> <key>orderHint</key> - <integer>2</integer> + <integer>4</integer> </dict> <key>Pods-MiniScanner.xcscheme</key> <dict> <key>isShown</key> <false/> <key>orderHint</key> - <integer>3</integer> + <integer>5</integer> </dict> </dict> <key>SuppressBuildableAutocreation</key> diff --git a/Pods/Target Support Files/ImagePicker/ImagePicker-Info.plist b/Pods/Target Support Files/ImagePicker/ImagePicker-Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..e765449425af2de92f4cac542d3d34aba4c86014 --- /dev/null +++ b/Pods/Target Support Files/ImagePicker/ImagePicker-Info.plist @@ -0,0 +1,26 @@ +<?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>3.2.0</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/ImagePicker/ImagePicker-dummy.m b/Pods/Target Support Files/ImagePicker/ImagePicker-dummy.m new file mode 100644 index 0000000000000000000000000000000000000000..270e374d362922fec46f46f67228c7fefd9854fa --- /dev/null +++ b/Pods/Target Support Files/ImagePicker/ImagePicker-dummy.m @@ -0,0 +1,5 @@ +#import <Foundation/Foundation.h> +@interface PodsDummy_ImagePicker : NSObject +@end +@implementation PodsDummy_ImagePicker +@end diff --git a/Pods/Target Support Files/ImagePicker/ImagePicker-prefix.pch b/Pods/Target Support Files/ImagePicker/ImagePicker-prefix.pch new file mode 100644 index 0000000000000000000000000000000000000000..beb2a2441835aeaf9ee2ba30c557a8f2b6e4363f --- /dev/null +++ b/Pods/Target Support Files/ImagePicker/ImagePicker-prefix.pch @@ -0,0 +1,12 @@ +#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/ImagePicker/ImagePicker-umbrella.h b/Pods/Target Support Files/ImagePicker/ImagePicker-umbrella.h new file mode 100644 index 0000000000000000000000000000000000000000..194fd95ddd6fff757bc8822c2a6b268dab019861 --- /dev/null +++ b/Pods/Target Support Files/ImagePicker/ImagePicker-umbrella.h @@ -0,0 +1,16 @@ +#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 + + +FOUNDATION_EXPORT double ImagePickerVersionNumber; +FOUNDATION_EXPORT const unsigned char ImagePickerVersionString[]; + diff --git a/Pods/Target Support Files/ImagePicker/ImagePicker.debug.xcconfig b/Pods/Target Support Files/ImagePicker/ImagePicker.debug.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..39c74040603246de8905125b3a7e1ac8dfdd2208 --- /dev/null +++ b/Pods/Target Support Files/ImagePicker/ImagePicker.debug.xcconfig @@ -0,0 +1,15 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ImagePicker +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" +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}/ImagePicker +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/ImagePicker/ImagePicker.modulemap b/Pods/Target Support Files/ImagePicker/ImagePicker.modulemap new file mode 100644 index 0000000000000000000000000000000000000000..37375682208a945f863e5f6ff1f89696e7bbe297 --- /dev/null +++ b/Pods/Target Support Files/ImagePicker/ImagePicker.modulemap @@ -0,0 +1,6 @@ +framework module ImagePicker { + umbrella header "ImagePicker-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/ImagePicker/ImagePicker.release.xcconfig b/Pods/Target Support Files/ImagePicker/ImagePicker.release.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..39c74040603246de8905125b3a7e1ac8dfdd2208 --- /dev/null +++ b/Pods/Target Support Files/ImagePicker/ImagePicker.release.xcconfig @@ -0,0 +1,15 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ImagePicker +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" +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}/ImagePicker +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/ImagePicker/ResourceBundle-ImagePicker-ImagePicker-Info.plist b/Pods/Target Support Files/ImagePicker/ResourceBundle-ImagePicker-ImagePicker-Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..1bde99a68627c6e8e79e776c07bbe0c6988b9df0 --- /dev/null +++ b/Pods/Target Support Files/ImagePicker/ResourceBundle-ImagePicker-ImagePicker-Info.plist @@ -0,0 +1,24 @@ +<?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>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>BNDL</string> + <key>CFBundleShortVersionString</key> + <string>3.2.0</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>1</string> + <key>NSPrincipalClass</key> + <string></string> +</dict> +</plist> 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 32c972dfb6779fb0a0e89e19651c2e4d21328eaf..8d785c7a30f20a1035414e2d9209fd8183a80d7b 100644 --- a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-acknowledgements.markdown @@ -26,6 +26,32 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +## ImagePicker + +Licensed under the **MIT** license + +> Copyright (c) 2015 Hyper Interaktiv AS +> +> 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. + + ## LanguageManager-iOS The MIT License (MIT) 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 e207ac594318fe5566cf13a503b9b2a10b5dec33..ac0a9dfe5293f93e1c3e00e10922348b2a5f3032 100644 --- a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-acknowledgements.plist @@ -43,6 +43,38 @@ SOFTWARE. <key>Type</key> <string>PSGroupSpecifier</string> </dict> + <dict> + <key>FooterText</key> + <string>Licensed under the **MIT** license + +> Copyright (c) 2015 Hyper Interaktiv AS +> +> 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>ImagePicker</string> + <key>Type</key> + <string>PSGroupSpecifier</string> + </dict> <dict> <key>FooterText</key> <string>The MIT License (MIT) 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 5cbf342d16145381e4c7d02a6cda0ced3d742389..3e5e4ec10e7ea214b4b48b997b9d6b7081b9eec1 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,3 +1,4 @@ ${PODS_ROOT}/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks.sh ${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework +${BUILT_PRODUCTS_DIR}/ImagePicker/ImagePicker.framework ${BUILT_PRODUCTS_DIR}/LanguageManager-iOS/LanguageManager_iOS.framework \ No newline at end of file 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 75657862f5775d03c79846a2a69cca615d853761..f138f80900904fd440b1277fdc2177d0b3e06215 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,2 +1,3 @@ ${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 \ No newline at end of file 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 5cbf342d16145381e4c7d02a6cda0ced3d742389..3e5e4ec10e7ea214b4b48b997b9d6b7081b9eec1 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,3 +1,4 @@ ${PODS_ROOT}/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks.sh ${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework +${BUILT_PRODUCTS_DIR}/ImagePicker/ImagePicker.framework ${BUILT_PRODUCTS_DIR}/LanguageManager-iOS/LanguageManager_iOS.framework \ No newline at end of file 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 75657862f5775d03c79846a2a69cca615d853761..f138f80900904fd440b1277fdc2177d0b3e06215 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,2 +1,3 @@ ${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 \ No newline at end of file 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 1992d7cb033ce920712d6fc39f15bb4aba3cb861..f2220393baa34c1007dcba34258cc9ceb66f5ea8 100755 --- a/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks.sh +++ b/Pods/Target Support Files/Pods-MiniScanner/Pods-MiniScanner-frameworks.sh @@ -177,10 +177,12 @@ code_sign_if_enabled() { if [[ "$CONFIGURATION" == "Debug" ]]; then 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" fi if [[ "$CONFIGURATION" == "Release" ]]; then 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" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 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 08a867f7698da2b2e2080467a900ae9f09fa5bfd..794ac17270beae98b7e9786e9b01161eea80dfb1 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}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/LanguageManager-iOS" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/ImagePicker" "${PODS_CONFIGURATION_BUILD_DIR}/LanguageManager-iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LanguageManager-iOS/LanguageManager_iOS.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${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" 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 "CoreGraphics" -framework "Foundation" -framework "IQKeyboardManagerSwift" -framework "LanguageManager_iOS" -framework "QuartzCore" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "AVFoundation" -framework "CoreGraphics" -framework "Foundation" -framework "IQKeyboardManagerSwift" -framework "ImagePicker" -framework "LanguageManager_iOS" -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 08a867f7698da2b2e2080467a900ae9f09fa5bfd..794ac17270beae98b7e9786e9b01161eea80dfb1 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}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/LanguageManager-iOS" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/ImagePicker" "${PODS_CONFIGURATION_BUILD_DIR}/LanguageManager-iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LanguageManager-iOS/LanguageManager_iOS.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${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" 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 "CoreGraphics" -framework "Foundation" -framework "IQKeyboardManagerSwift" -framework "LanguageManager_iOS" -framework "QuartzCore" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "AVFoundation" -framework "CoreGraphics" -framework "Foundation" -framework "IQKeyboardManagerSwift" -framework "ImagePicker" -framework "LanguageManager_iOS" -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)