diff --git a/.DS_Store b/.DS_Store index ef58ae2..042cf40 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/NoteAppCoreData/.DS_Store b/NoteAppCoreData/.DS_Store new file mode 100644 index 0000000..63f087d Binary files /dev/null and b/NoteAppCoreData/.DS_Store differ diff --git a/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.pbxproj b/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.pbxproj index b691945..d3e6414 100644 --- a/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.pbxproj +++ b/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -17,6 +17,10 @@ 2E37155F25C101E20037351E /* NoteCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E37155E25C101E20037351E /* NoteCell.swift */; }; 2E37156225C102060037351E /* NoteTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E37156125C102060037351E /* NoteTableView.swift */; }; 2E91899925C2BCDC00A3C567 /* Note.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E91899825C2BCDC00A3C567 /* Note.swift */; }; + 3EF77F8426C35094008884B9 /* SingleViewVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EF77F8326C35094008884B9 /* SingleViewVC.swift */; }; + 4B23E35F519145D051F5C22C /* Pods_NoteAppCoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22F6A6FE398A3832A37C0353 /* Pods_NoteAppCoreData.framework */; }; + 607369BE26C1754100E14ADF /* Lottie in Frameworks */ = {isa = PBXBuildFile; productRef = 607369BD26C1754100E14ADF /* Lottie */; }; + 607369C226C178BC00E14ADF /* wave-loader.json in Resources */ = {isa = PBXBuildFile; fileRef = 607369C126C178BC00E14ADF /* wave-loader.json */; }; 607F9F3826BF288400EFB172 /* NotificationsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607F9F3726BF288400EFB172 /* NotificationsViewController.swift */; }; 607F9F3A26BF31CD00EFB172 /* WaveExplanationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607F9F3926BF31CD00EFB172 /* WaveExplanationViewController.swift */; }; 607F9F3C26BF328B00EFB172 /* ReturningMainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607F9F3B26BF328B00EFB172 /* ReturningMainViewController.swift */; }; @@ -30,6 +34,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 22F6A6FE398A3832A37C0353 /* Pods_NoteAppCoreData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NoteAppCoreData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 2E37154325C0FB980037351E /* NoteAppCoreData.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NoteAppCoreData.app; sourceTree = BUILT_PRODUCTS_DIR; }; 2E37154625C0FB980037351E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 2E37154825C0FB980037351E /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -42,6 +47,8 @@ 2E37155E25C101E20037351E /* NoteCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteCell.swift; sourceTree = ""; }; 2E37156125C102060037351E /* NoteTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteTableView.swift; sourceTree = ""; }; 2E91899825C2BCDC00A3C567 /* Note.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Note.swift; sourceTree = ""; }; + 3EF77F8326C35094008884B9 /* SingleViewVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingleViewVC.swift; sourceTree = ""; }; + 607369C126C178BC00E14ADF /* wave-loader.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "wave-loader.json"; sourceTree = ""; }; 607F9F3726BF288400EFB172 /* NotificationsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = NotificationsViewController.swift; path = NoteAppCoreData/NotificationsViewController.swift; sourceTree = SOURCE_ROOT; }; 607F9F3926BF31CD00EFB172 /* WaveExplanationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaveExplanationViewController.swift; sourceTree = ""; }; 607F9F3B26BF328B00EFB172 /* ReturningMainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReturningMainViewController.swift; sourceTree = ""; }; @@ -52,6 +59,8 @@ 607F9F6326BF57FF00EFB172 /* Wave2SwiftUIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Wave2SwiftUIView.swift; sourceTree = ""; }; 607F9F6526BF5CEF00EFB172 /* WaveThreeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaveThreeViewController.swift; sourceTree = ""; }; 607F9F6826BF5D1900EFB172 /* Wave3SwiftUIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Wave3SwiftUIView.swift; sourceTree = ""; }; + 7F66A98DE5B405E9C8FB5BCF /* Pods-NoteAppCoreData.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NoteAppCoreData.debug.xcconfig"; path = "Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData.debug.xcconfig"; sourceTree = ""; }; + C4F853FCD3C32199AEEB0548 /* Pods-NoteAppCoreData.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NoteAppCoreData.release.xcconfig"; path = "Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -59,6 +68,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 607369BE26C1754100E14ADF /* Lottie in Frameworks */, + 4B23E35F519145D051F5C22C /* Pods_NoteAppCoreData.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -70,6 +81,8 @@ children = ( 2E37154525C0FB980037351E /* NoteAppCoreData */, 2E37154425C0FB980037351E /* Products */, + 6AF259FB9629211CACAADDCD /* Pods */, + 7D9B3673641228F28485C40C /* Frameworks */, ); sourceTree = ""; }; @@ -84,6 +97,7 @@ 2E37154525C0FB980037351E /* NoteAppCoreData */ = { isa = PBXGroup; children = ( + 607369C126C178BC00E14ADF /* wave-loader.json */, 2E37154625C0FB980037351E /* AppDelegate.swift */, 2E37154825C0FB980037351E /* SceneDelegate.swift */, 607F9F3526BF091900EFB172 /* Data Model */, @@ -101,6 +115,7 @@ 607F9F3B26BF328B00EFB172 /* ReturningMainViewController.swift */, 607F9F3726BF288400EFB172 /* NotificationsViewController.swift */, 2E37154A25C0FB980037351E /* NoteDetailVC.swift */, + 3EF77F8326C35094008884B9 /* SingleViewVC.swift */, 607F9F3426BF086B00EFB172 /* TableView */, 607F9F4126BF49B000EFB172 /* Wave Animation */, ); @@ -173,6 +188,23 @@ path = WaveThree; sourceTree = ""; }; + 6AF259FB9629211CACAADDCD /* Pods */ = { + isa = PBXGroup; + children = ( + 7F66A98DE5B405E9C8FB5BCF /* Pods-NoteAppCoreData.debug.xcconfig */, + C4F853FCD3C32199AEEB0548 /* Pods-NoteAppCoreData.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + 7D9B3673641228F28485C40C /* Frameworks */ = { + isa = PBXGroup; + children = ( + 22F6A6FE398A3832A37C0353 /* Pods_NoteAppCoreData.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -180,15 +212,20 @@ isa = PBXNativeTarget; buildConfigurationList = 2E37155A25C0FB9B0037351E /* Build configuration list for PBXNativeTarget "NoteAppCoreData" */; buildPhases = ( + B70255926BD643CB7F7B832D /* [CP] Check Pods Manifest.lock */, 2E37153F25C0FB980037351E /* Sources */, 2E37154025C0FB980037351E /* Frameworks */, 2E37154125C0FB980037351E /* Resources */, + CFA8F04D4152BAE24CF2879A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = NoteAppCoreData; + packageProductDependencies = ( + 607369BD26C1754100E14ADF /* Lottie */, + ); productName = NoteAppCoreData; productReference = 2E37154325C0FB980037351E /* NoteAppCoreData.app */; productType = "com.apple.product-type.application"; @@ -216,6 +253,9 @@ Base, ); mainGroup = 2E37153A25C0FB980037351E; + packageReferences = ( + 607369BC26C1754100E14ADF /* XCRemoteSwiftPackageReference "lottie-ios" */, + ); productRefGroup = 2E37154425C0FB980037351E /* Products */; projectDirPath = ""; projectRoot = ""; @@ -232,12 +272,55 @@ files = ( 2E37155625C0FB9B0037351E /* LaunchScreen.storyboard in Resources */, 2E37155325C0FB9B0037351E /* Assets.xcassets in Resources */, + 607369C226C178BC00E14ADF /* wave-loader.json in Resources */, 2E37154E25C0FB980037351E /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + B70255926BD643CB7F7B832D /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-NoteAppCoreData-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + CFA8F04D4152BAE24CF2879A /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 2E37153F25C0FB980037351E /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -246,6 +329,7 @@ 607F9F3E26BF36D600EFB172 /* WaveOptionsViewController.swift in Sources */, 2E37154B25C0FB980037351E /* NoteDetailVC.swift in Sources */, 607F9F6626BF5CEF00EFB172 /* WaveThreeViewController.swift in Sources */, + 3EF77F8426C35094008884B9 /* SingleViewVC.swift in Sources */, 607F9F4026BF491900EFB172 /* WaveOneViewController.swift in Sources */, 607F9F3A26BF31CD00EFB172 /* WaveExplanationViewController.swift in Sources */, 607F9F3C26BF328B00EFB172 /* ReturningMainViewController.swift in Sources */, @@ -403,6 +487,7 @@ }; 2E37155B25C0FB9B0037351E /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 7F66A98DE5B405E9C8FB5BCF /* Pods-NoteAppCoreData.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -422,6 +507,7 @@ }; 2E37155C25C0FB9B0037351E /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C4F853FCD3C32199AEEB0548 /* Pods-NoteAppCoreData.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -462,6 +548,25 @@ }; /* End XCConfigurationList section */ +/* Begin XCRemoteSwiftPackageReference section */ + 607369BC26C1754100E14ADF /* XCRemoteSwiftPackageReference "lottie-ios" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/airbnb/lottie-ios"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 3.2.3; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 607369BD26C1754100E14ADF /* Lottie */ = { + isa = XCSwiftPackageProductDependency; + package = 607369BC26C1754100E14ADF /* XCRemoteSwiftPackageReference "lottie-ios" */; + productName = Lottie; + }; +/* End XCSwiftPackageProductDependency section */ + /* Begin XCVersionGroup section */ 2E37154F25C0FB980037351E /* NoteAppCoreData.xcdatamodeld */ = { isa = XCVersionGroup; diff --git a/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..fc249d7 --- /dev/null +++ b/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "Lottie", + "repositoryURL": "https://github.com/airbnb/lottie-ios", + "state": { + "branch": null, + "revision": "79a0b70547f7c40ea54c67487f935fa2f2eaaadc", + "version": "3.2.3" + } + } + ] + }, + "version": 1 +} diff --git a/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.xcworkspace/xcuserdata/ada.xcuserdatad/UserInterfaceState.xcuserstate b/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.xcworkspace/xcuserdata/ada.xcuserdatad/UserInterfaceState.xcuserstate index 866fc63..ab2ea29 100644 Binary files a/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.xcworkspace/xcuserdata/ada.xcuserdatad/UserInterfaceState.xcuserstate and b/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.xcworkspace/xcuserdata/ada.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.xcworkspace/xcuserdata/lin.xcuserdatad/UserInterfaceState.xcuserstate b/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.xcworkspace/xcuserdata/lin.xcuserdatad/UserInterfaceState.xcuserstate index 30a17ab..e6fdb8b 100644 Binary files a/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.xcworkspace/xcuserdata/lin.xcuserdatad/UserInterfaceState.xcuserstate and b/NoteAppCoreData/NoteAppCoreData.xcodeproj/project.xcworkspace/xcuserdata/lin.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/NoteAppCoreData/NoteAppCoreData.xcodeproj/xcuserdata/ada.xcuserdatad/xcschemes/xcschememanagement.plist b/NoteAppCoreData/NoteAppCoreData.xcodeproj/xcuserdata/ada.xcuserdatad/xcschemes/xcschememanagement.plist index 99ed86d..b3f99ca 100644 --- a/NoteAppCoreData/NoteAppCoreData.xcodeproj/xcuserdata/ada.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/NoteAppCoreData/NoteAppCoreData.xcodeproj/xcuserdata/ada.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ NoteAppCoreData.xcscheme_^#shared#^_ orderHint - 0 + 2 diff --git a/NoteAppCoreData/NoteAppCoreData.xcodeproj/xcuserdata/lin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/NoteAppCoreData/NoteAppCoreData.xcodeproj/xcuserdata/lin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..e57bf83 --- /dev/null +++ b/NoteAppCoreData/NoteAppCoreData.xcodeproj/xcuserdata/lin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,6 @@ + + + diff --git a/NoteAppCoreData/NoteAppCoreData.xcodeproj/xcuserdata/lin.xcuserdatad/xcschemes/xcschememanagement.plist b/NoteAppCoreData/NoteAppCoreData.xcodeproj/xcuserdata/lin.xcuserdatad/xcschemes/xcschememanagement.plist index 99ed86d..b3f99ca 100644 --- a/NoteAppCoreData/NoteAppCoreData.xcodeproj/xcuserdata/lin.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/NoteAppCoreData/NoteAppCoreData.xcodeproj/xcuserdata/lin.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ NoteAppCoreData.xcscheme_^#shared#^_ orderHint - 0 + 2 diff --git a/NoteAppCoreData/NoteAppCoreData.xcworkspace/contents.xcworkspacedata b/NoteAppCoreData/NoteAppCoreData.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..53cdf21 --- /dev/null +++ b/NoteAppCoreData/NoteAppCoreData.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/NoteAppCoreData/NoteAppCoreData.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/NoteAppCoreData/NoteAppCoreData.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/NoteAppCoreData/NoteAppCoreData.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/NoteAppCoreData/NoteAppCoreData.xcworkspace/xcshareddata/swiftpm/Package.resolved b/NoteAppCoreData/NoteAppCoreData.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..fc249d7 --- /dev/null +++ b/NoteAppCoreData/NoteAppCoreData.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "Lottie", + "repositoryURL": "https://github.com/airbnb/lottie-ios", + "state": { + "branch": null, + "revision": "79a0b70547f7c40ea54c67487f935fa2f2eaaadc", + "version": "3.2.3" + } + } + ] + }, + "version": 1 +} diff --git a/NoteAppCoreData/NoteAppCoreData.xcworkspace/xcuserdata/ada.xcuserdatad/UserInterfaceState.xcuserstate b/NoteAppCoreData/NoteAppCoreData.xcworkspace/xcuserdata/ada.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..2399dcb Binary files /dev/null and b/NoteAppCoreData/NoteAppCoreData.xcworkspace/xcuserdata/ada.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/NoteAppCoreData/NoteAppCoreData.xcworkspace/xcuserdata/lin.xcuserdatad/UserInterfaceState.xcuserstate b/NoteAppCoreData/NoteAppCoreData.xcworkspace/xcuserdata/lin.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..915bfdc Binary files /dev/null and b/NoteAppCoreData/NoteAppCoreData.xcworkspace/xcuserdata/lin.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/NoteAppCoreData/NoteAppCoreData/.DS_Store b/NoteAppCoreData/NoteAppCoreData/.DS_Store new file mode 100644 index 0000000..1e71f74 Binary files /dev/null and b/NoteAppCoreData/NoteAppCoreData/.DS_Store differ diff --git a/NoteAppCoreData/NoteAppCoreData/Controllers/.DS_Store b/NoteAppCoreData/NoteAppCoreData/Controllers/.DS_Store new file mode 100644 index 0000000..427afc7 Binary files /dev/null and b/NoteAppCoreData/NoteAppCoreData/Controllers/.DS_Store differ diff --git a/NoteAppCoreData/NoteAppCoreData/Controllers/NoteDetailVC.swift b/NoteAppCoreData/NoteAppCoreData/Controllers/NoteDetailVC.swift index 2e59b91..6f1ba83 100644 --- a/NoteAppCoreData/NoteAppCoreData/Controllers/NoteDetailVC.swift +++ b/NoteAppCoreData/NoteAppCoreData/Controllers/NoteDetailVC.swift @@ -1,17 +1,31 @@ import UIKit import CoreData //entering note info -class NoteDetailVC: UIViewController -{//Title text Field +class NoteDetailVC: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { + + // Make global variable + var waves:String = "" + +//Title text Field @IBOutlet weak var titleTF: UITextField! //Description Text Field @IBOutlet weak var descTV: UITextView! var selectedNote: Note? = nil //class? - - override func viewDidLoad() - { + + + @IBOutlet weak var picker: UIPickerView! + + var pickerData = [["0 ft", "15 ft", "30 ft", "50 ft"]] + + override func viewDidLoad(){ super.viewDidLoad() + + // Connect data: + self.picker.delegate = self + self.picker.dataSource = self + + if(selectedNote != nil) {//displays title and description titleTF.text = selectedNote?.title @@ -20,88 +34,114 @@ class NoteDetailVC: UIViewController } - @IBAction func saveAction(_ sender: Any) - { - let appDelegate = UIApplication.shared.delegate as! AppDelegate - let context: NSManagedObjectContext = appDelegate.persistentContainer.viewContext - - - //if selected note is empty; create a new note; newNote doesnt need segue? - if(selectedNote == nil) - {//calling Note class in data model - let entity = NSEntityDescription.entity(forEntityName: "Note", in: context) - - //creating new note ? - let newNote = Note(entity: entity!, insertInto: context) - newNote.id = noteList.count as NSNumber - newNote.title = titleTF.text - newNote.desc = descTV.text - if (newNote.title != nil && newNote.desc != nil) { + // Number of columns of data + func numberOfComponents(in pickerView: UIPickerView) -> Int { + return pickerData.count + } + func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { + return pickerData[component].count + } + // The data to return for the row and component (column) that's being passed in + func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { + return pickerData[component][row] + } + // Capture the picker view selection + func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { + // Make var global using self + self.waves = pickerData[component][row] + print(waves) + // This method is triggered whenever the user makes a change to the picker selection + // The parameter named row and component represents what was selected... + } + + + @IBAction func saveAction(_ sender: Any) + { + let appDelegate = UIApplication.shared.delegate as! AppDelegate + let context: NSManagedObjectContext = appDelegate.persistentContainer.viewContext + + + //if selected note is empty; create a new note; newNote doesnt need segue? + if(selectedNote == nil) + {//calling Note class in data model + let entity = NSEntityDescription.entity(forEntityName: "Note", in: context) + + //creating new note ? + let newNote = Note(entity: entity!, insertInto: context) + newNote.id = noteList.count as NSNumber + newNote.title = titleTF.text + newNote.desc = descTV.text + // self.waves also works here ??? + newNote.wavelength = waves + // + newNote.deletedDate = Date() + if (newNote.title != nil && newNote.desc != nil) { + + do + {//saving to noteList array + try context.save() + noteList.append(newNote) + navigationController?.popViewController(animated: true) + } + catch + { + print("context save error") + } + + } + } - do - {//saving to noteList array - try context.save() - noteList.append(newNote) - navigationController?.popViewController(animated: true) - } - catch - { - print("context save error") + //if selected note is not empty + else //edit + { //fetch note + let request = NSFetchRequest(entityName: "Note") + do { + let results:NSArray = try context.fetch(request) as NSArray + for result in results + { + let note = result as! Note + if(note == selectedNote) + {//display note info? + note.title = titleTF.text + note.desc = descTV.text + try context.save() + navigationController?.popViewController(animated: true) + } + } + } + catch + { + print("Fetch Failed") + } } - + } + + //Deleting Note + @IBAction func DeleteNote(_ sender: Any) + {//core data persistent container + let appDelegate = UIApplication.shared.delegate as! AppDelegate + let context: NSManagedObjectContext = appDelegate.persistentContainer.viewContext + //fetching info from Note entity + let request = NSFetchRequest(entityName: "Note") + do { + let results:NSArray = try context.fetch(request) as NSArray + for result in results + {//if note is slected, delete + let note = result as! Note + if(note == selectedNote) + { + note.deletedDate = Date() + try context.save() + navigationController?.popViewController(animated: true) //pop up display + } + } } - } - - //if selected note is not empty - else //edit - { //fetch note - let request = NSFetchRequest(entityName: "Note") - do { - let results:NSArray = try context.fetch(request) as NSArray - for result in results - { - let note = result as! Note - if(note == selectedNote) - {//display note info? - note.title = titleTF.text - note.desc = descTV.text - try context.save() - navigationController?.popViewController(animated: true) - } - } - } - catch - { - print("Fetch Failed") - } - } - } - //Deleting Note - @IBAction func DeleteNote(_ sender: Any) - {//core data persistent container - let appDelegate = UIApplication.shared.delegate as! AppDelegate - let context: NSManagedObjectContext = appDelegate.persistentContainer.viewContext - //fetching info from Note entity - let request = NSFetchRequest(entityName: "Note") - do { - let results:NSArray = try context.fetch(request) as NSArray - for result in results - {//if note is slected, delete - let note = result as! Note - if(note == selectedNote) - { - note.deletedDate = Date() - try context.save() - navigationController?.popViewController(animated: true) //pop up display - } - } - } - catch - { - print("Fetch Failed") - } - } - -} + catch + { + print("Fetch Failed") + } + } + + } diff --git a/NoteAppCoreData/NoteAppCoreData/Controllers/ReturningMainViewController.swift b/NoteAppCoreData/NoteAppCoreData/Controllers/ReturningMainViewController.swift index 9816b4e..bc11a9e 100644 --- a/NoteAppCoreData/NoteAppCoreData/Controllers/ReturningMainViewController.swift +++ b/NoteAppCoreData/NoteAppCoreData/Controllers/ReturningMainViewController.swift @@ -6,6 +6,8 @@ // import UIKit +import Lottie + class ReturningMainViewController: UIViewController { @@ -15,12 +17,23 @@ class ReturningMainViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() + lottieAnimation() // Do any additional setup after loading the view. } - + func lottieAnimation(){ + let animationView = AnimationView(name: "wave-loader") + animationView.contentMode = .scaleAspectFit + view.addSubview(animationView) + animationView.play() + animationView.loopMode = .loop + //bigger y, lower the image + animationView.frame = CGRect(x: 87, y: 720, width: 240, height: 128) +// animationView.center = view.center + + } /* // MARK: - Navigation diff --git a/NoteAppCoreData/NoteAppCoreData/Controllers/SingleViewVC.swift b/NoteAppCoreData/NoteAppCoreData/Controllers/SingleViewVC.swift new file mode 100644 index 0000000..55181c2 --- /dev/null +++ b/NoteAppCoreData/NoteAppCoreData/Controllers/SingleViewVC.swift @@ -0,0 +1,31 @@ +// +// SingleViewVC.swift +// NoteAppCoreData +// +// Created by Lin Zhang on 8/10/21. +// + +import UIKit +import CoreData + +//var noteList = [Note]() + + + + +class SingleViewVC: UIViewController { + + @IBOutlet weak var Description1: UILabel! + @IBOutlet weak var Title1: UILabel! + @IBOutlet weak var Date1: UILabel! + @IBOutlet weak var Wavelength: UILabel! + + override func viewDidLoad() { + super.viewDidLoad() + + + + + } + +} diff --git a/NoteAppCoreData/NoteAppCoreData/Controllers/TableView/NoteTableView.swift b/NoteAppCoreData/NoteAppCoreData/Controllers/TableView/NoteTableView.swift index 92eea2b..b4df694 100644 --- a/NoteAppCoreData/NoteAppCoreData/Controllers/TableView/NoteTableView.swift +++ b/NoteAppCoreData/NoteAppCoreData/Controllers/TableView/NoteTableView.swift @@ -1,5 +1,6 @@ import UIKit import CoreData + //seeing list of notes var noteList = [Note]() @@ -12,7 +13,7 @@ class NoteTableView: UITableViewController var noDeleteNoteList = [Note]() for note in noteList { - if(note.deletedDate == nil) + if(note.deletedDate != nil) { noDeleteNoteList.append(note) } @@ -32,9 +33,11 @@ class NoteTableView: UITableViewController let results:NSArray = try context.fetch(request) as NSArray for result in results {//append fetched note to results +// print(result) let note = result as! Note noteList.append(note) } +// print(noteList) } catch { @@ -44,6 +47,7 @@ class NoteTableView: UITableViewController } + //declare cells in TableViews override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { //calling noteCellID identifier, NoteCell class has labels with title and desc let noteCell = tableView.dequeueReusableCell(withIdentifier: "noteCellID", for: indexPath) as! NoteCell @@ -53,11 +57,20 @@ class NoteTableView: UITableViewController noteCell.titleLabel.text = thisNote.title noteCell.descLabel.text = thisNote.desc + + + let formatter = DateFormatter() + formatter.dateStyle = .medium +// formatter.timeStyle = .short +// self.subtitleLabel.text = "Edited on \(formatter.string(from: note.lastEdited))" + + //crash if deleted date doesn't exist + noteCell.dateLabel.text = formatter.string(from: thisNote.deletedDate!) return noteCell } - //number of rows generated + //number of rows generated ! override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return nonDeletedNotes().count @@ -67,27 +80,33 @@ class NoteTableView: UITableViewController { tableView.reloadData() } -// //editing note when selected + + + +// +// //replace variable "selectedNote" in single view VC +// +// //Segue into single view page // override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) // {//arrow going to NoteDetail -// self.performSegue(withIdentifier: "editNote", sender: self) +// self.performSegue(withIdentifier: "SummarySegue", sender: self) // } // //prepare segue // override func prepare(for segue: UIStoryboardSegue, sender: Any?) // { -// if(segue.identifier == "editNote") +// if(segue.identifier == "SummarySegue") // { // let indexPath = tableView.indexPathForSelectedRow! // -// let noteDetail = segue.destination as? NoteDetailVC +// let journalEntry = segue.destination as? SingleViewVC // //select Note -// let selectedNote : Note! -// selectedNote = nonDeletedNotes()[indexPath.row] -// noteDetail!.selectedNote = selectedNote +// let selectedJournal : Note! +// selectedJournal = nonDeletedNotes()[indexPath.row] +// journalEntry!.selectedJournal = selectedJournal // // tableView.deselectRow(at: indexPath, animated: true) // } // } - - +// +// } diff --git a/NoteAppCoreData/NoteAppCoreData/Data Model/Note.swift b/NoteAppCoreData/NoteAppCoreData/Data Model/Note.swift index 25fa40d..c74a989 100644 --- a/NoteAppCoreData/NoteAppCoreData/Data Model/Note.swift +++ b/NoteAppCoreData/NoteAppCoreData/Data Model/Note.swift @@ -8,4 +8,6 @@ class Note: NSManagedObject @NSManaged var title: String! @NSManaged var desc: String! @NSManaged var deletedDate: Date? + + @NSManaged var wavelength: String! } diff --git a/NoteAppCoreData/NoteAppCoreData/Data Model/NoteAppCoreData.xcdatamodeld/NoteAppCoreData.xcdatamodel/contents b/NoteAppCoreData/NoteAppCoreData/Data Model/NoteAppCoreData.xcdatamodeld/NoteAppCoreData.xcdatamodel/contents index 164ff9f..359c6ca 100644 --- a/NoteAppCoreData/NoteAppCoreData/Data Model/NoteAppCoreData.xcdatamodeld/NoteAppCoreData.xcdatamodel/contents +++ b/NoteAppCoreData/NoteAppCoreData/Data Model/NoteAppCoreData.xcdatamodeld/NoteAppCoreData.xcdatamodel/contents @@ -1,12 +1,13 @@ - + + - + \ No newline at end of file diff --git a/NoteAppCoreData/NoteAppCoreData/Data Model/NoteCell.swift b/NoteAppCoreData/NoteAppCoreData/Data Model/NoteCell.swift index edec045..14d56c3 100644 --- a/NoteAppCoreData/NoteAppCoreData/Data Model/NoteCell.swift +++ b/NoteAppCoreData/NoteAppCoreData/Data Model/NoteCell.swift @@ -4,4 +4,10 @@ class NoteCell: UITableViewCell { @IBOutlet weak var titleLabel: UILabel! @IBOutlet weak var descLabel: UILabel! + + // + @IBOutlet weak var dateLabel: UILabel! } + + + diff --git a/NoteAppCoreData/NoteAppCoreData/Views/Assets.xcassets/9606-wave-loader.dataset/9606-wave-loader.json b/NoteAppCoreData/NoteAppCoreData/Views/Assets.xcassets/9606-wave-loader.dataset/9606-wave-loader.json new file mode 100644 index 0000000..a6fc54f --- /dev/null +++ b/NoteAppCoreData/NoteAppCoreData/Views/Assets.xcassets/9606-wave-loader.dataset/9606-wave-loader.json @@ -0,0 +1 @@ +{"v":"5.5.5","fr":29.9700012207031,"ip":0,"op":34.0000013848484,"w":224,"h":248,"nm":"clr","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 3","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":71,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[528,395,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[67.75,48,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":0,"op":34.0000013848484,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Pre-comp 3","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":71,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[350,401,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[67.75,48,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":0,"op":34.0000013848484,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"Pre-comp 3","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":71,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[452,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[67.75,48,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":0,"op":34.0000013848484,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 1","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[200.719,400,0],"to":[47.446,0,0],"ti":[-107.169,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[498.569,400,0],"to":[41.374,0,0],"ti":[-22.519,0,0]},{"t":44.0000017921567,"s":[602.868,400,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[162.766,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[368,22],[298,88],[206,22],[98,88],[-1,22],[-103,88],[-196,22],[-286,88],[-376,22],[-373,339],[368,339]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.823528992896,0,1],"ix":3},"o":{"a":0,"k":0,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.411073004031,0.677598003313,0.776471007104,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"rd","nm":"Round Corners 1","r":{"a":0,"k":45,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false}],"ip":0,"op":34.0000013848484,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"Pre-comp 2","tt":1,"refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":0,"op":34.0000013848484,"st":0,"bm":0}]},{"id":"comp_2","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[778,522,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[129.412,129.412,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[344,344],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.823528992896,0,1],"ix":3},"o":{"a":0,"k":0,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"gf","o":{"a":0,"k":100,"ix":10},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.002,0.715,0.031,1,0.501,0.709,0.047,1,1,0.702,0.063,1,0,1,0.5,0.5,1,0],"ix":9}},"s":{"a":0,"k":[0,0],"ix":5},"e":{"a":0,"k":[158,0],"ix":6},"t":2,"h":{"a":0,"k":0,"ix":7},"a":{"a":0,"k":0,"ix":8},"nm":"Gradient Fill 1","mn":"ADBE Vector Graphic - G-Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-162,-70],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":34.0000013848484,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[583,493,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[129.412,129.412,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[344,344],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.823528992896,0,1],"ix":3},"o":{"a":0,"k":0,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"gf","o":{"a":0,"k":100,"ix":10},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.002,1,0.715,0.031,0.501,1,0.477,0.047,1,1,0.239,0.063,0,1,0.5,0.5,1,0],"ix":9}},"s":{"a":0,"k":[0,0],"ix":5},"e":{"a":0,"k":[158,0],"ix":6},"t":2,"h":{"a":0,"k":0,"ix":7},"a":{"a":0,"k":0,"ix":8},"nm":"Gradient Fill 1","mn":"ADBE Vector Graphic - G-Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-162,-70],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":34.0000013848484,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[393,504,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[115.686,115.686,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[344,344],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.823528992896,0,1],"ix":3},"o":{"a":0,"k":0,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"gf","o":{"a":0,"k":100,"ix":10},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.002,1,0.031,0.328,0.501,1,0.047,0.25,1,1,0.063,0.173,0,1,0.5,0.5,1,0],"ix":9}},"s":{"a":0,"k":[0,0],"ix":5},"e":{"a":0,"k":[172,20],"ix":6},"t":2,"h":{"a":0,"k":0,"ix":7},"a":{"a":0,"k":0,"ix":8},"nm":"Gradient Fill 1","mn":"ADBE Vector Graphic - G-Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-162,-70],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":34.0000013848484,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 4","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":22,"ix":11},"r":{"a":0,"k":180,"ix":10},"p":{"a":0,"k":[111,127,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[51.915,0],[0,-51.915],[-51.915,0],[0,51.915]],"o":[[-51.915,0],[0,51.915],[51.915,0],[0,-51.915]],"v":[[400,304],[306,398],[400,492],[494,398]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"w":800,"h":800,"ip":0,"op":34.0000013848484,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Pre-comp 4","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[111,127,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[51.915,0],[0,-51.915],[-51.915,0],[0,51.915]],"o":[[-51.915,0],[0,51.915],[51.915,0],[0,-51.915]],"v":[[400,304],[306,398],[400,492],[494,398]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"w":800,"h":800,"ip":0,"op":34.0000013848484,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/NoteAppCoreData/NoteAppCoreData/Views/Assets.xcassets/9606-wave-loader.dataset/Contents.json b/NoteAppCoreData/NoteAppCoreData/Views/Assets.xcassets/9606-wave-loader.dataset/Contents.json new file mode 100644 index 0000000..55a499e --- /dev/null +++ b/NoteAppCoreData/NoteAppCoreData/Views/Assets.xcassets/9606-wave-loader.dataset/Contents.json @@ -0,0 +1,12 @@ +{ + "data" : [ + { + "filename" : "9606-wave-loader.json", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/NoteAppCoreData/NoteAppCoreData/Views/Base.lproj/Main.storyboard b/NoteAppCoreData/NoteAppCoreData/Views/Base.lproj/Main.storyboard index df248ab..44c5dea 100644 --- a/NoteAppCoreData/NoteAppCoreData/Views/Base.lproj/Main.storyboard +++ b/NoteAppCoreData/NoteAppCoreData/Views/Base.lproj/Main.storyboard @@ -118,6 +118,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -154,7 +229,7 @@ - - - - - - - - - + + + - + + + - + + + - - - - + + + + + + @@ -387,6 +462,7 @@ + @@ -399,12 +475,13 @@ + - + diff --git a/NoteAppCoreData/NoteAppCoreData/wave-loader.json b/NoteAppCoreData/NoteAppCoreData/wave-loader.json new file mode 100644 index 0000000..a6fc54f --- /dev/null +++ b/NoteAppCoreData/NoteAppCoreData/wave-loader.json @@ -0,0 +1 @@ +{"v":"5.5.5","fr":29.9700012207031,"ip":0,"op":34.0000013848484,"w":224,"h":248,"nm":"clr","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 3","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":71,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[528,395,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[67.75,48,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":0,"op":34.0000013848484,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Pre-comp 3","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":71,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[350,401,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[67.75,48,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":0,"op":34.0000013848484,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"Pre-comp 3","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":71,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[452,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[67.75,48,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":0,"op":34.0000013848484,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 1","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[200.719,400,0],"to":[47.446,0,0],"ti":[-107.169,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[498.569,400,0],"to":[41.374,0,0],"ti":[-22.519,0,0]},{"t":44.0000017921567,"s":[602.868,400,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[162.766,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[368,22],[298,88],[206,22],[98,88],[-1,22],[-103,88],[-196,22],[-286,88],[-376,22],[-373,339],[368,339]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.823528992896,0,1],"ix":3},"o":{"a":0,"k":0,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.411073004031,0.677598003313,0.776471007104,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"rd","nm":"Round Corners 1","r":{"a":0,"k":45,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false}],"ip":0,"op":34.0000013848484,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"Pre-comp 2","tt":1,"refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":0,"op":34.0000013848484,"st":0,"bm":0}]},{"id":"comp_2","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[778,522,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[129.412,129.412,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[344,344],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.823528992896,0,1],"ix":3},"o":{"a":0,"k":0,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"gf","o":{"a":0,"k":100,"ix":10},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.002,0.715,0.031,1,0.501,0.709,0.047,1,1,0.702,0.063,1,0,1,0.5,0.5,1,0],"ix":9}},"s":{"a":0,"k":[0,0],"ix":5},"e":{"a":0,"k":[158,0],"ix":6},"t":2,"h":{"a":0,"k":0,"ix":7},"a":{"a":0,"k":0,"ix":8},"nm":"Gradient Fill 1","mn":"ADBE Vector Graphic - G-Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-162,-70],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":34.0000013848484,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[583,493,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[129.412,129.412,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[344,344],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.823528992896,0,1],"ix":3},"o":{"a":0,"k":0,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"gf","o":{"a":0,"k":100,"ix":10},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.002,1,0.715,0.031,0.501,1,0.477,0.047,1,1,0.239,0.063,0,1,0.5,0.5,1,0],"ix":9}},"s":{"a":0,"k":[0,0],"ix":5},"e":{"a":0,"k":[158,0],"ix":6},"t":2,"h":{"a":0,"k":0,"ix":7},"a":{"a":0,"k":0,"ix":8},"nm":"Gradient Fill 1","mn":"ADBE Vector Graphic - G-Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-162,-70],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":34.0000013848484,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[393,504,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[115.686,115.686,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[344,344],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.823528992896,0,1],"ix":3},"o":{"a":0,"k":0,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"gf","o":{"a":0,"k":100,"ix":10},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.002,1,0.031,0.328,0.501,1,0.047,0.25,1,1,0.063,0.173,0,1,0.5,0.5,1,0],"ix":9}},"s":{"a":0,"k":[0,0],"ix":5},"e":{"a":0,"k":[172,20],"ix":6},"t":2,"h":{"a":0,"k":0,"ix":7},"a":{"a":0,"k":0,"ix":8},"nm":"Gradient Fill 1","mn":"ADBE Vector Graphic - G-Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-162,-70],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":34.0000013848484,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 4","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":22,"ix":11},"r":{"a":0,"k":180,"ix":10},"p":{"a":0,"k":[111,127,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[51.915,0],[0,-51.915],[-51.915,0],[0,51.915]],"o":[[-51.915,0],[0,51.915],[51.915,0],[0,-51.915]],"v":[[400,304],[306,398],[400,492],[494,398]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"w":800,"h":800,"ip":0,"op":34.0000013848484,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Pre-comp 4","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[111,127,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[51.915,0],[0,-51.915],[-51.915,0],[0,51.915]],"o":[[-51.915,0],[0,51.915],[51.915,0],[0,-51.915]],"v":[[400,304],[306,398],[400,492],[494,398]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"w":800,"h":800,"ip":0,"op":34.0000013848484,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/NoteAppCoreData/Podfile b/NoteAppCoreData/Podfile new file mode 100644 index 0000000..89e9a7a --- /dev/null +++ b/NoteAppCoreData/Podfile @@ -0,0 +1,10 @@ +platform :ios, '9.0' + +target 'NoteAppCoreData' do + # Comment the next line if you don't want to use dynamic frameworks + use_frameworks! + + # Pods for NoteAppCoreData +pod 'HGPlaceholders' + +end diff --git a/NoteAppCoreData/Podfile.lock b/NoteAppCoreData/Podfile.lock new file mode 100644 index 0000000..e301123 --- /dev/null +++ b/NoteAppCoreData/Podfile.lock @@ -0,0 +1,16 @@ +PODS: + - HGPlaceholders (0.5.0) + +DEPENDENCIES: + - HGPlaceholders + +SPEC REPOS: + trunk: + - HGPlaceholders + +SPEC CHECKSUMS: + HGPlaceholders: cbf8caed8360fc2ab5e8a4610cce61f76fbd2c37 + +PODFILE CHECKSUM: bcc8d34f3fff747fa13fdca05bd1c45e680ede10 + +COCOAPODS: 1.10.2 diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/Contents.json b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-error.imageset/Contents.json b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-error.imageset/Contents.json new file mode 100644 index 0000000..1e77f7a --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-error.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "halloween-error.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-error.imageset/halloween-error.pdf b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-error.imageset/halloween-error.pdf new file mode 100644 index 0000000..41c6f19 Binary files /dev/null and b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-error.imageset/halloween-error.pdf differ diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-loading.imageset/Contents.json b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-loading.imageset/Contents.json new file mode 100644 index 0000000..9eaf23c --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-loading.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "halloween-loading.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-loading.imageset/halloween-loading.pdf b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-loading.imageset/halloween-loading.pdf new file mode 100644 index 0000000..90d27fd Binary files /dev/null and b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-loading.imageset/halloween-loading.pdf differ diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-no_network.imageset/Contents.json b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-no_network.imageset/Contents.json new file mode 100644 index 0000000..cfee983 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-no_network.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "halloween-no_network.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-no_network.imageset/halloween-no_network.pdf b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-no_network.imageset/halloween-no_network.pdf new file mode 100644 index 0000000..6e826c2 Binary files /dev/null and b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-no_network.imageset/halloween-no_network.pdf differ diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-no_results.imageset/Contents.json b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-no_results.imageset/Contents.json new file mode 100644 index 0000000..0814550 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-no_results.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "halloween-no_results.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-no_results.imageset/halloween-no_results.pdf b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-no_results.imageset/halloween-no_results.pdf new file mode 100644 index 0000000..9502e97 Binary files /dev/null and b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/halloween-no_results.imageset/halloween-no_results.pdf differ diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-error.imageset/Contents.json b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-error.imageset/Contents.json new file mode 100644 index 0000000..41ed5ae --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-error.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "hg-error.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-error.imageset/hg-error.pdf b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-error.imageset/hg-error.pdf new file mode 100644 index 0000000..18859ba Binary files /dev/null and b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-error.imageset/hg-error.pdf differ diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-loading.imageset/Contents.json b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-loading.imageset/Contents.json new file mode 100644 index 0000000..a3dacc7 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-loading.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "hg-loading.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-loading.imageset/hg-loading.pdf b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-loading.imageset/hg-loading.pdf new file mode 100644 index 0000000..ad33937 Binary files /dev/null and b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-loading.imageset/hg-loading.pdf differ diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-no_connection.imageset/Contents.json b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-no_connection.imageset/Contents.json new file mode 100644 index 0000000..eba87f2 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-no_connection.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "hg-no_connection.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-no_connection.imageset/hg-no_connection.pdf b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-no_connection.imageset/hg-no_connection.pdf new file mode 100644 index 0000000..2e91fbe Binary files /dev/null and b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-no_connection.imageset/hg-no_connection.pdf differ diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-no_results.imageset/Contents.json b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-no_results.imageset/Contents.json new file mode 100644 index 0000000..e76c932 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-no_results.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "hg-no_results.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-no_results.imageset/hg-no_results.pdf b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-no_results.imageset/hg-no_results.pdf new file mode 100644 index 0000000..66ac5bd Binary files /dev/null and b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default-no_results.imageset/hg-no_results.pdf differ diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-error.imageset/Contents.json b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-error.imageset/Contents.json new file mode 100644 index 0000000..8cbecb9 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-error.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "HGError.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-error.imageset/HGError.pdf b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-error.imageset/HGError.pdf new file mode 100644 index 0000000..b91f9b2 Binary files /dev/null and b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-error.imageset/HGError.pdf differ diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-loading.imageset/Contents.json b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-loading.imageset/Contents.json new file mode 100644 index 0000000..7213bd8 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-loading.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "HGList.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-loading.imageset/HGList.pdf b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-loading.imageset/HGList.pdf new file mode 100644 index 0000000..f2db7b5 Binary files /dev/null and b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-loading.imageset/HGList.pdf differ diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-no_results.imageset/Contents.json b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-no_results.imageset/Contents.json new file mode 100644 index 0000000..e8824ec --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-no_results.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "HGBlog.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-no_results.imageset/HGBlog.pdf b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-no_results.imageset/HGBlog.pdf new file mode 100644 index 0000000..2976f6a Binary files /dev/null and b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Assets/Assets.xcassets/hg_default2-no_results.imageset/HGBlog.pdf differ diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Cells/PlaceholderCollectionViewCell.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Cells/PlaceholderCollectionViewCell.swift new file mode 100644 index 0000000..0f656cd --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Cells/PlaceholderCollectionViewCell.swift @@ -0,0 +1,36 @@ +// +// PlaceholderCollectionViewCell.swift +// Pods +// +// Created by Hamza Ghazouani on 25/07/2017. +// +// + +import UIKit + +/// The default cell used for collection view placeholders (takes the size of the collection view) +open class PlaceholderCollectionViewCell: UICollectionViewCell { + + var onActionButtonTap: (() -> Void)? + + @IBOutlet weak var titleLabel: UILabel? + @IBOutlet weak var subtitleLabel: UILabel? + @IBOutlet weak var placeholderImageView: UIImageView? + @IBOutlet weak var actionButton: UIButton? + @IBOutlet weak var activityIndicator: UIActivityIndicatorView? + + var cellView: UIView { + return self + } + + // MARK: - User interaction + + @IBAction func sendPlaceholderAction(_ sender: Any) { + onActionButtonTap?() + print("Placeholder action button tapped") + } +} + +extension PlaceholderCollectionViewCell: Reusable {} +extension PlaceholderCollectionViewCell: NibLoadable {} +extension PlaceholderCollectionViewCell: CellPlaceholding {} diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Cells/PlaceholderCollectionViewCell.xib b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Cells/PlaceholderCollectionViewCell.xib new file mode 100644 index 0000000..d7899d6 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Cells/PlaceholderCollectionViewCell.xib @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Cells/PlaceholderTableViewCell.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Cells/PlaceholderTableViewCell.swift new file mode 100644 index 0000000..4729de2 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Cells/PlaceholderTableViewCell.swift @@ -0,0 +1,40 @@ +// +// PlaceholderTableViewCell.swift +// Pods +// +// Created by Hamza Ghazouani on 20/07/2017. +// +// + +import UIKit + +/// The default cell used for table view placeholders (takes the size of the table view) +open class PlaceholderTableViewCell: UITableViewCell { + + var onActionButtonTap: (() -> Void)? + + // MARK: Properties + + @IBOutlet weak var titleLabel: UILabel? + @IBOutlet weak var subtitleLabel: UILabel? + @IBOutlet weak var placeholderImageView: UIImageView? + @IBOutlet weak var actionButton: UIButton? + @IBOutlet weak var activityIndicator: UIActivityIndicatorView? + + var cellView: UIView { + return self + } + + // MARK: - User interaction + + @IBAction func sendPlaceholderAction(_ sender: Any) { + onActionButtonTap?() + print("Placeholder action button tapped") + } +} + +extension PlaceholderTableViewCell: NibLoadable {} +extension PlaceholderTableViewCell: Reusable {} +extension PlaceholderTableViewCell: CellPlaceholding {} + + diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Cells/PlaceholderTableViewCell.xib b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Cells/PlaceholderTableViewCell.xib new file mode 100644 index 0000000..6bcc28e --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Cells/PlaceholderTableViewCell.xib @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/ErrorMessage.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/ErrorMessage.swift new file mode 100644 index 0000000..01b4a7a --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/ErrorMessage.swift @@ -0,0 +1,35 @@ +// +// ErrorMessage.swift +// Pods +// +// Created by Hamza Ghazouani on 29/09/2017. +// +// + +import UIKit + +enum ErrorText { + case loadingPlaceholder + case noResultPlaceholder + case errorPlaceholder + case noConnectionPlaceholder + case customPlaceholder(key: String) + + var text: String { + var key: String + switch self { + case .loadingPlaceholder: + key = "PlaceholderKey.loadingKey" + case .noResultPlaceholder: + key = "PlaceholderKey.noResultsKey" + case .errorPlaceholder: + key = "PlaceholderKey.errorKey" + case .noConnectionPlaceholder: + key = "PlaceholderKey.noConnectionKey" + case .customPlaceholder(let customKey): + key = customKey + } + + return "Your placeholdersProvider is not configured correctly, no placeholder with key: \(key) found!" + } +} diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/Placeholder.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/Placeholder.swift new file mode 100644 index 0000000..d83ef00 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/Placeholder.swift @@ -0,0 +1,51 @@ +// +// Placeholder.swift +// Pods +// +// Created by Hamza Ghazouani on 20/07/2017. +// +// + +import Foundation +import UIKit + +/// The Placeholder object, is used to create placeholders +public struct Placeholder { + + /// The data of the placeholer + public var data: PlaceholderData? + /// The style of the placeholder + public var style: PlaceholderStyle? + + /// The cell identifier of the placeholder + public let cellIdentifier: String? + + /// The key of the placeholder, each placeholder should have an unique key + public let key: PlaceholderKey + + + /// Create a placeholder by using the data and style objects + /// + /// - Parameters: + /// - data: the data of the placeholder + /// - style: the style of the placeholder + /// - key: the unique key of the placeholder + public init(data: PlaceholderData, style: PlaceholderStyle, key: PlaceholderKey) { + self.key = key + self.style = style + self.data = data + + self.cellIdentifier = nil + } + + + /// Create a placeholder by using custom xib file + /// + /// - Parameters: + /// - cellIdentifier: The identifier of the cell to use as a placeholder + /// - key: the unique key of the placeholder + public init(cellIdentifier: String, key: PlaceholderKey) { + self.key = key + self.cellIdentifier = cellIdentifier + } +} diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/PlaceholderData.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/PlaceholderData.swift new file mode 100644 index 0000000..97b9b53 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/PlaceholderData.swift @@ -0,0 +1,83 @@ +// +// PlaceholderData.swift +// Pods +// +// Created by Hamza Ghazouani on 20/07/2017. +// +// + +import UIKit + +/// Contains the placeholder data: texts, image, etc +public struct PlaceholderData { + + // MARK: properties + + /// The placeholder image, if the image is nil, the placeholder image view will be hidden + public var image: UIImage? + + /// the placeholder title + public var title: String? + + /// The placeholder subtitle + public var subtitle: String? + + /// The placehlder action title, if the action title is nil, the placeholder action button will be hidden + public var action: String? + + /// Should shows the activity indicator of the placeholder or not + public var showsLoading = false + + // MARK: init methods + + + /// Create and return PlaceholderData object + public init() {} + + // MARK: Defaults placeholders data + + /// The default data (texts, image, ...) of the default no results placeholder + public static var noResults: PlaceholderData { + var noResultsStyle = PlaceholderData() + noResultsStyle.image = PlaceholdersProvider.image(named: "hg_default-no_results") + noResultsStyle.title = NSLocalizedString("No results founds", comment: "") + noResultsStyle.subtitle = NSLocalizedString("We can’t find what\nyou’re looking for.", comment: "") + noResultsStyle.action = NSLocalizedString("Try Again!", comment: "") + + return noResultsStyle + } + + /// The default data (texts, image, ...) of the default loading placeholder + public static var loading: PlaceholderData { + var loadingStyle = PlaceholderData() + loadingStyle.image = PlaceholdersProvider.image(named: "hg_default-loading") + loadingStyle.title = NSLocalizedString("Loading...", comment: "") + loadingStyle.action = NSLocalizedString("Cancel", comment: "") + loadingStyle.subtitle = NSLocalizedString("The bits are flowing\nslowly today", comment: "") + loadingStyle.showsLoading = true + + return loadingStyle + } + + /// The default data (texts, image, ...) of the default error placeholder + public static var error: PlaceholderData { + var errorStyle = PlaceholderData() + errorStyle.image = PlaceholdersProvider.image(named: "hg_default-error") + errorStyle.title = NSLocalizedString("Whoops!", comment: "") + errorStyle.subtitle = NSLocalizedString("We tried, but something went\nteriblly wrong", comment: "") + errorStyle.action = NSLocalizedString("Try Again!", comment: "") + + return errorStyle + } + + /// The default data (texts, image, ...) of the default no connecton placeholder + public static var noConnection: PlaceholderData { + var noConnectionStyle = PlaceholderData() + noConnectionStyle.image = PlaceholdersProvider.image(named: "hg_default-no_connection") + noConnectionStyle.title = NSLocalizedString("Whoops!", comment: "") + noConnectionStyle.subtitle = NSLocalizedString("Slow or no internet connections.\nPlease check your internet settings", comment: "") + noConnectionStyle.action = NSLocalizedString("Try Again!", comment: "") + + return noConnectionStyle + } +} diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/PlaceholderKey.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/PlaceholderKey.swift new file mode 100644 index 0000000..0e81345 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/PlaceholderKey.swift @@ -0,0 +1,62 @@ +// +// PlaceholderType.swift +// Pods +// +// Created by Hamza Ghazouani on 20/07/2017. +// +// + +import Foundation + + +/// Manage all keys of placeholsers, each placeholder should has an unique key +/// Struct instead of enum because here we need to extend the number of cases. +public struct PlaceholderKey: Hashable { + + // MARK: properties + + /// The key value + public let value: String + + // MARK: init methods + + + /// Create and return a PlaceholderKey with the specified key value + /// + /// - Parameter value: the value of the key + private init(value: String) { + self.value = value + } + + // MARK: default keys + + /// The default loading key, is used for loading placeholder + public static var loadingKey = PlaceholderKey(value: "loading") + + /// The default no internet connection key, is used for no internet connection placeholder + public static var noConnectionKey = PlaceholderKey(value: "noConnection") + + /// The default error key, is used for error placeholder + public static var errorKey = PlaceholderKey(value: "error") + + /// The default no result key, is used for no results placeholder + public static var noResultsKey = PlaceholderKey(value: "noResults") + + /// Is used to add new keys + public static func custom(key: String) -> PlaceholderKey { + return PlaceholderKey(value: key) + } + + public func hash(into hasher: inout Hasher) { + return hasher.combine(value.hashValue) + } +} + +extension PlaceholderKey: Equatable { + + /// To make PlaceholderKey hashable + public static func == (lhs: PlaceholderKey, rhs: PlaceholderKey) -> Bool { + return lhs.value == rhs.value + } + +} diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/PlaceholderStyle.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/PlaceholderStyle.swift new file mode 100644 index 0000000..f483ce8 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Placeholder/PlaceholderStyle.swift @@ -0,0 +1,58 @@ +// +// PlaceholderStyle.swift +// Pods +// +// Created by Hamza Ghazouani on 20/07/2017. +// +// + +import UIKit + + +/// PlaceholderStyle is used to customise the placeholder cell style +public struct PlaceholderStyle { + + // MARK: properties + + /// The color of the placeholder title, the default value is darkText + public var titleColor: UIColor = .darkText + /// The font of the placeholder title, the default value is boldSystemFont 19 + public var titleFont = UIFont.boldSystemFont(ofSize: 19) + /// The text alignment of the placeholder title, the default value is NSTextAlignment.center + public var titleTextAlignment = NSTextAlignment.center + + /// The color of the placeholder subtitle, the default value is gray + public var subtitleColor: UIColor = .gray + /// The font of the placeholder subtitle, the default value is systemFont 14 + public var subtitleFont = UIFont.systemFont(ofSize: 14) + /// The text alignment of the placeholder subtitle, the default value is NSTextAlignment.center + public var subtitleTextAlignment = NSTextAlignment.center + + /// The color of the action button title of the placeholder, the default value is white + public var actionTitleColor: UIColor = .white + /// The font of the placeholder subtitle, the default value is boldSystemFont 17 + public var actionTitleFont = UIFont.boldSystemFont(ofSize: 17) + + /// The color of the action button background of the placeholder, the default value is the tint color + public var actionBackgroundColor: UIColor? + + /// The color of activity indicator view of the placeholder, the default value is light gray + public var activityIndicatorColor = UIColor.lightGray + + /// The background color of the placeholder, the default value is clear + public var backgroundColor = UIColor.clear + + /// Should display the placeholder with animation or not + public var isAnimated = true + + /// Should display the tableViewHeader or not, the default value is false + public var shouldShowTableViewHeader = false + + /// Should display the tableViewFooter or not, the default value is false + public var shouldShowTableViewFooter = false + + // MARK: init methods + + /// Create and return a PlaceholderStyle object + public init() {} +} diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/PlaceholdersProvider/PlaceholderDataSourceDelegate.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/PlaceholdersProvider/PlaceholderDataSourceDelegate.swift new file mode 100644 index 0000000..a61967e --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/PlaceholdersProvider/PlaceholderDataSourceDelegate.swift @@ -0,0 +1,215 @@ +// +// PlaceholderDataSourceDelegate.swift +// Pods +// +// Created by Hamza Ghazouani on 20/07/2017. +// +// + +import Foundation + +/// This class is responsible for implementing the `UITableViewDataSource` and `UITableViewDelegate` protocols. +/// Each placeholder view is an tableview with one cell, that takes all the tableview frame +class PlaceholderDataSourceDelegate: NSObject { + + // MARK: properties + + /// The placeholder object + let placeholder: Placeholder + + // MARK: init methods + + /// Create and return a PlaceholderDataSourceDelegate object with the specified Placeholder + /// + /// - Parameter placeholder: the placeholder object + init(placeholder: Placeholder) { + self.placeholder = placeholder + } + + // MARK: Utilities methods + + /// fill the placeholder cell to the texts and styles + /// + /// - Parameters: + /// - cell: the cell can be an UITableViewCell or UICollectionViewCell, but it must be conform to the protocol CellPlaceholding + /// - placeholder: the placeholder object + /// - tintColor: the tint color to apply + func fill(cell: CellPlaceholding, to placeholder: Placeholder, tintColor: UIColor?) { + + /* if the the placeholder created by xib and data/style are nil, we should keep the xib data/style */ + + // apply style + if let style = placeholder.style { + cell.apply(style: style, tintColor: tintColor) + } + + // apply data + if let data = placeholder.data { + cell.apply(data: data) + } + } + + /// Animate the cell (UICollectionViewCell / UITableViewCell) + /// + /// - Parameter cell: the cell to animate, it should be conform to the protocol CellPlaholding + func animate(cell: CellPlaceholding) { + // animate the imageView + + guard let imageView = cell.placeholderImageView else { return } + let rotate = CGAffineTransform(rotationAngle: -0.2) + let stretchAndRotate = rotate.scaledBy(x: 0.5, y: 0.5) + imageView.transform = stretchAndRotate + imageView.alpha = 0.5 + UIView.animate(withDuration: 1.5, delay: 0.0, usingSpringWithDamping: 0.45, initialSpringVelocity: 10.0, options:[.curveEaseOut], animations: { + imageView.alpha = 1.0 + let rotate = CGAffineTransform(rotationAngle: 0.0) + let stretchAndRotate = rotate.scaledBy(x: 1.0, y: 1.0) + imageView.transform = stretchAndRotate + + }, completion: nil) + } + + /// Returns the height of the scroll view by removing the top and bottom inset + the height of the refresh control + /// + /// - Parameter scrollView: the scroll view + /// - Returns: the height of the scroll view without refresh control, top and bottom inset + func height(of scrollView: UIScrollView) -> CGFloat { + var height = scrollView.bounds.height + if #available(iOS 10, *) { + height -= scrollView.refreshControl?.bounds.height ?? 0 + } + if #available(iOS 11, *) { + height -= (scrollView.adjustedContentInset.top + scrollView.adjustedContentInset.bottom) + } else { + height -= (scrollView.contentInset.top + scrollView.contentInset.bottom) + } + return height + } + +} + +// MARK: table view data source methods + +/** + * The placeholder template data source, adopt the UITableViewDataSource protocol + */ +extension PlaceholderDataSourceDelegate: UITableViewDataSource { + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return 1 + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let reuseIdentifier = placeholder.cellIdentifier ?? PlaceholderTableViewCell.reuseIdentifier + guard let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier) else { + fatalError( + "Failed to dequeue a cell with identifier \(reuseIdentifier). " + + "Check that the reuseIdentifier is set properly in your XIB/Storyboard " + + "and that you registered the cell beforehand" + ) + } + + cell.selectionStyle = .none + // If the cell does not inherit from PlaceholderTableViewCell, the data and the style can't be applied + guard let placeholderTableViewCell = cell as? PlaceholderTableViewCell else { + return cell + } + + fill(cell: placeholderTableViewCell, to: placeholder, tintColor: tableView.tintColor) + + // forward action to placeholder delegate + placeholderTableViewCell.onActionButtonTap = { [unowned self] in + guard let placeholderTableView = (tableView as? TableView) else { return } + placeholderTableView.placeholderDelegate?.view(tableView, actionButtonTappedFor: self.placeholder) + } + + return cell + } +} + +// MARK: - table view delegate methods + +/** + * The placeholder template delegate, adopt the UITableViewDelegate protocol + * Implement the method tableView:heightForRowAt: to much cell size to tableview size + * And tableView:willDisplay: to animate the cell if needed + */ +extension PlaceholderDataSourceDelegate: UITableViewDelegate { + + // the placeholder cell takes always the size of the table view + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + + var tableViewHeight = height(of: tableView) + + // subtract tableHeaderView Height out of height + let style = placeholder.style + if style?.shouldShowTableViewHeader != true { + tableViewHeight -= tableView.tableHeaderView?.bounds.height ?? 0 + } + + // subtract tableFooterView Height out of height + if style?.shouldShowTableViewFooter != true { + tableViewHeight -= tableView.tableFooterView?.bounds.height ?? 0 + } + + return tableViewHeight + } + + // animate the cell + func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { + + if placeholder.style?.isAnimated == false { + return + } + + guard let placeholderTableViewCell = cell as? PlaceholderTableViewCell else { return } + animate(cell: placeholderTableViewCell) + } +} + + +// MARK: - collection view data source methods + +extension PlaceholderDataSourceDelegate: UICollectionViewDataSource { + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return 1 + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let reuseIdentifier = placeholder.cellIdentifier ?? PlaceholderCollectionViewCell.reuseIdentifier + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) + + // If the cell does not inherit from PlaceholderTableViewCell, the data and the style can't be applied + guard let placeholderCollectionViewCell = cell as? PlaceholderCollectionViewCell else { + return cell + } + + fill(cell: placeholderCollectionViewCell, to: placeholder, tintColor: collectionView.tintColor) + + // forward action to placeholder delegate + placeholderCollectionViewCell.onActionButtonTap = { [unowned self] in + guard let placeholderCollectionView = collectionView as? CollectionView else { return } + placeholderCollectionView.placeholderDelegate?.view(collectionView, actionButtonTappedFor: self.placeholder) + } + return cell + } +} + +extension PlaceholderDataSourceDelegate: UICollectionViewDelegateFlowLayout { + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize { + return .zero + } + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize { + return .zero + } + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { + + let collectionViewHeight = height(of: collectionView) + return CGSize(width: collectionView.bounds.width, height: collectionViewHeight) + } +} + diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/PlaceholdersProvider/PlaceholdersProvider+Defauls.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/PlaceholdersProvider/PlaceholdersProvider+Defauls.swift new file mode 100644 index 0000000..a7e8b38 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/PlaceholdersProvider/PlaceholdersProvider+Defauls.swift @@ -0,0 +1,115 @@ +// +// PlaceholdersProvider+Defauls.swift +// Pods +// +// Created by Hamza Ghazouani on 20/07/2017. +// +// + +import Foundation + +extension PlaceholdersProvider { + + /// The default2 provider has the same placeholders as default, but with different images + public static var default2: PlaceholdersProvider { + let style = PlaceholderStyle() + + var loading = Placeholder(data: .loading, style: style, key: .loadingKey) + loading.data?.image = PlaceholdersProvider.image(named: "hg_default2-loading") + + var error = Placeholder(data: .error, style: style, key: .errorKey) + error.data?.image = PlaceholdersProvider.image(named: "hg_default2-error") + + var noResults = Placeholder(data: .noResults, style: style, key: .noResultsKey) + noResults.data?.image = PlaceholdersProvider.image(named: "hg_default2-no_results") + + var noConnection = Placeholder(data: .noConnection, style: style, key: .noConnectionKey) + noConnection.data?.image = PlaceholdersProvider.image(named: "hg_default2-error") + + let placeholdersProvider = PlaceholdersProvider(loading: loading, error: error, noResults: noResults, noConnection: noConnection) + + return placeholdersProvider + } + + /// The default provider has 4 placeholders: loading, error, noResults, and no internet conntection + public static var `default`: PlaceholdersProvider { + let style = PlaceholderStyle() + + let loading = Placeholder(data: .loading, style: style, key: .loadingKey) + let error = Placeholder(data: .error, style: style, key: .errorKey) + let noResults = Placeholder(data: .noResults, style: style, key: .noResultsKey) + let noConnection = Placeholder(data: .noConnection, style: style, key: .noConnectionKey) + + let placeholdersProvider = PlaceholdersProvider(loading: loading, error: error, noResults: noResults, noConnection: noConnection) + return placeholdersProvider + } + + /// The basic provider has the same placeholders as default, but without any images + public static var basic: PlaceholdersProvider { + let style = PlaceholderStyle() + + var loading = Placeholder(data: .loading, style: style, key: .loadingKey) + loading.data?.image = nil + + var error = Placeholder(data: .error, style: style, key: .errorKey) + error.data?.image = nil + + var noResults = Placeholder(data: .noResults, style: style, key: .noResultsKey) + noResults.data?.image = nil + + var noConnection = Placeholder(data: .noConnection, style: style, key: .noConnectionKey) + noConnection.data?.image = nil + + let placeholdersProvider = PlaceholdersProvider(loading: loading, error: error, + noResults: noResults, noConnection: noConnection) + return placeholdersProvider + } + + /// The halloween provider has the same placeholders as default, but with different images and style (for fun :)) + public static var halloween: PlaceholdersProvider { + + var commonStyle = PlaceholderStyle() + commonStyle.backgroundColor = HGColor.violet + commonStyle.actionBackgroundColor = .black + commonStyle.actionTitleColor = HGColor.violet + commonStyle.isAnimated = false + + var loadingStyle = commonStyle + loadingStyle.actionBackgroundColor = .clear + loadingStyle.actionTitleColor = .gray + + var loadingData: PlaceholderData = .loading + loadingData.image = PlaceholdersProvider.image(named:"halloween-loading") + let loading = Placeholder(data: loadingData, style: loadingStyle, key: .loadingKey) + + var errorData: PlaceholderData = .error + errorData.image = PlaceholdersProvider.image(named:"halloween-error") + let error = Placeholder(data: errorData, style: commonStyle, key: .errorKey) + + var noResultsData: PlaceholderData = .noResults + noResultsData.image = PlaceholdersProvider.image(named:"halloween-no_results") + let noResults = Placeholder(data: noResultsData, style: commonStyle, key: .noResultsKey) + + var noConnectionData: PlaceholderData = .noConnection + noConnectionData.image = PlaceholdersProvider.image(named:"halloween-no_network") + let noConnection = Placeholder(data: noConnectionData, style: commonStyle, key: .noConnectionKey) + + let placeholdersProvider = PlaceholdersProvider(loading: loading, error: error, noResults: noResults, noConnection: noConnection) + + return placeholdersProvider + } +} + +// MARK: images Utilities +extension PlaceholdersProvider { + + static func image(named name: String) -> UIImage? { + let image = UIImage(named: name) ?? UIImage(named: name, in: Bundle(for: self), compatibleWith: nil) + + return image + } +} + +struct HGColor { + static let violet = UIColor(red: 250.0/255.0, green: 222.0/255.0, blue: 251.0/255.0, alpha: 1.0) +} diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/PlaceholdersProvider/PlaceholdersProvider.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/PlaceholdersProvider/PlaceholdersProvider.swift new file mode 100644 index 0000000..bde45ef --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/PlaceholdersProvider/PlaceholdersProvider.swift @@ -0,0 +1,95 @@ +// +// PlaceholdersProvider.swift +// Pods +// +// Created by Hamza Ghazouani on 20/07/2017. +// +// + +import Foundation + +/// This class is responsible for generating placeholders for the table view +/// Takes a list of Placeholders object and generate for everyone the data source and delegate +/// A placeholder view is a table view with one cell +final public class PlaceholdersProvider { + + // MARK: properties + + /// The dictionary of placeholders data + private var placeholdersDictionary = [PlaceholderKey: PlaceholderDataSourceDelegate]() + + // MARK: init methods + + + /// Create and return PlaceholdersProvider object with the specified placeholder + /// By Default, you have 4 placeholders: loading, error, no results, and no internet connection + /// - Parameters: + /// - loading: the loading placeholder + /// - error: the placeholder to show when an error occured + /// - noResults: the placeholer to show when no results is avaible + /// - noConnection: the placeholder of no internet connection + public init(loading: Placeholder, error: Placeholder, noResults: Placeholder, noConnection: Placeholder) { + + placeholdersDictionary = [ + loading.key : PlaceholderDataSourceDelegate(placeholder: loading), + error.key: PlaceholderDataSourceDelegate(placeholder: error), + noResults.key: PlaceholderDataSourceDelegate(placeholder: noResults), + noConnection.key: PlaceholderDataSourceDelegate(placeholder: noConnection), + ] + } + + + /// Create and return PlaceholdersProvider object with the specified (custom) placeholders + /// + /// - Parameter placeholders: the placeholders + public init(placeholders: Placeholder...) { + placeholders.forEach { + placeholdersDictionary[$0.key] = PlaceholderDataSourceDelegate(placeholder: $0) + } + } + + /// Allows you to add new placeholders + public func add(placeholders: Placeholder...) { + placeholders.forEach { + placeholdersDictionary[$0.key] = PlaceholderDataSourceDelegate(placeholder: $0) + } + } + + // MARK: utilities methods + + + /// Returns an instance of PlaceholderDataSourceDelegate + /// returns nil of no placeholder found with this key + /// - Parameter key: the key of the placeholder + /// - Returns: the PlaceholderDataSourceDelegate object with the searched key + func dataSourceAndDelegate(with key: PlaceholderKey) -> PlaceholderDataSourceDelegate? { + return placeholdersDictionary[key] + } + + + + /// Returns an instance of PlaceholderDataSourceDelegate of default loading key + /// - Returns: returns PlaceholderDataSourceDelegate instance, nil of no placeholder found with this key + func loadingDataSource() -> PlaceholderDataSourceDelegate? { + return dataSourceAndDelegate(with: .loadingKey) + } + + /// Returns an instance of PlaceholderDataSourceDelegate of default error key + /// - Returns: returns PlaceholderDataSourceDelegate instance, nil of no placeholder found with this key + func errorDataSource() -> PlaceholderDataSourceDelegate? { + return dataSourceAndDelegate(with: .errorKey)! + } + + /// Returns an instance of PlaceholderDataSourceDelegate of default no results key + /// - Returns: returns PlaceholderDataSourceDelegate instance, nil of no placeholder found with this key + func noResultsDataSource() -> PlaceholderDataSourceDelegate? { + return dataSourceAndDelegate(with: .noResultsKey)! + } + + /// Returns an instance of PlaceholderDataSourceDelegate of default no connection key + /// - Returns: returns PlaceholderDataSourceDelegate instance, nil of no placeholder found with this key + func noConnectionDataSource() -> PlaceholderDataSourceDelegate? { + return dataSourceAndDelegate(with: .noConnectionKey) + } +} + diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Protocols/CellPlaceholding.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Protocols/CellPlaceholding.swift new file mode 100644 index 0000000..60fce78 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Protocols/CellPlaceholding.swift @@ -0,0 +1,81 @@ +// +// Placeholdering.swift +// Pods +// +// Created by Hamza Ghazouani on 25/07/2017. +// +// + +import UIKit + +protocol CellPlaceholding { + + var titleLabel: UILabel? { get set } + var subtitleLabel: UILabel? { get set } + var placeholderImageView: UIImageView? { get set } + var actionButton: UIButton? { get set } + var activityIndicator: UIActivityIndicatorView? { get set } + + var cellView: UIView { get } + + + // MARK: fill cell to selected style + + /// Changes the cell style to match placeholder style + /// + /// - Parameters: + /// - style: the style to apply + /// - tintColor: the tint color, is used for some items when the style color is nil + func apply(style: PlaceholderStyle, tintColor: UIColor?) + + /// Sets in the cell the placeholder texts, image, ... + /// + /// - Parameter data: the data of the cell (texts, images, etc) + func apply(data: PlaceholderData?) +} + + +// MARK: default implementation +extension CellPlaceholding { + + + /// Changes the cell style to match placeholder style + /// + /// - Parameters: + /// - style: the style to apply + /// - tintColor: the tint color, is used for some items when the style color is nil + internal func apply(style: PlaceholderStyle, tintColor: UIColor?) { + cellView.backgroundColor = style.backgroundColor + + let buttonBackgroundColor = style.actionBackgroundColor ?? tintColor + actionButton?.backgroundColor = buttonBackgroundColor + + let actionColor = style.actionTitleColor + actionButton?.setTitleColor(actionColor, for: .normal) + actionButton?.titleLabel?.font = style.actionTitleFont + + activityIndicator?.color = style.activityIndicatorColor + + titleLabel?.textColor = style.titleColor + titleLabel?.font = style.titleFont + titleLabel?.textAlignment = style.titleTextAlignment + + subtitleLabel?.textColor = style.subtitleColor + subtitleLabel?.font = style.subtitleFont + subtitleLabel?.textAlignment = style.subtitleTextAlignment + } + + /// Sets in the cell the placeholder texts, image, ... + /// + /// - Parameter data: the data of the cell (texts, images, etc) + internal func apply(data: PlaceholderData?) { + actionButton?.setTitle(data?.action, for: .normal) + actionButton?.isHidden = (data?.action == nil) + + titleLabel?.text = data?.title + subtitleLabel?.text = data?.subtitle + placeholderImageView?.image = data?.image + + data?.showsLoading == true ? activityIndicator?.startAnimating() : activityIndicator?.stopAnimating() + } +} diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Protocols/NibLoadable.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Protocols/NibLoadable.swift new file mode 100644 index 0000000..ab0d7e5 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Protocols/NibLoadable.swift @@ -0,0 +1,32 @@ +// +// NibLoadable.swift +// Pods +// +// Created by Hamza Ghazouani on 25/07/2017. +// +// + +import UIKit + +// MARK: Protocol Definition + +/** Make your UIView subclasses conform to this protocol when: + * they *are* NIB-based, and + * this class is used as the XIB's root view + * + * to be able to instantiate them from the NIB in a type-safe manner + */ +protocol NibLoadable: class { + /// The nib file to use to load a new instance of the View designed in a XIB + static var nib: UINib { get } +} + +// MARK: Default implementation + +extension NibLoadable { + /* By default, use the nib which have the same name as the name of the class, + and located in the bundle of that class */ + static var nib: UINib { + return UINib(nibName: String(describing: self), bundle: Bundle(for: self)) + } +} diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Protocols/PlaceholdersSwitcher.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Protocols/PlaceholdersSwitcher.swift new file mode 100644 index 0000000..34c0be5 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Protocols/PlaceholdersSwitcher.swift @@ -0,0 +1,33 @@ +// +// PlaceholdersShowing.swift +// Pods +// +// Created by Hamza Ghazouani on 25/07/2017. +// +// + +import UIKit + +/// Protocol allows to switch between the different placehodlers used by CollectionView and TableView +public protocol PlaceholdersSwitcher { + + /// Shows loading placeholder, if you call this method and placeholdersProvider does not contains loading placeholder, assertionFailure is called + func showLoadingPlaceholder() + + /// Shows no results placeholder, if you call this method and placeholdersProvider does not contains loading placeholder, assertionFailure is called... + func showNoResultsPlaceholder() + + /// Shows error placeholder, if you call this method and placeholdersProvider does not contains error placeholder, assertionFailure is called... + func showErrorPlaceholder() + + /// Shows no internet connection placeholder, if you call this method and placeholdersProvider does not contains no internet connection placeholder, assertionFailure is called + func showNoConnectionPlaceholder() + + /// Shows a custom placeholder + /// If you call this method and placeholdersProvider does not contains this custom placeholder, assertionFailure is called + /// - Parameter key: the key of the custom placeholder + func showCustomPlaceholder(with key: PlaceholderKey) + + /// Shows the default data of the collection view + func showDefault() +} diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Protocols/Reusable.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Protocols/Reusable.swift new file mode 100644 index 0000000..44551c0 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Protocols/Reusable.swift @@ -0,0 +1,25 @@ +// +// Reusable.swift +// Pods +// +// Created by Hamza Ghazouani on 25/07/2017. +// +// + +import UIKit + +/// Make your `UITableViewCell` and `UICollectionViewCell` subclasses +/// conform to this protocol to be able to dequeue them in a type-safe manner +protocol Reusable: class { + /// The reuse identifier to use when registering and later dequeuing a reusable cell + static var reuseIdentifier: String { get } +} + +// MARK: - Default implementation + +extension Reusable { + /// By default, use the name of the class as String for its reuseIdentifier + static var reuseIdentifier: String { + return String(describing: self) + } +} diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Views/CollectionView+Switcher.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Views/CollectionView+Switcher.swift new file mode 100644 index 0000000..c755d92 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Views/CollectionView+Switcher.swift @@ -0,0 +1,61 @@ +// +// CollectionView+Switcher.swift +// Pods +// +// Created by Hamza Ghazouani on 29/09/2017. +// +// + +import UIKit + + +// TODO: try to refactor this code it looks like the TableView+Switcher code + +// MARK: Utilities methods to switch to placeholders +extension CollectionView: PlaceholdersSwitcher { + + public func showLoadingPlaceholder() { + guard let dataSource = placeholdersProvider.loadingDataSource() else { + assertionFailure(ErrorText.loadingPlaceholder.text) + return + } + self.switchTo(dataSource: dataSource, delegate: dataSource) + } + + public func showNoResultsPlaceholder() { + guard let dataSource = placeholdersProvider.noResultsDataSource() else { + assertionFailure(ErrorText.noResultPlaceholder.text) + return + } + self.switchTo(dataSource: dataSource, delegate: dataSource) + } + + public func showErrorPlaceholder() { + guard let dataSource = placeholdersProvider.errorDataSource() else { + assertionFailure(ErrorText.errorPlaceholder.text) + return + } + self.switchTo(dataSource: dataSource, delegate: dataSource) + } + + public func showNoConnectionPlaceholder() { + guard let dataSource = placeholdersProvider.noConnectionDataSource() else { + assertionFailure(ErrorText.noConnectionPlaceholder.text) + return + } + self.switchTo(dataSource: dataSource, delegate: dataSource) + } + + public func showCustomPlaceholder(with key: PlaceholderKey) { + guard let dataSource = placeholdersProvider.dataSourceAndDelegate(with: key) else { + assertionFailure(ErrorText.customPlaceholder(key: key.value).text) + return + } + self.switchTo(dataSource: dataSource, delegate: dataSource) + } + + public func showDefault() { + self.switchTo(dataSource: defaultDataSource, delegate: defaultDelegate) + } + +} diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Views/CollectionView.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Views/CollectionView.swift new file mode 100644 index 0000000..0b5ab85 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Views/CollectionView.swift @@ -0,0 +1,207 @@ +// +// CollectionView.swift +// Pods +// +// Created by Hamza Ghazouani on 26/07/2017. +// +// + +import UIKit + +/// A collection view that allows to show easily placeholders like no results, no internet connection, etc +open class CollectionView: UICollectionView { + + // MARK: - Public properties + + /** + * The layout used to organize the collected view’s items. + Assigning a new layout object to this property causes the new layout to be applied (without animations) to the collection view’s items. + */ + open override var collectionViewLayout: UICollectionViewLayout { + didSet { + if collectionViewLayout === placeholderLayout { + return + } + defaultLayout = collectionViewLayout + } + } + + /// The placeholdersProvider property is responsible for the placeholders views and data + final public var placeholdersProvider = PlaceholdersProvider.default { + willSet { + /// before changing the placeholders data, we should be sure that the collectionView is in the default configuration. Otherwise If the dataSource and the delegate are in placeholder configuration, and we set the new data, the old one will be released and we will lose the defaultDataSource and defaultDelegate (they will be set to nil) + showDefault() + } + } + + /** + * The object that acts as the delegate of the collection view placeholders. + * The delegate must adopt the PlaceholderDelegate protocol. The delegate is not retained. + */ + public weak var placeholderDelegate: PlaceholderDelegate? + + /** + * The object that acts as the data source of the collection view. + * The data source must adopt the UICollectionViewDataSource protocol. The data source is not retained. + */ + open override weak var dataSource: UICollectionViewDataSource? { + didSet { + /* we save only the initial data source (and not a placeholder datasource) to allow to go back to the initial data */ + if dataSource is PlaceholderDataSourceDelegate { return } + defaultDataSource = dataSource + } + } + + /** + * The object that acts as the delegate of the collection view. + * The delegate must adopt the UICollectionViewDelegate protocol. The delegate is not retained. + */ + open override weak var delegate: UICollectionViewDelegate? { + didSet { + /* we save only the initial delegate (and not the placeholder delegate) to allow to go back to the initial one */ + if delegate is PlaceholderDataSourceDelegate { + return + } + defaultDelegate = delegate + } + } + + /** + * A Boolean value that determines whether bouncing always occurs when the placeholder is shown. + * The default value is false + */ + open var placeholdersAlwaysBounceVertical = false + + // MARK: - Private properties + + /// The defaultDataSource is used to allow to go back to the initial data source of the collection view after switching to a placeholder data source + internal weak var defaultDataSource: UICollectionViewDataSource? + + /// The defaultDelegate is used to allow to go back to the initial delegate of the collection view after switching to a placeholder delegate + internal weak var defaultDelegate: UICollectionViewDelegate? + + /// The defaultAlwaysBounceVertical is used to save the collectionView bouncing setup, because, when you switch to a placeholder, the vertical bounce is disabled + fileprivate var defaultAlwaysBounceVertical: Bool! + + /// The defaultLayout is used to save the collectionView default layout setup, because, when you switch to a placeholder, the layout is changed to placeholderLayout + fileprivate var defaultLayout: UICollectionViewLayout! + + /// The placeholderLayout used to show placeholder cell in the UICollectionView size + fileprivate let placeholderLayout = UICollectionViewFlowLayout() + + // MARK: - init methods + + /** + Returns an collection view initialized from data in a given unarchiver. + + - parameter aDecoder: An unarchiver object. + + - returns: self, initialized using the data in decoder. + */ + required public init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + + setup() + } + + /** + Initializes and returns a collection view object having the given frame and style. + Returns an initialized collectionView object, or nil if the object could not be successfully initialized. + + - parameter frame: A rectangle specifying the initial location and size of the collection view in its superview’€™s coordinates. The frame of the collection view changes as collection cells are added and deleted. + - parameter style: A constant that specifies the style of the collection view. See collection view Style for descriptions of valid constants. + + - returns: Returns an initialized collectionView object, or nil if the object could not be successfully initialized. + */ + override public init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) { + super.init(frame: frame, collectionViewLayout: layout) + + setup() + } + + /** + * Config the collection view to be able to show placeholders + */ + private func setup() { + // register the placeholder view cell + register(cellType: PlaceholderCollectionViewCell.self) + defaultAlwaysBounceVertical = alwaysBounceVertical + defaultLayout = collectionViewLayout + customSetup() + } + + /// Implement this method of you want to add new default placeholdersProvider, new default cell, etc + open func customSetup() {} + + // MARK: - Manage collection view data and placeholders + + /** + Switch to different data sources and delegate of the collection view (placeholders and initial data source & delegate) + + - parameter theSource: the selected data source + - parameter theDelegate: the selected delegate + */ + internal func switchTo(dataSource theDataSource: UICollectionViewDataSource?, delegate theDelegate: UICollectionViewDelegate? = nil) { + // if the data source and delegate are already set, no need to switch + if dataSource === theDataSource && delegate === theDelegate { + return + } + + if theDataSource is PlaceholderDataSourceDelegate { + // Placeholder configuration + alwaysBounceVertical = placeholdersAlwaysBounceVertical + collectionViewLayout = placeholderLayout + } else { + // default configuration + alwaysBounceVertical = defaultAlwaysBounceVertical + collectionViewLayout = defaultLayout + } + dataSource = theDataSource + delegate = theDelegate + super.reloadData() + } + + /// The total number of rows in all sections of the collectionView + private func numberOfRowsInAllSections() -> Int { + let numberOfSections = defaultDataSource?.numberOfSections?(in: self) ?? 1 + var rows = 0 + for i in 0 ..< numberOfSections { + rows += defaultDataSource?.collectionView(self, numberOfItemsInSection: i) ?? 0 + } + return rows + } + + /** + Reloads the rows and sections of the collection view. + If the number of rows == 0 it shows no results placeholder + */ + open override func reloadData() { + // if the collectionView is empty we switch automatically to no data placeholder + if numberOfRowsInAllSections() == 0 { + showNoResultsPlaceholder() + return + } + // if the data source is in no data placeholder, and the user tries to reload data, we will switch automatically to default + if dataSource is PlaceholderDataSourceDelegate { + showDefault() + return + } + super.reloadData() + } +} + +extension UICollectionView { + + /** + Register a NIB-Based `UICollectionViewCell` subclass (conforming to `Reusable` & `NibLoadable`) + + - parameter cellType: the `UICollectionViewCell` (`Reusable` & `NibLoadable`-conforming) subclass to register + + - seealso: `register(_:,forCellWithReuseIdentifier:)` + */ + final func register(cellType: T.Type) + where T: Reusable & NibLoadable { + self.register(cellType.nib, forCellWithReuseIdentifier: cellType.reuseIdentifier) + } +} + diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Views/TableView+Switcher.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Views/TableView+Switcher.swift new file mode 100644 index 0000000..f947a79 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Views/TableView+Switcher.swift @@ -0,0 +1,58 @@ +// +// TableView+Switcher.swift +// Pods +// +// Created by Hamza Ghazouani on 29/09/2017. +// +// + +import UIKit + +// MARK: Utilities methods to switch to placeholders +extension TableView: PlaceholdersSwitcher { + + public func showLoadingPlaceholder() { + guard let dataSource = placeholdersProvider.loadingDataSource() else { + assertionFailure(ErrorText.loadingPlaceholder.text) + return + } + self.switchTo(dataSource: dataSource, delegate: dataSource) + } + + public func showNoResultsPlaceholder() { + guard let dataSource = placeholdersProvider.noResultsDataSource() else { + assertionFailure(ErrorText.noResultPlaceholder.text) + return + } + self.switchTo(dataSource: dataSource, delegate: dataSource) + } + + public func showErrorPlaceholder() { + guard let dataSource = placeholdersProvider.errorDataSource() else { + assertionFailure(ErrorText.errorPlaceholder.text) + return + } + self.switchTo(dataSource: dataSource, delegate: dataSource) + } + + public func showNoConnectionPlaceholder() { + guard let dataSource = placeholdersProvider.noConnectionDataSource() else { + assertionFailure(ErrorText.noConnectionPlaceholder.text) + return + } + self.switchTo(dataSource: dataSource, delegate: dataSource) + } + + public func showCustomPlaceholder(with key: PlaceholderKey) { + guard let dataSource = placeholdersProvider.dataSourceAndDelegate(with: key) else { + assertionFailure(ErrorText.customPlaceholder(key: key.value).text) + return + } + self.switchTo(dataSource: dataSource, delegate: dataSource) + } + + public func showDefault() { + self.switchTo(dataSource: defaultDataSource, delegate: defaultDelegate) + } + +} diff --git a/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Views/TableView.swift b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Views/TableView.swift new file mode 100644 index 0000000..f45951f --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/HGPlaceholders/Classes/Views/TableView.swift @@ -0,0 +1,272 @@ +// +// TableView.swift +// Pods +// +// Created by Hamza Ghazouani on 20/07/2017. +// +// + +import UIKit + + +/// The delegate of a TableView/CollectionView object must adopt the PlaceholderDelegate protocol. the method of the protocol allow the delegate to perform placeholders action. +public protocol PlaceholderDelegate: class { + + /// Performs the action to the delegate of the table or collection view + /// + /// - Parameters: + /// - view: the table view or the collection + /// - placeholder: The placeholder source of the action + func view(_ view: Any, actionButtonTappedFor placeholder: Placeholder) +} + +/// A table view that allows to show easily placeholders like no results, no internet connection, etc +open class TableView: UITableView { + + // MARK: - Public properties + + /// The placeholdersProvider property is responsible for the placeholders views and data + final public var placeholdersProvider = PlaceholdersProvider.default { + willSet { + /// before changing the placeholders data, we should be sure that the tableview is in the default configuration. Otherwise If the dataSource and the delegate are in placeholder configuration, and we set the new data, the old one will be released and we will lose the defaultDataSource and defaultDelegate (they will be set to nil) + showDefault() + } + } + + /** + * The object that acts as the delegate of the table view placeholders. + * The delegate must adopt the PlaceholderDelegate protocol. The delegate is not retained. + */ + public weak var placeholderDelegate: PlaceholderDelegate? + + /** + * The object that acts as the data source of the table view. + * The data source must adopt the UITableViewDataSource protocol. The data source is not retained. + */ + weak open override var dataSource: UITableViewDataSource? { + didSet { + /* we save only the initial data source (and not a placeholder datasource) to allow to go back to the initial data */ + if dataSource is PlaceholderDataSourceDelegate { + return + } + defaultDataSource = dataSource + } + } + + /** + * The object that acts as the delegate of the table view. + * The delegate must adopt the UITableViewDelegate protocol. The delegate is not retained. + */ + open override weak var delegate: UITableViewDelegate? { + didSet { + /* we save only the initial delegate (and not the placeholder delegate) to allow to go back to the initial one */ + if delegate is PlaceholderDataSourceDelegate { + return + } + defaultDelegate = delegate + } + } + + /** + * Returns an accessory view that is displayed above the table. + * The default value is nil. The table header view is different from a section header. + */ + open override var tableHeaderView: UIView? { + didSet { + if tableHeaderView == nil { + return + } + + defaultTableHeaderView = tableHeaderView + } + } + + /** + * Returns an accessory view that is displayed below the table. + * The default value is nil. The table footer view is different from a section footer. + */ + open override var tableFooterView: UIView? { + didSet { + if tableFooterView == nil { return } + + defaultTableFooterView = tableFooterView + } + } + + /** + * Keeps user seperatorStyle instead of overriding with system default + * The default value is UITableViewCellSeparatorStyle.singleLine + */ + open override var separatorStyle: UITableViewCell.SeparatorStyle { + didSet { + defaultSeparatorStyle = separatorStyle + } + } + + /** + * A Boolean value that determines whether bouncing always occurs when the placeholder is shown. + * The default value is false + */ + open var placeholdersAlwaysBounceVertical = false + + // MARK: - Private properties + + /// The defaultDataSource is used to allow to go back to the initial data source of the table view after switching to a placeholder data source + internal weak var defaultDataSource: UITableViewDataSource? + + /// The defaultDelegate is used to allow to go back to the initial delegate of the table view after switching to a placeholder delegate + internal weak var defaultDelegate: UITableViewDelegate? + + /// The defaultSeparatorStyle is used to save the tableview separator style, because, when you switch to a placeholder, is changed to `.none` + fileprivate var defaultSeparatorStyle: UITableViewCell.SeparatorStyle! + + /// The defaultAlwaysBounceVertical is used to save the tableview bouncing setup, because, when you switch to a placeholder, the vertical bounce is disabled + fileprivate var defaultAlwaysBounceVertical: Bool! + + /// The defaultTableViewHeader is used to save the tableview header when you switch to placeholders + fileprivate var defaultTableHeaderView: UIView? + + /// The defaultTableViewFooter is used to save the tableview footer when you switch to placeholders + fileprivate var defaultTableFooterView: UIView? + + // MARK: - init methods + + /** + Returns an table view initialized from data in a given unarchiver. + + - parameter aDecoder: An unarchiver object. + + - returns: self, initialized using the data in decoder. + */ + required public init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + + setup() + } + + /** + Initializes and returns a table view object having the given frame and style. + Returns an initialized TableView object, or nil if the object could not be successfully initialized. + + - parameter frame: A rectangle specifying the initial location and size of the table view in its superview’€™s coordinates. The frame of the table view changes as table cells are added and deleted. + - parameter style: A constant that specifies the style of the table view. See Table View Style for descriptions of valid constants. + + - returns: Returns an initialized TableView object, or nil if the object could not be successfully initialized. + */ + override public init(frame: CGRect, style: UITableView.Style) { + super.init(frame: frame, style: style) + + setup() + } + + /** + * Config the table view to be able to show placeholders + */ + private func setup() { + // register the placeholder view cell + register(cellType: PlaceholderTableViewCell.self) + + defaultSeparatorStyle = separatorStyle + defaultAlwaysBounceVertical = alwaysBounceVertical + + defaultTableHeaderView = tableHeaderView + defaultTableFooterView = tableFooterView + + customSetup() + } + + /// Implement this method of you want to add new default placeholdersProvider, new default cell, etc + open func customSetup() {} + + // MARK: - Manage table view data and placeholders + + /** + Switch to different data sources and delegate of the table view (placeholders and initial data source & delegate) + + - parameter theSource: the selected data source + - parameter theDelegate: the selected delegate + */ + internal func switchTo(dataSource theDataSource: UITableViewDataSource?, delegate theDelegate: UITableViewDelegate? = nil) { + // if the data source and delegate are already set, no need to switch + if dataSource === theDataSource && delegate === theDelegate { + return + } + + if let placeholderDataSource = theDataSource as? PlaceholderDataSourceDelegate { + // placeholder configuration + super.separatorStyle = .none + alwaysBounceVertical = placeholdersAlwaysBounceVertical + let style = placeholderDataSource.placeholder.style + if style?.shouldShowTableViewHeader != true { // style = nil or shouldShowTableViewHeader == false + tableHeaderView = nil + } + if style?.shouldShowTableViewFooter != true { + tableFooterView = nil + } + } + else { + // default configuration + separatorStyle = defaultSeparatorStyle + alwaysBounceVertical = defaultAlwaysBounceVertical + tableHeaderView = defaultTableHeaderView + tableFooterView = defaultTableFooterView + } + + dataSource = theDataSource + delegate = theDelegate + super.reloadData() + } + + /// The total number of rows in all sections of the tableView + private func numberOfRowsInAllSections() -> Int { + let numberOfSections = defaultDataSource?.numberOfSections?(in: self) ?? 1 + var rows = 0 + for i in 0 ..< numberOfSections { + rows += defaultDataSource?.tableView(self, numberOfRowsInSection: i) ?? 0 + } + return rows + } + + /** + Reloads the rows and sections of the table view. + If the number of rows == 0 it shows no results placeholder + */ + open override func reloadData() { + // if the tableview is empty we switch automatically to no data placeholder + if numberOfRowsInAllSections() == 0 { + showNoResultsPlaceholder() + return + } + // if the data source is in no data placeholder, and the user tries to reload data, we will switch automatically to default + if dataSource is PlaceholderDataSourceDelegate { + showDefault() + return + } + super.reloadData() + } + + /** + Called when the adjusted content insets of the scroll view change. + */ + open override func adjustedContentInsetDidChange() { + if dataSource is PlaceholderDataSourceDelegate { + // Force table view to recalculate the cell height, because the method tableView:heightForRowAt: is called before adjusting the content of the scroll view + guard let indexPaths = indexPathsForVisibleRows else { return } + reloadRows(at: indexPaths, with: .automatic) + } + } +} + +extension UITableView { + /** + Register a NIB-Based `UITableViewCell` subclass (conforming to `Reusable` & `NibLoadable`) + + - parameter cellType: the `UITableViewCell` (`Reusable` & `NibLoadable`-conforming) subclass to register + + - seealso: `register(_:,forCellReuseIdentifier:)` + */ + final func register(cellType: T.Type) + where T: Reusable & NibLoadable { + self.register(cellType.nib, forCellReuseIdentifier: cellType.reuseIdentifier) + } +} diff --git a/NoteAppCoreData/Pods/HGPlaceholders/LICENSE b/NoteAppCoreData/Pods/HGPlaceholders/LICENSE new file mode 100644 index 0000000..5cde6b3 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2017 HamzaGhazouani + +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/NoteAppCoreData/Pods/HGPlaceholders/README.md b/NoteAppCoreData/Pods/HGPlaceholders/README.md new file mode 100644 index 0000000..6d7d282 --- /dev/null +++ b/NoteAppCoreData/Pods/HGPlaceholders/README.md @@ -0,0 +1,193 @@ +# HGPlaceholders + +[![Backers on Open Collective](https://opencollective.com/hgplaceholders/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/hgplaceholders/sponsors/badge.svg)](#sponsors) [![CI Status](http://img.shields.io/travis/HamzaGhazouani/HGPlaceholders.svg?style=flat)](https://travis-ci.org/HamzaGhazouani/HGPlaceholders) +[![Version](https://img.shields.io/cocoapods/v/HGPlaceholders.svg?style=flat)](http://cocoapods.org/pods/HGPlaceholders) +[![License](https://img.shields.io/cocoapods/l/HGPlaceholders.svg?style=flat)](http://cocoapods.org/pods/HGPlaceholders) +[![Language](https://img.shields.io/badge/language-Swift-orange.svg?style=flat)]() +[![Supports](https://img.shields.io/badge/supports-CocoaPods%20%7C%20Carthage-green.svg?style=flat)]() +[![Platform](https://img.shields.io/cocoapods/p/HGPlaceholders.svg?style=flat)](http://cocoapods.org/pods/HGPlaceholders) +
+ +[![Twitter: @GhazouaniHamza](https://img.shields.io/badge/contact-@GhazouaniHamza-blue.svg?style=flat)](https://twitter.com/GhazouaniHamza) +[![codebeat badge](https://codebeat.co/badges/c706606b-c02a-4000-af85-6cebf23c5538)](https://codebeat.co/projects/github-com-hamzaghazouani-hgplaceholders-master) +[![Documentation](https://img.shields.io/cocoapods/metrics/doc-percent/HGPlaceholders.svg)](http://cocoadocs.org/docsets/HGPlaceholders/) +[![Readme Score](http://readme-score-api.herokuapp.com/score.svg?url=https://github.com/hamzaghazouani/hgplaceholders/)](http://clayallsopp.github.io/readme-score?url=https://github.com/hamzaghazouani/hgplaceholders) + +## Example + +![](/Screenshots/default.gif) ![](/Screenshots/custom.gif) + +To run the example project, clone the repo, and run `pod install` from the Example directory first. + +## Requirements +- iOS 8.0+ +- Xcode 9.2 + + +## You also may like + +* **[HGCircularSlider](https://github.com/HamzaGhazouani/HGCircularSlider)** - A custom reusable circular slider control for iOS application. +* **[HGRippleRadarView](https://github.com/HamzaGhazouani/HGRippleRadarView)** - A beautiful radar view to show nearby users with ripple animation, fully customizable + +## Installation + +HGPlaceholders is available through [CocoaPods](http://cocoapods.org). To install +it, simply add the following line to your Podfile: + +```ruby +pod 'HGPlaceholders' +``` + +HGPlaceholders is also available through [Carthage](https://github.com/Carthage/Carthage). To install +it, simply add the following line to your Cartfile: + +``` ruby +github "HamzaGhazouani/HGPlaceholders" +``` + +## Usage + +1. Inherit your UITableView class from TableView Or inherit UICollectionView from CollectionView +2. Call the placeholder to show + +* `tableView.showLoadingPlaceholder()` or `collectionView.showLoadingPlaceholder()` +* `tableView.showNoResultsPlaceholder()` or `collectionView.showNoResultsPlaceholder()` +* `tableView.showErrorPlaceholder()` or `collectionView.showErrorPlaceholder()` +* `tableView.showNoConnectionPlaceholder()` or `collectionView.showNoConnectionPlaceholder()` + + +## Customization + +If you want to change only images, just set them in your asset with this names (the framework check firstly in the main bundle): + +* loading : "hg_default-loading" +* no_connection : "hg_default-no_connection" +* no_results : "hg_default-no_results" +* error : "hg_default-error" + + + +The framework contains different defaults placeholders: + +* Basic : + +`tableView.placeholdersProvider = .basic` or `collectionView.placeholdersProvider = .basic` + +* Default : + +`tableView.placeholdersProvider = .default` or `collectionView.placeholdersProvider = .default` + +* Default2 : + +`tableView.placeholdersProvider = .default2` or `collectionView.placeholdersProvider = .default2` + + +* Hallowen : + +`tableView.placeholdersProvider = .halloween` or `collectionView.placeholdersProvider = .halloween` // for fun :)` + +If you want to change the default palceholders for all table views in your project: + +```swift +class ProjectNameTableView: TableView { + + override func customSetup() { + placeholdersProvider = .basic + } +} +``` + +```swift +class ProjectNameCollectionView: CollectionView { + + override func customSetup() { + placeholdersProvider = .basic + } +} +``` + +You can also add new placeholders fully customizable, you should keep in mind that the view will take table view frame, and placeholder can have only one action, please check the example project + +### Creating a new theme from scratch + +```swift +static var summer: PlaceholdersProvider { + + var commonStyle = PlaceholderStyle() + commonStyle.backgroundColor = UIColor(red: 1.0, green: 236.0/255, blue: 209.0/255.0, alpha: 1.0) + commonStyle.actionBackgroundColor = .black + commonStyle.actionTitleColor = .white + commonStyle.titleColor = .black + commonStyle.isAnimated = false + + commonStyle.titleFont = UIFont(name: "AvenirNextCondensed-HeavyItalic", size: 19)! + commonStyle.subtitleFont = UIFont(name: "AvenirNextCondensed-Italic", size: 19)! + commonStyle.actionTitleFont = UIFont(name: "AvenirNextCondensed-Heavy", size: 19)! + + var loadingStyle = commonStyle + loadingStyle.actionBackgroundColor = .clear + loadingStyle.actionTitleColor = .gray + + var loadingData: PlaceholderData = .loading + loadingData.image = #imageLiteral(resourceName: "summer-hat") + let loading = Placeholder(data: loadingData, style: loadingStyle, key: .loadingKey) + + var errorData: PlaceholderData = .error + errorData.image = #imageLiteral(resourceName: "summer-ball") + let error = Placeholder(data: errorData, style: commonStyle, key: .errorKey) + + var noResultsData: PlaceholderData = .noResults + noResultsData.image = #imageLiteral(resourceName: "summer-cocktail") + let noResults = Placeholder(data: noResultsData, style: commonStyle, key: .noResultsKey) + + var noConnectionData: PlaceholderData = .noConnection + noConnectionData.image = #imageLiteral(resourceName: "summer-beach-slippers") + let noConnection = Placeholder(data: noConnectionData, style: commonStyle, key: .noConnectionKey) + + let placeholdersProvider = PlaceholdersProvider(loading: loading, error: error, noResults: noResults, noConnection: noConnection) + + let xibPlaceholder = Placeholder(cellIdentifier: "CustomPlaceholderCell", key: PlaceholderKey.custom(key: "XIB")) + + placeholdersProvider.add(placeholders: xibPlaceholder) + + return placeholdersProvider + } + ``` + ### Adding a custom placeholder to an existing theme + + ```swift + private static var starWarsPlaceholder: Placeholder { + var starwarsStyle = PlaceholderStyle() + starwarsStyle.backgroundColor = .black + starwarsStyle.actionBackgroundColor = .clear + starwarsStyle.actionTitleColor = .white + starwarsStyle.titleColor = .white + starwarsStyle.isAnimated = false + + var starwarsData = PlaceholderData() + starwarsData.title = NSLocalizedString("\"This is a new day, a\nnew beginning\"", comment: "") + starwarsData.subtitle = NSLocalizedString("Star Wars", comment: "") + starwarsData.image = #imageLiteral(resourceName: "star_wars") + starwarsData.action = NSLocalizedString("OK!", comment: "") + + let placeholder = Placeholder(data: starwarsData, style: starwarsStyle, key: PlaceholderKey.custom(key: "starWars")) + + return placeholder +    } + + let provider = PlaceholdersProvider.summer + provider.addPlaceholders(MyUtilityClass.starWarsPlaceholder) +``` + + +## Documentation +Full documentation is available on [CocoaDocs](http://cocoadocs.org/docsets/HGPlaceholders/).
+You can also install documentation locally using [jazzy](https://github.com/realm/jazzy). + +## Author + +Hamza Ghazouani, hamza.ghazouani@gmail.com + +## License + +HGPlaceholders is available under the MIT license. See the LICENSE file for more info. diff --git a/NoteAppCoreData/Pods/Manifest.lock b/NoteAppCoreData/Pods/Manifest.lock new file mode 100644 index 0000000..e301123 --- /dev/null +++ b/NoteAppCoreData/Pods/Manifest.lock @@ -0,0 +1,16 @@ +PODS: + - HGPlaceholders (0.5.0) + +DEPENDENCIES: + - HGPlaceholders + +SPEC REPOS: + trunk: + - HGPlaceholders + +SPEC CHECKSUMS: + HGPlaceholders: cbf8caed8360fc2ab5e8a4610cce61f76fbd2c37 + +PODFILE CHECKSUM: bcc8d34f3fff747fa13fdca05bd1c45e680ede10 + +COCOAPODS: 1.10.2 diff --git a/NoteAppCoreData/Pods/Pods.xcodeproj/project.pbxproj b/NoteAppCoreData/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..62390b7 --- /dev/null +++ b/NoteAppCoreData/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,691 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 52; + objects = { + +/* Begin PBXBuildFile section */ + 0659DE430B554F7F3C6DE1D84AD9F15C /* PlaceholdersProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = E038201667430D21CE1ABEBEC4E0E2E2 /* PlaceholdersProvider.swift */; }; + 136EBDC1EE14C44073A528832341B5FA /* CellPlaceholding.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2BCF2AFACB9A1F7719CCCC6B84D46D5 /* CellPlaceholding.swift */; }; + 2182F491BEA0C691DD1F92E3BEDA3496 /* TableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFE099E0A3E53894E2004E597DFC1F4A /* TableView.swift */; }; + 2A508BE531F6AF47735628045F75BC42 /* ErrorMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D921A0596436269BDBDBF81B9CCE43 /* ErrorMessage.swift */; }; + 38CE4E02100760E34A59B8EAD2F0D188 /* PlaceholderTableViewCell.xib in Sources */ = {isa = PBXBuildFile; fileRef = E703205993B01422BAB063FC066EEAE7 /* PlaceholderTableViewCell.xib */; }; + 39C9B1477219BFC5593910C0CFAF396A /* PlaceholdersProvider+Defauls.swift in Sources */ = {isa = PBXBuildFile; fileRef = 199E268D6998A51475D8B5C93B89A2A5 /* PlaceholdersProvider+Defauls.swift */; }; + 52A54A2E640D088428DF4D4C395B34E7 /* PlaceholderData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F68B8D7557347566B06656656518377E /* PlaceholderData.swift */; }; + 58BF9CD35AA726C358CD1267087907A4 /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7052CAF12A3CE5770D3368F22EE89FF8 /* Placeholder.swift */; }; + 5924E3A76E82049936A2E77CD6CF57D7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; + 5DB5A7A59BBE56F8C937FF739FA81059 /* Pods-NoteAppCoreData-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2654890327FF8AF210B032E7A8C6DE18 /* Pods-NoteAppCoreData-dummy.m */; }; + 603B256CF111578D910A821222F92D18 /* Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C56787B68B77CD10C570C202E9F8875F /* Reusable.swift */; }; + 7DF868E8808FB6BA8F7C71D2ACF6C221 /* CollectionView+Switcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A4E0EB150CD7A1D326EA03E3CA5D32 /* CollectionView+Switcher.swift */; }; + 8A91BB3699C2AB6B4382E1D80DE7A661 /* CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FE7348E0983BD9A003F60268F800D8C /* CollectionView.swift */; }; + 8AC3BD29EC764C5AA9F816A5694E20A7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; + 9D87C8B662817D730928D0EC47092AF5 /* PlaceholderCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFEF5D53AE1C4E85C6609431ACDD7167 /* PlaceholderCollectionViewCell.swift */; }; + A2C1EE92CAA18098183CC5A8BC0EA636 /* PlaceholderCollectionViewCell.xib in Sources */ = {isa = PBXBuildFile; fileRef = 8A75FADCE042EEACCEC7BC147699487A /* PlaceholderCollectionViewCell.xib */; }; + A9A62C0AA6300562A7DB7E1241D1E01B /* HGPlaceholders-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2536D97212A3567C8C9F913BC6FD74A2 /* HGPlaceholders-dummy.m */; }; + ACA1E19DC0060841135FAF7FEB296CA7 /* HGPlaceholders-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DD34F3E50E6633220D1EC0E0A5C20D01 /* HGPlaceholders-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C727D495DE96825D74985E5AB30128E2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3FB822807855778ADC6F0ED2C9CAE5BC /* Assets.xcassets */; }; + C817C9E2C5516A27D9C883AF13E9B94D /* NibLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0799EC36B4E1C8F6822D070D169167E /* NibLoadable.swift */; }; + CF00498318FF143AD8E7C6F748B6E013 /* PlaceholderDataSourceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A6D15813DEB5ADD80FA83D2B4AFA693 /* PlaceholderDataSourceDelegate.swift */; }; + D1161DA9B13AA8328E53F68F89B8E770 /* PlaceholderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F5302FD320C456B0B926681A21CD220 /* PlaceholderTableViewCell.swift */; }; + D454290C02A0C71316E81E874E4282BC /* PlaceholderStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 956CADFF4897E82092EDF9A20B9E1B6E /* PlaceholderStyle.swift */; }; + D7A7AFC3F1447214711FFDCCE888EBF6 /* PlaceholderKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4049DB0321956812DAA723D0D81E1435 /* PlaceholderKey.swift */; }; + EE2F9043DA85D64FA3678A0BB1A7918C /* TableView+Switcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8CE39368A49BF7B030C3848CE9FC430 /* TableView+Switcher.swift */; }; + FAA733981D61EDA13C7639CB1E69EE38 /* PlaceholdersSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EE6005E6BA92582C7ED8B5972F9F0FC /* PlaceholdersSwitcher.swift */; }; + FFECBD956F37B31ACC0FC0E8DD86EFEF /* Pods-NoteAppCoreData-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D383CE0021FC3E9DC7A2575D64393171 /* Pods-NoteAppCoreData-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + A2E31DAF370832908AAD21539253ED22 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 03360B543985C5710F2B2276AE96E32D; + remoteInfo = HGPlaceholders; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0F5302FD320C456B0B926681A21CD220 /* PlaceholderTableViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlaceholderTableViewCell.swift; path = HGPlaceholders/Classes/Cells/PlaceholderTableViewCell.swift; sourceTree = ""; }; + 0FCBB88A696F904BB2A8AE1F4B2E617E /* Pods-NoteAppCoreData-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-NoteAppCoreData-acknowledgements.plist"; sourceTree = ""; }; + 14A4E0EB150CD7A1D326EA03E3CA5D32 /* CollectionView+Switcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CollectionView+Switcher.swift"; path = "HGPlaceholders/Classes/Views/CollectionView+Switcher.swift"; sourceTree = ""; }; + 14F68465B3967E4A589125820C152E6B /* HGPlaceholders.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HGPlaceholders.release.xcconfig; sourceTree = ""; }; + 199E268D6998A51475D8B5C93B89A2A5 /* PlaceholdersProvider+Defauls.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PlaceholdersProvider+Defauls.swift"; path = "HGPlaceholders/Classes/PlaceholdersProvider/PlaceholdersProvider+Defauls.swift"; sourceTree = ""; }; + 1F57C871304B218DB6EF7CDA2DD87D9E /* Pods-NoteAppCoreData.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-NoteAppCoreData.modulemap"; sourceTree = ""; }; + 2536D97212A3567C8C9F913BC6FD74A2 /* HGPlaceholders-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "HGPlaceholders-dummy.m"; sourceTree = ""; }; + 2654890327FF8AF210B032E7A8C6DE18 /* Pods-NoteAppCoreData-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-NoteAppCoreData-dummy.m"; sourceTree = ""; }; + 298B2D998DDB65B2A6A2C5DF8DDBCA44 /* Pods-NoteAppCoreData.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-NoteAppCoreData.release.xcconfig"; sourceTree = ""; }; + 3A6D15813DEB5ADD80FA83D2B4AFA693 /* PlaceholderDataSourceDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlaceholderDataSourceDelegate.swift; path = HGPlaceholders/Classes/PlaceholdersProvider/PlaceholderDataSourceDelegate.swift; sourceTree = ""; }; + 3FB822807855778ADC6F0ED2C9CAE5BC /* Assets.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = HGPlaceholders/Assets/Assets.xcassets; sourceTree = ""; }; + 4049DB0321956812DAA723D0D81E1435 /* PlaceholderKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlaceholderKey.swift; path = HGPlaceholders/Classes/Placeholder/PlaceholderKey.swift; sourceTree = ""; }; + 4594A4C6BAAC82B81DF97C8D0DD85AE0 /* HGPlaceholders-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "HGPlaceholders-Info.plist"; sourceTree = ""; }; + 55672A420C38E730D866909B6994A04E /* HGPlaceholders.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = HGPlaceholders.modulemap; sourceTree = ""; }; + 656C3C3A340F8BF1895B5FBC8DA97D10 /* Pods-NoteAppCoreData.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-NoteAppCoreData.debug.xcconfig"; sourceTree = ""; }; + 7052CAF12A3CE5770D3368F22EE89FF8 /* Placeholder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Placeholder.swift; path = HGPlaceholders/Classes/Placeholder/Placeholder.swift; sourceTree = ""; }; + 73010CC983E3809BECEE5348DA1BB8C6 /* 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; }; + 76D921A0596436269BDBDBF81B9CCE43 /* ErrorMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ErrorMessage.swift; path = HGPlaceholders/Classes/Placeholder/ErrorMessage.swift; sourceTree = ""; }; + 7B604223056F85288B816938CF316DC4 /* HGPlaceholders-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HGPlaceholders-prefix.pch"; sourceTree = ""; }; + 7EE6005E6BA92582C7ED8B5972F9F0FC /* PlaceholdersSwitcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlaceholdersSwitcher.swift; path = HGPlaceholders/Classes/Protocols/PlaceholdersSwitcher.swift; sourceTree = ""; }; + 87B86DD2F68027645B342BB99E76322C /* Pods-NoteAppCoreData-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-NoteAppCoreData-Info.plist"; sourceTree = ""; }; + 8A27BA767E597199682011096F43EEAC /* Pods_NoteAppCoreData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NoteAppCoreData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8A75FADCE042EEACCEC7BC147699487A /* PlaceholderCollectionViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = PlaceholderCollectionViewCell.xib; path = HGPlaceholders/Classes/Cells/PlaceholderCollectionViewCell.xib; sourceTree = ""; }; + 8FE7348E0983BD9A003F60268F800D8C /* CollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CollectionView.swift; path = HGPlaceholders/Classes/Views/CollectionView.swift; sourceTree = ""; }; + 956CADFF4897E82092EDF9A20B9E1B6E /* PlaceholderStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlaceholderStyle.swift; path = HGPlaceholders/Classes/Placeholder/PlaceholderStyle.swift; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + B32F97B47E62FB6D570A1107C645A18F /* Pods-NoteAppCoreData-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-NoteAppCoreData-acknowledgements.markdown"; sourceTree = ""; }; + C56787B68B77CD10C570C202E9F8875F /* Reusable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reusable.swift; path = HGPlaceholders/Classes/Protocols/Reusable.swift; sourceTree = ""; }; + C66D41B022473C530A466EA7189C15B6 /* HGPlaceholders.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HGPlaceholders.debug.xcconfig; sourceTree = ""; }; + CE496D14DA0EA98EFF05A07F4C8E64A5 /* HGPlaceholders.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HGPlaceholders.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D2BCF2AFACB9A1F7719CCCC6B84D46D5 /* CellPlaceholding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CellPlaceholding.swift; path = HGPlaceholders/Classes/Protocols/CellPlaceholding.swift; sourceTree = ""; }; + D383CE0021FC3E9DC7A2575D64393171 /* Pods-NoteAppCoreData-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-NoteAppCoreData-umbrella.h"; sourceTree = ""; }; + D8CE39368A49BF7B030C3848CE9FC430 /* TableView+Switcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TableView+Switcher.swift"; path = "HGPlaceholders/Classes/Views/TableView+Switcher.swift"; sourceTree = ""; }; + DD34F3E50E6633220D1EC0E0A5C20D01 /* HGPlaceholders-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HGPlaceholders-umbrella.h"; sourceTree = ""; }; + DFEF5D53AE1C4E85C6609431ACDD7167 /* PlaceholderCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlaceholderCollectionViewCell.swift; path = HGPlaceholders/Classes/Cells/PlaceholderCollectionViewCell.swift; sourceTree = ""; }; + E038201667430D21CE1ABEBEC4E0E2E2 /* PlaceholdersProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlaceholdersProvider.swift; path = HGPlaceholders/Classes/PlaceholdersProvider/PlaceholdersProvider.swift; sourceTree = ""; }; + E0F24EF5FE6E300A28C046851142012F /* Pods-NoteAppCoreData-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-NoteAppCoreData-frameworks.sh"; sourceTree = ""; }; + E703205993B01422BAB063FC066EEAE7 /* PlaceholderTableViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = PlaceholderTableViewCell.xib; path = HGPlaceholders/Classes/Cells/PlaceholderTableViewCell.xib; sourceTree = ""; }; + F0799EC36B4E1C8F6822D070D169167E /* NibLoadable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NibLoadable.swift; path = HGPlaceholders/Classes/Protocols/NibLoadable.swift; sourceTree = ""; }; + F68B8D7557347566B06656656518377E /* PlaceholderData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlaceholderData.swift; path = HGPlaceholders/Classes/Placeholder/PlaceholderData.swift; sourceTree = ""; }; + FFE099E0A3E53894E2004E597DFC1F4A /* TableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TableView.swift; path = HGPlaceholders/Classes/Views/TableView.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 2AD151845609BDD4FF331DC04220D090 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5924E3A76E82049936A2E77CD6CF57D7 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 43EDEAD5E36FB5D476CD30AE67B2AFF4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8AC3BD29EC764C5AA9F816A5694E20A7 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 197537F7E2A36B6791BCE5BFEA9432D0 /* Pods */ = { + isa = PBXGroup; + children = ( + 58FB5FB638BE93556C8B3EF0257F0F97 /* HGPlaceholders */, + ); + name = Pods; + sourceTree = ""; + }; + 1AF43DEDEC995ECE6FA1EEF6F2FD5033 /* Products */ = { + isa = PBXGroup; + children = ( + CE496D14DA0EA98EFF05A07F4C8E64A5 /* HGPlaceholders.framework */, + 8A27BA767E597199682011096F43EEAC /* Pods_NoteAppCoreData.framework */, + ); + name = Products; + sourceTree = ""; + }; + 44FFB3B9F2B96ACB6A04ECFB6DB5C9B4 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + C225186F7F6376823B6DB436BBE8FB18 /* Pods-NoteAppCoreData */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 578452D2E740E91742655AC8F1636D1F /* iOS */ = { + isa = PBXGroup; + children = ( + 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 58FB5FB638BE93556C8B3EF0257F0F97 /* HGPlaceholders */ = { + isa = PBXGroup; + children = ( + D2BCF2AFACB9A1F7719CCCC6B84D46D5 /* CellPlaceholding.swift */, + 8FE7348E0983BD9A003F60268F800D8C /* CollectionView.swift */, + 14A4E0EB150CD7A1D326EA03E3CA5D32 /* CollectionView+Switcher.swift */, + 76D921A0596436269BDBDBF81B9CCE43 /* ErrorMessage.swift */, + F0799EC36B4E1C8F6822D070D169167E /* NibLoadable.swift */, + 7052CAF12A3CE5770D3368F22EE89FF8 /* Placeholder.swift */, + DFEF5D53AE1C4E85C6609431ACDD7167 /* PlaceholderCollectionViewCell.swift */, + 8A75FADCE042EEACCEC7BC147699487A /* PlaceholderCollectionViewCell.xib */, + F68B8D7557347566B06656656518377E /* PlaceholderData.swift */, + 3A6D15813DEB5ADD80FA83D2B4AFA693 /* PlaceholderDataSourceDelegate.swift */, + 4049DB0321956812DAA723D0D81E1435 /* PlaceholderKey.swift */, + E038201667430D21CE1ABEBEC4E0E2E2 /* PlaceholdersProvider.swift */, + 199E268D6998A51475D8B5C93B89A2A5 /* PlaceholdersProvider+Defauls.swift */, + 7EE6005E6BA92582C7ED8B5972F9F0FC /* PlaceholdersSwitcher.swift */, + 956CADFF4897E82092EDF9A20B9E1B6E /* PlaceholderStyle.swift */, + 0F5302FD320C456B0B926681A21CD220 /* PlaceholderTableViewCell.swift */, + E703205993B01422BAB063FC066EEAE7 /* PlaceholderTableViewCell.xib */, + C56787B68B77CD10C570C202E9F8875F /* Reusable.swift */, + FFE099E0A3E53894E2004E597DFC1F4A /* TableView.swift */, + D8CE39368A49BF7B030C3848CE9FC430 /* TableView+Switcher.swift */, + 9253072F8283E3BDC39F560D7D47D897 /* Resources */, + ADBE1485A0D7FB83FC26E57AA2DB5F07 /* Support Files */, + ); + path = HGPlaceholders; + sourceTree = ""; + }; + 9253072F8283E3BDC39F560D7D47D897 /* Resources */ = { + isa = PBXGroup; + children = ( + 3FB822807855778ADC6F0ED2C9CAE5BC /* Assets.xcassets */, + ); + name = Resources; + sourceTree = ""; + }; + ADBE1485A0D7FB83FC26E57AA2DB5F07 /* Support Files */ = { + isa = PBXGroup; + children = ( + 55672A420C38E730D866909B6994A04E /* HGPlaceholders.modulemap */, + 2536D97212A3567C8C9F913BC6FD74A2 /* HGPlaceholders-dummy.m */, + 4594A4C6BAAC82B81DF97C8D0DD85AE0 /* HGPlaceholders-Info.plist */, + 7B604223056F85288B816938CF316DC4 /* HGPlaceholders-prefix.pch */, + DD34F3E50E6633220D1EC0E0A5C20D01 /* HGPlaceholders-umbrella.h */, + C66D41B022473C530A466EA7189C15B6 /* HGPlaceholders.debug.xcconfig */, + 14F68465B3967E4A589125820C152E6B /* HGPlaceholders.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/HGPlaceholders"; + sourceTree = ""; + }; + C225186F7F6376823B6DB436BBE8FB18 /* Pods-NoteAppCoreData */ = { + isa = PBXGroup; + children = ( + 1F57C871304B218DB6EF7CDA2DD87D9E /* Pods-NoteAppCoreData.modulemap */, + B32F97B47E62FB6D570A1107C645A18F /* Pods-NoteAppCoreData-acknowledgements.markdown */, + 0FCBB88A696F904BB2A8AE1F4B2E617E /* Pods-NoteAppCoreData-acknowledgements.plist */, + 2654890327FF8AF210B032E7A8C6DE18 /* Pods-NoteAppCoreData-dummy.m */, + E0F24EF5FE6E300A28C046851142012F /* Pods-NoteAppCoreData-frameworks.sh */, + 87B86DD2F68027645B342BB99E76322C /* Pods-NoteAppCoreData-Info.plist */, + D383CE0021FC3E9DC7A2575D64393171 /* Pods-NoteAppCoreData-umbrella.h */, + 656C3C3A340F8BF1895B5FBC8DA97D10 /* Pods-NoteAppCoreData.debug.xcconfig */, + 298B2D998DDB65B2A6A2C5DF8DDBCA44 /* Pods-NoteAppCoreData.release.xcconfig */, + ); + name = "Pods-NoteAppCoreData"; + path = "Target Support Files/Pods-NoteAppCoreData"; + sourceTree = ""; + }; + CF1408CF629C7361332E53B88F7BD30C = { + isa = PBXGroup; + children = ( + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, + 197537F7E2A36B6791BCE5BFEA9432D0 /* Pods */, + 1AF43DEDEC995ECE6FA1EEF6F2FD5033 /* Products */, + 44FFB3B9F2B96ACB6A04ECFB6DB5C9B4 /* Targets Support Files */, + ); + sourceTree = ""; + }; + D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 578452D2E740E91742655AC8F1636D1F /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 7BA2D2662D0366E1194A754BBA83FD92 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + FFECBD956F37B31ACC0FC0E8DD86EFEF /* Pods-NoteAppCoreData-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E0D209685A97917F8DD6BC025A9A651F /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ACA1E19DC0060841135FAF7FEB296CA7 /* HGPlaceholders-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 03360B543985C5710F2B2276AE96E32D /* HGPlaceholders */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7A069CF4C9356F5B83948946EF57F5E7 /* Build configuration list for PBXNativeTarget "HGPlaceholders" */; + buildPhases = ( + E0D209685A97917F8DD6BC025A9A651F /* Headers */, + 8F6E5404E17C3EFEE5FDF42F327AA393 /* Sources */, + 43EDEAD5E36FB5D476CD30AE67B2AFF4 /* Frameworks */, + C31707157A98E9DF4F959AC39E3CFA3F /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = HGPlaceholders; + productName = HGPlaceholders; + productReference = CE496D14DA0EA98EFF05A07F4C8E64A5 /* HGPlaceholders.framework */; + productType = "com.apple.product-type.framework"; + }; + F0742AB8B8F0EB319E085E6B21A87BA7 /* Pods-NoteAppCoreData */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2D961BBA8986B1B1BBF02899248AC82E /* Build configuration list for PBXNativeTarget "Pods-NoteAppCoreData" */; + buildPhases = ( + 7BA2D2662D0366E1194A754BBA83FD92 /* Headers */, + 4CCA92C978D6BF20E83E68D9F3A8E226 /* Sources */, + 2AD151845609BDD4FF331DC04220D090 /* Frameworks */, + 0217505957A352F7BB90CB26EC7B0734 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 0679C2827FF315371FEDE49496CE52C6 /* PBXTargetDependency */, + ); + name = "Pods-NoteAppCoreData"; + productName = "Pods-NoteAppCoreData"; + productReference = 8A27BA767E597199682011096F43EEAC /* Pods_NoteAppCoreData.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1240; + LastUpgradeCheck = 1250; + }; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = 1AF43DEDEC995ECE6FA1EEF6F2FD5033 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 03360B543985C5710F2B2276AE96E32D /* HGPlaceholders */, + F0742AB8B8F0EB319E085E6B21A87BA7 /* Pods-NoteAppCoreData */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 0217505957A352F7BB90CB26EC7B0734 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C31707157A98E9DF4F959AC39E3CFA3F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C727D495DE96825D74985E5AB30128E2 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 4CCA92C978D6BF20E83E68D9F3A8E226 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5DB5A7A59BBE56F8C937FF739FA81059 /* Pods-NoteAppCoreData-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8F6E5404E17C3EFEE5FDF42F327AA393 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 136EBDC1EE14C44073A528832341B5FA /* CellPlaceholding.swift in Sources */, + 7DF868E8808FB6BA8F7C71D2ACF6C221 /* CollectionView+Switcher.swift in Sources */, + 8A91BB3699C2AB6B4382E1D80DE7A661 /* CollectionView.swift in Sources */, + 2A508BE531F6AF47735628045F75BC42 /* ErrorMessage.swift in Sources */, + A9A62C0AA6300562A7DB7E1241D1E01B /* HGPlaceholders-dummy.m in Sources */, + C817C9E2C5516A27D9C883AF13E9B94D /* NibLoadable.swift in Sources */, + 58BF9CD35AA726C358CD1267087907A4 /* Placeholder.swift in Sources */, + 9D87C8B662817D730928D0EC47092AF5 /* PlaceholderCollectionViewCell.swift in Sources */, + A2C1EE92CAA18098183CC5A8BC0EA636 /* PlaceholderCollectionViewCell.xib in Sources */, + 52A54A2E640D088428DF4D4C395B34E7 /* PlaceholderData.swift in Sources */, + CF00498318FF143AD8E7C6F748B6E013 /* PlaceholderDataSourceDelegate.swift in Sources */, + D7A7AFC3F1447214711FFDCCE888EBF6 /* PlaceholderKey.swift in Sources */, + 39C9B1477219BFC5593910C0CFAF396A /* PlaceholdersProvider+Defauls.swift in Sources */, + 0659DE430B554F7F3C6DE1D84AD9F15C /* PlaceholdersProvider.swift in Sources */, + FAA733981D61EDA13C7639CB1E69EE38 /* PlaceholdersSwitcher.swift in Sources */, + D454290C02A0C71316E81E874E4282BC /* PlaceholderStyle.swift in Sources */, + D1161DA9B13AA8328E53F68F89B8E770 /* PlaceholderTableViewCell.swift in Sources */, + 38CE4E02100760E34A59B8EAD2F0D188 /* PlaceholderTableViewCell.xib in Sources */, + 603B256CF111578D910A821222F92D18 /* Reusable.swift in Sources */, + EE2F9043DA85D64FA3678A0BB1A7918C /* TableView+Switcher.swift in Sources */, + 2182F491BEA0C691DD1F92E3BEDA3496 /* TableView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 0679C2827FF315371FEDE49496CE52C6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = HGPlaceholders; + target = 03360B543985C5710F2B2276AE96E32D /* HGPlaceholders */; + targetProxy = A2E31DAF370832908AAD21539253ED22 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 25AD9454612BF454A1E3DC4CD4FA8C6D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 47FC04B15E7CF6023B1CF85D3190315F /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 656C3C3A340F8BF1895B5FBC8DA97D10 /* Pods-NoteAppCoreData.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 5B397A081BC8BDA2CD44AB2867876446 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 14F68465B3967E4A589125820C152E6B /* HGPlaceholders.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/HGPlaceholders/HGPlaceholders-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/HGPlaceholders/HGPlaceholders-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/HGPlaceholders/HGPlaceholders.modulemap"; + PRODUCT_MODULE_NAME = HGPlaceholders; + PRODUCT_NAME = HGPlaceholders; + 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; + }; + 89CF5CB7B17DF7313C69001E054E66A2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C66D41B022473C530A466EA7189C15B6 /* HGPlaceholders.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/HGPlaceholders/HGPlaceholders-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/HGPlaceholders/HGPlaceholders-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/HGPlaceholders/HGPlaceholders.modulemap"; + PRODUCT_MODULE_NAME = HGPlaceholders; + PRODUCT_NAME = HGPlaceholders; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + CA547D2C7E9A8A153DC2B27FBE00B112 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + E90AD98C891C20EB10E34FEA7E193641 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 298B2D998DDB65B2A6A2C5DF8DDBCA44 /* Pods-NoteAppCoreData.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2D961BBA8986B1B1BBF02899248AC82E /* Build configuration list for PBXNativeTarget "Pods-NoteAppCoreData" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 47FC04B15E7CF6023B1CF85D3190315F /* Debug */, + E90AD98C891C20EB10E34FEA7E193641 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 25AD9454612BF454A1E3DC4CD4FA8C6D /* Debug */, + CA547D2C7E9A8A153DC2B27FBE00B112 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7A069CF4C9356F5B83948946EF57F5E7 /* Build configuration list for PBXNativeTarget "HGPlaceholders" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 89CF5CB7B17DF7313C69001E054E66A2 /* Debug */, + 5B397A081BC8BDA2CD44AB2867876446 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; +} diff --git a/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/ada.xcuserdatad/xcschemes/HGPlaceholders.xcscheme b/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/ada.xcuserdatad/xcschemes/HGPlaceholders.xcscheme new file mode 100644 index 0000000..15bd5bd --- /dev/null +++ b/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/ada.xcuserdatad/xcschemes/HGPlaceholders.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/ada.xcuserdatad/xcschemes/Pods-NoteAppCoreData.xcscheme b/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/ada.xcuserdatad/xcschemes/Pods-NoteAppCoreData.xcscheme new file mode 100644 index 0000000..148b81c --- /dev/null +++ b/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/ada.xcuserdatad/xcschemes/Pods-NoteAppCoreData.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/ada.xcuserdatad/xcschemes/xcschememanagement.plist b/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/ada.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..95c4d5e --- /dev/null +++ b/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/ada.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,25 @@ + + + + + SchemeUserState + + HGPlaceholders.xcscheme + + isShown + + orderHint + 0 + + Pods-NoteAppCoreData.xcscheme + + isShown + + orderHint + 1 + + + SuppressBuildableAutocreation + + + diff --git a/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/lin.xcuserdatad/xcschemes/HGPlaceholders.xcscheme b/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/lin.xcuserdatad/xcschemes/HGPlaceholders.xcscheme new file mode 100644 index 0000000..15bd5bd --- /dev/null +++ b/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/lin.xcuserdatad/xcschemes/HGPlaceholders.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/lin.xcuserdatad/xcschemes/Pods-NoteAppCoreData.xcscheme b/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/lin.xcuserdatad/xcschemes/Pods-NoteAppCoreData.xcscheme new file mode 100644 index 0000000..148b81c --- /dev/null +++ b/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/lin.xcuserdatad/xcschemes/Pods-NoteAppCoreData.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/lin.xcuserdatad/xcschemes/xcschememanagement.plist b/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/lin.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..95c4d5e --- /dev/null +++ b/NoteAppCoreData/Pods/Pods.xcodeproj/xcuserdata/lin.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,25 @@ + + + + + SchemeUserState + + HGPlaceholders.xcscheme + + isShown + + orderHint + 0 + + Pods-NoteAppCoreData.xcscheme + + isShown + + orderHint + 1 + + + SuppressBuildableAutocreation + + + diff --git a/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders-Info.plist b/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders-Info.plist new file mode 100644 index 0000000..324eeb2 --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.5.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders-dummy.m b/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders-dummy.m new file mode 100644 index 0000000..cd4ab6f --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_HGPlaceholders : NSObject +@end +@implementation PodsDummy_HGPlaceholders +@end diff --git a/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders-prefix.pch b/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders-umbrella.h b/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders-umbrella.h new file mode 100644 index 0000000..537b187 --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double HGPlaceholdersVersionNumber; +FOUNDATION_EXPORT const unsigned char HGPlaceholdersVersionString[]; + diff --git a/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders.debug.xcconfig b/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders.debug.xcconfig new file mode 100644 index 0000000..abf8c76 --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders.debug.xcconfig @@ -0,0 +1,12 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/HGPlaceholders +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/HGPlaceholders +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/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders.modulemap b/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders.modulemap new file mode 100644 index 0000000..9a7f504 --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders.modulemap @@ -0,0 +1,6 @@ +framework module HGPlaceholders { + umbrella header "HGPlaceholders-umbrella.h" + + export * + module * { export * } +} diff --git a/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders.release.xcconfig b/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders.release.xcconfig new file mode 100644 index 0000000..abf8c76 --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/HGPlaceholders/HGPlaceholders.release.xcconfig @@ -0,0 +1,12 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/HGPlaceholders +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/HGPlaceholders +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/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-Info.plist b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-acknowledgements.markdown b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-acknowledgements.markdown new file mode 100644 index 0000000..00eb87c --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-acknowledgements.markdown @@ -0,0 +1,26 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## HGPlaceholders + +Copyright (c) 2017 HamzaGhazouani + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Generated by CocoaPods - https://cocoapods.org diff --git a/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-acknowledgements.plist b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-acknowledgements.plist new file mode 100644 index 0000000..36db9fa --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-acknowledgements.plist @@ -0,0 +1,58 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2017 HamzaGhazouani <hamza.ghazouani@gmail.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + License + MIT + Title + HGPlaceholders + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-dummy.m b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-dummy.m new file mode 100644 index 0000000..584c9c9 --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_NoteAppCoreData : NSObject +@end +@implementation PodsDummy_Pods_NoteAppCoreData +@end diff --git a/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks-Debug-input-files.xcfilelist b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks-Debug-input-files.xcfilelist new file mode 100644 index 0000000..d9bf978 --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks-Debug-input-files.xcfilelist @@ -0,0 +1,2 @@ +${PODS_ROOT}/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks.sh +${BUILT_PRODUCTS_DIR}/HGPlaceholders/HGPlaceholders.framework \ No newline at end of file diff --git a/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks-Debug-output-files.xcfilelist b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks-Debug-output-files.xcfilelist new file mode 100644 index 0000000..8aefadd --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks-Debug-output-files.xcfilelist @@ -0,0 +1 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/HGPlaceholders.framework \ No newline at end of file diff --git a/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks-Release-input-files.xcfilelist b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks-Release-input-files.xcfilelist new file mode 100644 index 0000000..d9bf978 --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks-Release-input-files.xcfilelist @@ -0,0 +1,2 @@ +${PODS_ROOT}/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks.sh +${BUILT_PRODUCTS_DIR}/HGPlaceholders/HGPlaceholders.framework \ No newline at end of file diff --git a/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks-Release-output-files.xcfilelist b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks-Release-output-files.xcfilelist new file mode 100644 index 0000000..8aefadd --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks-Release-output-files.xcfilelist @@ -0,0 +1 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/HGPlaceholders.framework \ No newline at end of file diff --git a/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks.sh b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks.sh new file mode 100755 index 0000000..55c04b6 --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-frameworks.sh @@ -0,0 +1,185 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +BCSYMBOLMAP_DIR="BCSymbolMaps" + + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then + # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied + find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do + echo "Installing $f" + install_bcsymbolmap "$f" "$destination" + rm "$f" + done + rmdir "${source}/${BCSYMBOLMAP_DIR}" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + warn_missing_arch=${2:-true} + if [ -r "$source" ]; then + # Copy the dSYM into the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .dSYM "$source")" + binary_name="$(ls "$source/Contents/Resources/DWARF")" + binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" + + # Strip invalid architectures from the dSYM. + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" "$warn_missing_arch" + fi + if [[ $STRIP_BINARY_RETVAL == 0 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" + fi + fi +} + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + warn_missing_arch=${2:-true} + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + if [[ "$warn_missing_arch" == "true" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + fi + STRIP_BINARY_RETVAL=1 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=0 +} + +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/HGPlaceholders/HGPlaceholders.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/HGPlaceholders/HGPlaceholders.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-umbrella.h b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-umbrella.h new file mode 100644 index 0000000..f4c38cc --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_NoteAppCoreDataVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_NoteAppCoreDataVersionString[]; + diff --git a/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData.debug.xcconfig b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData.debug.xcconfig new file mode 100644 index 0000000..cd56fdc --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData.debug.xcconfig @@ -0,0 +1,14 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/HGPlaceholders" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/HGPlaceholders/HGPlaceholders.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "HGPlaceholders" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData.modulemap b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData.modulemap new file mode 100644 index 0000000..bbb3887 --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData.modulemap @@ -0,0 +1,6 @@ +framework module Pods_NoteAppCoreData { + umbrella header "Pods-NoteAppCoreData-umbrella.h" + + export * + module * { export * } +} diff --git a/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData.release.xcconfig b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData.release.xcconfig new file mode 100644 index 0000000..cd56fdc --- /dev/null +++ b/NoteAppCoreData/Pods/Target Support Files/Pods-NoteAppCoreData/Pods-NoteAppCoreData.release.xcconfig @@ -0,0 +1,14 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/HGPlaceholders" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/HGPlaceholders/HGPlaceholders.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "HGPlaceholders" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES