├── Asset ├── Screenshot1.png ├── art.png └── settings.png ├── ILSCloudKitExample ├── ILSCloudKitExample.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── hiran.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── hiran.xcuserdatad │ │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes │ │ └── xcschememanagement.plist └── ILSCloudKitExample │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-57x57@1x.png │ │ ├── Icon-App-57x57@2x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-72x72@1x.png │ │ ├── Icon-App-72x72@2x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ ├── Icon-App-83.5x83.5@2x.png │ │ ├── Icon-Small-50x50@1x.png │ │ ├── Icon-Small-50x50@2x.png │ │ └── ItunesArtwork@2x.png │ ├── Contents.json │ ├── bg-1.imageset │ │ ├── Contents.json │ │ └── bg.png │ ├── bg.imageset │ │ ├── Contents.json │ │ ├── bg.png │ │ ├── bg@2x.png │ │ └── bg@3x.png │ ├── button.imageset │ │ ├── Contents.json │ │ ├── c.png │ │ ├── c@2x.png │ │ └── c@3x.png │ ├── cloud.imageset │ │ ├── Contents.json │ │ ├── cloud.png │ │ ├── cloud@2x.png │ │ └── cloud@3x.png │ ├── email.imageset │ │ ├── Contents.json │ │ ├── d.png │ │ ├── d@2x.png │ │ └── d@3x.png │ ├── email_textfield.imageset │ │ ├── Contents.json │ │ ├── email.png │ │ ├── email@2x.png │ │ └── email@3x.png │ ├── line.imageset │ │ ├── Contents.json │ │ ├── line2.png │ │ ├── line2@2x.png │ │ └── line2@3x.png │ ├── pass_textfield.imageset │ │ ├── Contents.json │ │ ├── pass.png │ │ ├── pass@2x.png │ │ └── pass@3x.png │ ├── password.imageset │ │ ├── Contents.json │ │ ├── f.png │ │ ├── f@2x.png │ │ └── f@3x.png │ ├── placeholder.imageset │ │ ├── Contents.json │ │ ├── a.png │ │ ├── a@2x.png │ │ └── a@3x.png │ ├── splash.imageset │ │ ├── Contents.json │ │ └── ils cloud splash.png │ ├── user_textfield.imageset │ │ ├── Contents.json │ │ ├── user.png │ │ ├── user@2x.png │ │ └── user@3x.png │ └── username.imageset │ │ ├── Contents.json │ │ ├── e.png │ │ ├── e@2x.png │ │ └── e@3x.png │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── ILSCloudKitExample.entitlements │ ├── ILSCloudKitManager │ ├── ILSCloudKitManager.h │ └── ILSCloudKitManager.m │ ├── Info.plist │ ├── Managers │ ├── CloudKitManager.h │ └── CloudKitManager.m │ ├── Student Model │ ├── Student.h │ └── Student.m │ ├── StudentTableViewCell │ ├── StudentTableViewCell.h │ └── StudentTableViewCell.m │ ├── ViewControllers │ ├── DetailViewController.h │ ├── DetailViewController.m │ ├── ViewController.h │ └── ViewController.m │ └── main.m ├── LICENSE └── README.md /Asset/Screenshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/Asset/Screenshot1.png -------------------------------------------------------------------------------- /Asset/art.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/Asset/art.png -------------------------------------------------------------------------------- /Asset/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/Asset/settings.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 92144EB0202C3FEE00E7D90C /* ILSCloudKitManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 92144EAF202C3FEE00E7D90C /* ILSCloudKitManager.m */; }; 11 | 92144EB4202C407900E7D90C /* StudentTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 92144EB3202C407900E7D90C /* StudentTableViewCell.m */; }; 12 | 92144EB8202C409200E7D90C /* Student.m in Sources */ = {isa = PBXBuildFile; fileRef = 92144EB7202C409200E7D90C /* Student.m */; }; 13 | 92144EBE202C40AB00E7D90C /* DetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 92144EBB202C40AB00E7D90C /* DetailViewController.m */; }; 14 | 92144EBF202C40AB00E7D90C /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 92144EBD202C40AB00E7D90C /* ViewController.m */; }; 15 | 9228686D20297DB500C59FDF /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9228686C20297DB500C59FDF /* AppDelegate.m */; }; 16 | 9228687320297DB500C59FDF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9228687120297DB500C59FDF /* Main.storyboard */; }; 17 | 9228687520297DB500C59FDF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9228687420297DB500C59FDF /* Assets.xcassets */; }; 18 | 9228687820297DB500C59FDF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9228687620297DB500C59FDF /* LaunchScreen.storyboard */; }; 19 | 9228687B20297DB600C59FDF /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 9228687A20297DB600C59FDF /* main.m */; }; 20 | 9228688420297DD800C59FDF /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9228688320297DD800C59FDF /* CloudKit.framework */; }; 21 | /* End PBXBuildFile section */ 22 | 23 | /* Begin PBXFileReference section */ 24 | 92144EAE202C3FEE00E7D90C /* ILSCloudKitManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ILSCloudKitManager.h; sourceTree = ""; }; 25 | 92144EAF202C3FEE00E7D90C /* ILSCloudKitManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ILSCloudKitManager.m; sourceTree = ""; }; 26 | 92144EB2202C407900E7D90C /* StudentTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StudentTableViewCell.h; sourceTree = ""; }; 27 | 92144EB3202C407900E7D90C /* StudentTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StudentTableViewCell.m; sourceTree = ""; }; 28 | 92144EB6202C409200E7D90C /* Student.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Student.h; sourceTree = ""; }; 29 | 92144EB7202C409200E7D90C /* Student.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Student.m; sourceTree = ""; }; 30 | 92144EBA202C40AB00E7D90C /* DetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DetailViewController.h; sourceTree = ""; }; 31 | 92144EBB202C40AB00E7D90C /* DetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DetailViewController.m; sourceTree = ""; }; 32 | 92144EBC202C40AB00E7D90C /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 33 | 92144EBD202C40AB00E7D90C /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 34 | 9228686820297DB500C59FDF /* ILSCloudKitExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ILSCloudKitExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | 9228686B20297DB500C59FDF /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 36 | 9228686C20297DB500C59FDF /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 37 | 9228687220297DB500C59FDF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 38 | 9228687420297DB500C59FDF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 39 | 9228687720297DB500C59FDF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 40 | 9228687920297DB600C59FDF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 41 | 9228687A20297DB600C59FDF /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 42 | 9228688120297DD200C59FDF /* ILSCloudKitExample.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ILSCloudKitExample.entitlements; sourceTree = ""; }; 43 | 9228688320297DD800C59FDF /* CloudKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CloudKit.framework; path = System/Library/Frameworks/CloudKit.framework; sourceTree = SDKROOT; }; 44 | /* End PBXFileReference section */ 45 | 46 | /* Begin PBXFrameworksBuildPhase section */ 47 | 9228686520297DB500C59FDF /* Frameworks */ = { 48 | isa = PBXFrameworksBuildPhase; 49 | buildActionMask = 2147483647; 50 | files = ( 51 | 9228688420297DD800C59FDF /* CloudKit.framework in Frameworks */, 52 | ); 53 | runOnlyForDeploymentPostprocessing = 0; 54 | }; 55 | /* End PBXFrameworksBuildPhase section */ 56 | 57 | /* Begin PBXGroup section */ 58 | 92144EAD202C3FEE00E7D90C /* ILSCloudKitManager */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | 92144EAE202C3FEE00E7D90C /* ILSCloudKitManager.h */, 62 | 92144EAF202C3FEE00E7D90C /* ILSCloudKitManager.m */, 63 | ); 64 | path = ILSCloudKitManager; 65 | sourceTree = ""; 66 | }; 67 | 92144EB1202C407900E7D90C /* StudentTableViewCell */ = { 68 | isa = PBXGroup; 69 | children = ( 70 | 92144EB2202C407900E7D90C /* StudentTableViewCell.h */, 71 | 92144EB3202C407900E7D90C /* StudentTableViewCell.m */, 72 | ); 73 | path = StudentTableViewCell; 74 | sourceTree = ""; 75 | }; 76 | 92144EB5202C409200E7D90C /* Student Model */ = { 77 | isa = PBXGroup; 78 | children = ( 79 | 92144EB6202C409200E7D90C /* Student.h */, 80 | 92144EB7202C409200E7D90C /* Student.m */, 81 | ); 82 | path = "Student Model"; 83 | sourceTree = ""; 84 | }; 85 | 92144EB9202C40AB00E7D90C /* ViewControllers */ = { 86 | isa = PBXGroup; 87 | children = ( 88 | 92144EBA202C40AB00E7D90C /* DetailViewController.h */, 89 | 92144EBB202C40AB00E7D90C /* DetailViewController.m */, 90 | 92144EBC202C40AB00E7D90C /* ViewController.h */, 91 | 92144EBD202C40AB00E7D90C /* ViewController.m */, 92 | ); 93 | path = ViewControllers; 94 | sourceTree = ""; 95 | }; 96 | 9228685F20297DB500C59FDF = { 97 | isa = PBXGroup; 98 | children = ( 99 | 9228686A20297DB500C59FDF /* ILSCloudKitExample */, 100 | 9228686920297DB500C59FDF /* Products */, 101 | 9228688220297DD800C59FDF /* Frameworks */, 102 | ); 103 | sourceTree = ""; 104 | }; 105 | 9228686920297DB500C59FDF /* Products */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | 9228686820297DB500C59FDF /* ILSCloudKitExample.app */, 109 | ); 110 | name = Products; 111 | sourceTree = ""; 112 | }; 113 | 9228686A20297DB500C59FDF /* ILSCloudKitExample */ = { 114 | isa = PBXGroup; 115 | children = ( 116 | 92144EB9202C40AB00E7D90C /* ViewControllers */, 117 | 92144EB5202C409200E7D90C /* Student Model */, 118 | 92144EB1202C407900E7D90C /* StudentTableViewCell */, 119 | 92144EAD202C3FEE00E7D90C /* ILSCloudKitManager */, 120 | 9228688120297DD200C59FDF /* ILSCloudKitExample.entitlements */, 121 | 9228686B20297DB500C59FDF /* AppDelegate.h */, 122 | 9228686C20297DB500C59FDF /* AppDelegate.m */, 123 | 9228687120297DB500C59FDF /* Main.storyboard */, 124 | 9228687420297DB500C59FDF /* Assets.xcassets */, 125 | 9228687620297DB500C59FDF /* LaunchScreen.storyboard */, 126 | 9228687920297DB600C59FDF /* Info.plist */, 127 | 9228687A20297DB600C59FDF /* main.m */, 128 | ); 129 | path = ILSCloudKitExample; 130 | sourceTree = ""; 131 | }; 132 | 9228688220297DD800C59FDF /* Frameworks */ = { 133 | isa = PBXGroup; 134 | children = ( 135 | 9228688320297DD800C59FDF /* CloudKit.framework */, 136 | ); 137 | name = Frameworks; 138 | sourceTree = ""; 139 | }; 140 | /* End PBXGroup section */ 141 | 142 | /* Begin PBXNativeTarget section */ 143 | 9228686720297DB500C59FDF /* ILSCloudKitExample */ = { 144 | isa = PBXNativeTarget; 145 | buildConfigurationList = 9228687E20297DB600C59FDF /* Build configuration list for PBXNativeTarget "ILSCloudKitExample" */; 146 | buildPhases = ( 147 | 9228686420297DB500C59FDF /* Sources */, 148 | 9228686520297DB500C59FDF /* Frameworks */, 149 | 9228686620297DB500C59FDF /* Resources */, 150 | ); 151 | buildRules = ( 152 | ); 153 | dependencies = ( 154 | ); 155 | name = ILSCloudKitExample; 156 | productName = ILSCloudKitExample; 157 | productReference = 9228686820297DB500C59FDF /* ILSCloudKitExample.app */; 158 | productType = "com.apple.product-type.application"; 159 | }; 160 | /* End PBXNativeTarget section */ 161 | 162 | /* Begin PBXProject section */ 163 | 9228686020297DB500C59FDF /* Project object */ = { 164 | isa = PBXProject; 165 | attributes = { 166 | LastUpgradeCheck = 0920; 167 | ORGANIZATIONNAME = "iLeaf Solutions pvt ltd"; 168 | TargetAttributes = { 169 | 9228686720297DB500C59FDF = { 170 | CreatedOnToolsVersion = 9.2; 171 | ProvisioningStyle = Automatic; 172 | SystemCapabilities = { 173 | com.apple.Push = { 174 | enabled = 1; 175 | }; 176 | com.apple.iCloud = { 177 | enabled = 1; 178 | }; 179 | }; 180 | }; 181 | }; 182 | }; 183 | buildConfigurationList = 9228686320297DB500C59FDF /* Build configuration list for PBXProject "ILSCloudKitExample" */; 184 | compatibilityVersion = "Xcode 8.0"; 185 | developmentRegion = en; 186 | hasScannedForEncodings = 0; 187 | knownRegions = ( 188 | en, 189 | Base, 190 | ); 191 | mainGroup = 9228685F20297DB500C59FDF; 192 | productRefGroup = 9228686920297DB500C59FDF /* Products */; 193 | projectDirPath = ""; 194 | projectRoot = ""; 195 | targets = ( 196 | 9228686720297DB500C59FDF /* ILSCloudKitExample */, 197 | ); 198 | }; 199 | /* End PBXProject section */ 200 | 201 | /* Begin PBXResourcesBuildPhase section */ 202 | 9228686620297DB500C59FDF /* Resources */ = { 203 | isa = PBXResourcesBuildPhase; 204 | buildActionMask = 2147483647; 205 | files = ( 206 | 9228687820297DB500C59FDF /* LaunchScreen.storyboard in Resources */, 207 | 9228687520297DB500C59FDF /* Assets.xcassets in Resources */, 208 | 9228687320297DB500C59FDF /* Main.storyboard in Resources */, 209 | ); 210 | runOnlyForDeploymentPostprocessing = 0; 211 | }; 212 | /* End PBXResourcesBuildPhase section */ 213 | 214 | /* Begin PBXSourcesBuildPhase section */ 215 | 9228686420297DB500C59FDF /* Sources */ = { 216 | isa = PBXSourcesBuildPhase; 217 | buildActionMask = 2147483647; 218 | files = ( 219 | 92144EBF202C40AB00E7D90C /* ViewController.m in Sources */, 220 | 92144EB0202C3FEE00E7D90C /* ILSCloudKitManager.m in Sources */, 221 | 9228687B20297DB600C59FDF /* main.m in Sources */, 222 | 92144EB4202C407900E7D90C /* StudentTableViewCell.m in Sources */, 223 | 92144EB8202C409200E7D90C /* Student.m in Sources */, 224 | 9228686D20297DB500C59FDF /* AppDelegate.m in Sources */, 225 | 92144EBE202C40AB00E7D90C /* DetailViewController.m in Sources */, 226 | ); 227 | runOnlyForDeploymentPostprocessing = 0; 228 | }; 229 | /* End PBXSourcesBuildPhase section */ 230 | 231 | /* Begin PBXVariantGroup section */ 232 | 9228687120297DB500C59FDF /* Main.storyboard */ = { 233 | isa = PBXVariantGroup; 234 | children = ( 235 | 9228687220297DB500C59FDF /* Base */, 236 | ); 237 | name = Main.storyboard; 238 | sourceTree = ""; 239 | }; 240 | 9228687620297DB500C59FDF /* LaunchScreen.storyboard */ = { 241 | isa = PBXVariantGroup; 242 | children = ( 243 | 9228687720297DB500C59FDF /* Base */, 244 | ); 245 | name = LaunchScreen.storyboard; 246 | sourceTree = ""; 247 | }; 248 | /* End PBXVariantGroup section */ 249 | 250 | /* Begin XCBuildConfiguration section */ 251 | 9228687C20297DB600C59FDF /* Debug */ = { 252 | isa = XCBuildConfiguration; 253 | buildSettings = { 254 | ALWAYS_SEARCH_USER_PATHS = NO; 255 | CLANG_ANALYZER_NONNULL = YES; 256 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 257 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 258 | CLANG_CXX_LIBRARY = "libc++"; 259 | CLANG_ENABLE_MODULES = YES; 260 | CLANG_ENABLE_OBJC_ARC = YES; 261 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 262 | CLANG_WARN_BOOL_CONVERSION = YES; 263 | CLANG_WARN_COMMA = YES; 264 | CLANG_WARN_CONSTANT_CONVERSION = YES; 265 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 266 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 267 | CLANG_WARN_EMPTY_BODY = YES; 268 | CLANG_WARN_ENUM_CONVERSION = YES; 269 | CLANG_WARN_INFINITE_RECURSION = YES; 270 | CLANG_WARN_INT_CONVERSION = YES; 271 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 272 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 273 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 274 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 275 | CLANG_WARN_STRICT_PROTOTYPES = YES; 276 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 277 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 278 | CLANG_WARN_UNREACHABLE_CODE = YES; 279 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 280 | CODE_SIGN_IDENTITY = "iPhone Developer"; 281 | COPY_PHASE_STRIP = NO; 282 | DEBUG_INFORMATION_FORMAT = dwarf; 283 | ENABLE_STRICT_OBJC_MSGSEND = YES; 284 | ENABLE_TESTABILITY = YES; 285 | GCC_C_LANGUAGE_STANDARD = gnu11; 286 | GCC_DYNAMIC_NO_PIC = NO; 287 | GCC_NO_COMMON_BLOCKS = YES; 288 | GCC_OPTIMIZATION_LEVEL = 0; 289 | GCC_PREPROCESSOR_DEFINITIONS = ( 290 | "DEBUG=1", 291 | "$(inherited)", 292 | ); 293 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 294 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 295 | GCC_WARN_UNDECLARED_SELECTOR = YES; 296 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 297 | GCC_WARN_UNUSED_FUNCTION = YES; 298 | GCC_WARN_UNUSED_VARIABLE = YES; 299 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 300 | MTL_ENABLE_DEBUG_INFO = YES; 301 | ONLY_ACTIVE_ARCH = YES; 302 | SDKROOT = iphoneos; 303 | }; 304 | name = Debug; 305 | }; 306 | 9228687D20297DB600C59FDF /* Release */ = { 307 | isa = XCBuildConfiguration; 308 | buildSettings = { 309 | ALWAYS_SEARCH_USER_PATHS = NO; 310 | CLANG_ANALYZER_NONNULL = YES; 311 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 312 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 313 | CLANG_CXX_LIBRARY = "libc++"; 314 | CLANG_ENABLE_MODULES = YES; 315 | CLANG_ENABLE_OBJC_ARC = YES; 316 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 317 | CLANG_WARN_BOOL_CONVERSION = YES; 318 | CLANG_WARN_COMMA = YES; 319 | CLANG_WARN_CONSTANT_CONVERSION = YES; 320 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 321 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 322 | CLANG_WARN_EMPTY_BODY = YES; 323 | CLANG_WARN_ENUM_CONVERSION = YES; 324 | CLANG_WARN_INFINITE_RECURSION = YES; 325 | CLANG_WARN_INT_CONVERSION = YES; 326 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 327 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 328 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 329 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 330 | CLANG_WARN_STRICT_PROTOTYPES = YES; 331 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 332 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 333 | CLANG_WARN_UNREACHABLE_CODE = YES; 334 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 335 | CODE_SIGN_IDENTITY = "iPhone Developer"; 336 | COPY_PHASE_STRIP = NO; 337 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 338 | ENABLE_NS_ASSERTIONS = NO; 339 | ENABLE_STRICT_OBJC_MSGSEND = YES; 340 | GCC_C_LANGUAGE_STANDARD = gnu11; 341 | GCC_NO_COMMON_BLOCKS = YES; 342 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 343 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 344 | GCC_WARN_UNDECLARED_SELECTOR = YES; 345 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 346 | GCC_WARN_UNUSED_FUNCTION = YES; 347 | GCC_WARN_UNUSED_VARIABLE = YES; 348 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 349 | MTL_ENABLE_DEBUG_INFO = NO; 350 | SDKROOT = iphoneos; 351 | VALIDATE_PRODUCT = YES; 352 | }; 353 | name = Release; 354 | }; 355 | 9228687F20297DB600C59FDF /* Debug */ = { 356 | isa = XCBuildConfiguration; 357 | buildSettings = { 358 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 359 | CODE_SIGN_ENTITLEMENTS = ILSCloudKitExample/ILSCloudKitExample.entitlements; 360 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 361 | CODE_SIGN_STYLE = Automatic; 362 | DEVELOPMENT_TEAM = Y6AK6TF2DS; 363 | INFOPLIST_FILE = ILSCloudKitExample/Info.plist; 364 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 365 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 366 | PRODUCT_BUNDLE_IDENTIFIER = com.ileafsolutions.cloudkit; 367 | PRODUCT_NAME = "$(TARGET_NAME)"; 368 | PROVISIONING_PROFILE_SPECIFIER = ""; 369 | TARGETED_DEVICE_FAMILY = "1,2"; 370 | }; 371 | name = Debug; 372 | }; 373 | 9228688020297DB600C59FDF /* Release */ = { 374 | isa = XCBuildConfiguration; 375 | buildSettings = { 376 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 377 | CODE_SIGN_ENTITLEMENTS = ILSCloudKitExample/ILSCloudKitExample.entitlements; 378 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 379 | CODE_SIGN_STYLE = Automatic; 380 | DEVELOPMENT_TEAM = Y6AK6TF2DS; 381 | INFOPLIST_FILE = ILSCloudKitExample/Info.plist; 382 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 383 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 384 | PRODUCT_BUNDLE_IDENTIFIER = com.ileafsolutions.cloudkit; 385 | PRODUCT_NAME = "$(TARGET_NAME)"; 386 | PROVISIONING_PROFILE_SPECIFIER = ""; 387 | TARGETED_DEVICE_FAMILY = "1,2"; 388 | }; 389 | name = Release; 390 | }; 391 | /* End XCBuildConfiguration section */ 392 | 393 | /* Begin XCConfigurationList section */ 394 | 9228686320297DB500C59FDF /* Build configuration list for PBXProject "ILSCloudKitExample" */ = { 395 | isa = XCConfigurationList; 396 | buildConfigurations = ( 397 | 9228687C20297DB600C59FDF /* Debug */, 398 | 9228687D20297DB600C59FDF /* Release */, 399 | ); 400 | defaultConfigurationIsVisible = 0; 401 | defaultConfigurationName = Release; 402 | }; 403 | 9228687E20297DB600C59FDF /* Build configuration list for PBXNativeTarget "ILSCloudKitExample" */ = { 404 | isa = XCConfigurationList; 405 | buildConfigurations = ( 406 | 9228687F20297DB600C59FDF /* Debug */, 407 | 9228688020297DB600C59FDF /* Release */, 408 | ); 409 | defaultConfigurationIsVisible = 0; 410 | defaultConfigurationName = Release; 411 | }; 412 | /* End XCConfigurationList section */ 413 | }; 414 | rootObject = 9228686020297DB500C59FDF /* Project object */; 415 | } 416 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample.xcodeproj/project.xcworkspace/xcuserdata/hiran.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample.xcodeproj/project.xcworkspace/xcuserdata/hiran.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample.xcodeproj/xcuserdata/hiran.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 14 | 15 | 16 | 18 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample.xcodeproj/xcuserdata/hiran.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ILSCloudKitExample.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/6/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/6/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | 24 | - (void)applicationWillResignActive:(UIApplication *)application { 25 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 26 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 27 | } 28 | 29 | 30 | - (void)applicationDidEnterBackground:(UIApplication *)application { 31 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 32 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 33 | } 34 | 35 | 36 | - (void)applicationWillEnterForeground:(UIApplication *)application { 37 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 38 | } 39 | 40 | 41 | - (void)applicationDidBecomeActive:(UIApplication *)application { 42 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 43 | } 44 | 45 | 46 | - (void)applicationWillTerminate:(UIApplication *)application { 47 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 48 | } 49 | 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "57x57", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-57x57@1x.png", 49 | "scale" : "1x" 50 | }, 51 | { 52 | "size" : "57x57", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-57x57@2x.png", 55 | "scale" : "2x" 56 | }, 57 | { 58 | "size" : "60x60", 59 | "idiom" : "iphone", 60 | "filename" : "Icon-App-60x60@2x.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "60x60", 65 | "idiom" : "iphone", 66 | "filename" : "Icon-App-60x60@3x.png", 67 | "scale" : "3x" 68 | }, 69 | { 70 | "size" : "20x20", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-20x20@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "20x20", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-20x20@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "29x29", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-29x29@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "29x29", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-29x29@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "40x40", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-40x40@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "40x40", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-40x40@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "50x50", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-Small-50x50@1x.png", 109 | "scale" : "1x" 110 | }, 111 | { 112 | "size" : "50x50", 113 | "idiom" : "ipad", 114 | "filename" : "Icon-Small-50x50@2x.png", 115 | "scale" : "2x" 116 | }, 117 | { 118 | "size" : "72x72", 119 | "idiom" : "ipad", 120 | "filename" : "Icon-App-72x72@1x.png", 121 | "scale" : "1x" 122 | }, 123 | { 124 | "size" : "72x72", 125 | "idiom" : "ipad", 126 | "filename" : "Icon-App-72x72@2x.png", 127 | "scale" : "2x" 128 | }, 129 | { 130 | "size" : "76x76", 131 | "idiom" : "ipad", 132 | "filename" : "Icon-App-76x76@1x.png", 133 | "scale" : "1x" 134 | }, 135 | { 136 | "size" : "76x76", 137 | "idiom" : "ipad", 138 | "filename" : "Icon-App-76x76@2x.png", 139 | "scale" : "2x" 140 | }, 141 | { 142 | "size" : "83.5x83.5", 143 | "idiom" : "ipad", 144 | "filename" : "Icon-App-83.5x83.5@2x.png", 145 | "scale" : "2x" 146 | }, 147 | { 148 | "size" : "1024x1024", 149 | "idiom" : "ios-marketing", 150 | "filename" : "ItunesArtwork@2x.png", 151 | "scale" : "1x" 152 | } 153 | ], 154 | "info" : { 155 | "version" : 1, 156 | "author" : "xcode" 157 | } 158 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/bg-1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "bg.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/bg-1.imageset/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/bg-1.imageset/bg.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "bg.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "bg@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "bg@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/bg.imageset/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/bg.imageset/bg.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/bg.imageset/bg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/bg.imageset/bg@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/bg.imageset/bg@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/bg.imageset/bg@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/button.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "c.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "c@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "c@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/button.imageset/c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/button.imageset/c.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/button.imageset/c@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/button.imageset/c@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/button.imageset/c@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/button.imageset/c@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/cloud.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "cloud.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "cloud@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "cloud@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/cloud.imageset/cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/cloud.imageset/cloud.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/cloud.imageset/cloud@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/cloud.imageset/cloud@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/cloud.imageset/cloud@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/cloud.imageset/cloud@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/email.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "d.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "d@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "d@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/email.imageset/d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/email.imageset/d.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/email.imageset/d@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/email.imageset/d@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/email.imageset/d@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/email.imageset/d@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/email_textfield.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "email.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "email@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "email@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/email_textfield.imageset/email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/email_textfield.imageset/email.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/email_textfield.imageset/email@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/email_textfield.imageset/email@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/email_textfield.imageset/email@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/email_textfield.imageset/email@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/line.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "line2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "line2@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "line2@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/line.imageset/line2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/line.imageset/line2.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/line.imageset/line2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/line.imageset/line2@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/line.imageset/line2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/line.imageset/line2@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/pass_textfield.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pass.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "pass@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "pass@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/pass_textfield.imageset/pass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/pass_textfield.imageset/pass.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/pass_textfield.imageset/pass@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/pass_textfield.imageset/pass@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/pass_textfield.imageset/pass@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/pass_textfield.imageset/pass@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/password.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "f.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "f@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "f@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/password.imageset/f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/password.imageset/f.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/password.imageset/f@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/password.imageset/f@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/password.imageset/f@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/password.imageset/f@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/placeholder.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "a.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "a@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "a@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/placeholder.imageset/a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/placeholder.imageset/a.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/placeholder.imageset/a@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/placeholder.imageset/a@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/placeholder.imageset/a@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/placeholder.imageset/a@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/splash.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ils cloud splash.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/splash.imageset/ils cloud splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/splash.imageset/ils cloud splash.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/user_textfield.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "user.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "user@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "user@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/user_textfield.imageset/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/user_textfield.imageset/user.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/user_textfield.imageset/user@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/user_textfield.imageset/user@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/user_textfield.imageset/user@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/user_textfield.imageset/user@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/username.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "e.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "e@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "e@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/username.imageset/e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/username.imageset/e.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/username.imageset/e@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/username.imageset/e@2x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/username.imageset/e@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLeafSolutionsPvtLtd/ILSCloudKitManager/d71cd28c3c13d66554336c15c84079c8bb2dd733/ILSCloudKitExample/ILSCloudKitExample/Assets.xcassets/username.imageset/e@3x.png -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 51 | 60 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 85 | 95 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 215 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/ILSCloudKitExample.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | com.apple.developer.icloud-container-identifiers 8 | 9 | iCloud.$(CFBundleIdentifier) 10 | 11 | com.apple.developer.icloud-services 12 | 13 | CloudKit 14 | 15 | com.apple.developer.ubiquity-kvstore-identifier 16 | $(TeamIdentifierPrefix)$(CFBundleIdentifier) 17 | 18 | 19 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/ILSCloudKitManager/ILSCloudKitManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // ILSCloudKitManager.h 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/7/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //Completion Handler 12 | typedef void(^CloudKitCompletionHandler)(NSArray *results, NSError *error); 13 | 14 | @interface ILSCloudKitManager : NSObject 15 | 16 | /** 17 | * Fetch all records of particular record type from iCloud 18 | * @author Hiran Stephan 19 | * 20 | * @param recordType record type that should be fetched from iCloud 21 | * @param predicate condition on which records should be fetched 22 | * @param handler Completion handler 23 | */ 24 | 25 | + (void)fetchAllRecordsWithType:(NSString*)recordType 26 | withPredicate:(NSPredicate*)predicate 27 | CompletionHandler:(CloudKitCompletionHandler)handler; 28 | 29 | /** 30 | * Create a record for a specified record type 31 | * @author Hiran Stephan 32 | * 33 | * @param recordType Type of the record that should be created in iCloud 34 | * @param fields fields and vlues for that record as a dictionary 35 | * @param recordId Id of the record 36 | * @param handler Completion handler 37 | */ 38 | 39 | + (void)createRecord:(NSDictionary *)fields 40 | WithRecordType:(NSString*)recordType 41 | WithRecordId:(NSString*)recordId 42 | completionHandler:(CloudKitCompletionHandler)handler; 43 | 44 | 45 | /** 46 | * Update record with a given record id 47 | * @author Hiran Stephan 48 | * 49 | * @param recordId id of the record that should be updated 50 | * @param recordDic fields and vlues for that record as a dictionary 51 | * @param handler Completion handler 52 | */ 53 | 54 | + (void)updateRecord:(NSString *)recordId 55 | withRecord:(NSDictionary *)recordDic 56 | completionHandler:(CloudKitCompletionHandler)handler; 57 | 58 | /** 59 | * remove record with a given record id 60 | * @author Hiran Stephan 61 | * 62 | * @param recordId id of the record that should be deleted 63 | * @param handler Completion handler 64 | */ 65 | + (void)removeRecordWithId:(NSString *)recordId 66 | completionHandler:(CloudKitCompletionHandler)handler; 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/ILSCloudKitManager/ILSCloudKitManager.m: -------------------------------------------------------------------------------- 1 | // 2 | // ILSCloudKitManager.m 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/7/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | #import "ILSCloudKitManager.h" 10 | #import 11 | 12 | 13 | @implementation ILSCloudKitManager 14 | 15 | 16 | + (CKDatabase *)publicCloudDatabase { 17 | return [[CKContainer defaultContainer] publicCloudDatabase]; 18 | } 19 | 20 | // Retrieve existing records 21 | + (void)fetchAllRecordsWithType:(NSString*)recordType 22 | withPredicate:(NSPredicate*)predicate 23 | CompletionHandler:(CloudKitCompletionHandler)handler { 24 | 25 | CKDatabase *publicDatabase = [[CKContainer defaultContainer] publicCloudDatabase]; 26 | 27 | CKQuery *query = [[CKQuery alloc] initWithRecordType:recordType predicate:predicate]; 28 | 29 | [publicDatabase performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) { 30 | 31 | if (!handler) return; 32 | dispatch_async(dispatch_get_main_queue(), ^{ 33 | handler (results, error); 34 | }); 35 | 36 | }]; 37 | 38 | } 39 | 40 | 41 | // add a new record 42 | + (void)createRecord:(NSDictionary *)fields 43 | WithRecordType:(NSString*)recordType 44 | WithRecordId:(NSString*)recordId 45 | completionHandler:(CloudKitCompletionHandler)handler { 46 | 47 | CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName:recordId]; 48 | CKRecord *record = [[CKRecord alloc] initWithRecordType:recordType recordID:recordID]; 49 | 50 | [[fields allKeys] enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop) { 51 | record[key] = fields[key]; 52 | }]; 53 | 54 | CKDatabase *publicCloudDatabase = [[CKContainer defaultContainer] publicCloudDatabase]; 55 | [publicCloudDatabase saveRecord:record completionHandler:^(CKRecord *record, NSError *error) { 56 | 57 | if (!handler) return; 58 | 59 | if (error) { 60 | dispatch_async(dispatch_get_main_queue(), ^{ 61 | handler (nil, error); 62 | }); 63 | return; 64 | } 65 | 66 | 67 | dispatch_async(dispatch_get_main_queue(), ^{ 68 | NSLog(@"record saved successfully"); 69 | handler (@[record], error); 70 | }); 71 | 72 | }]; 73 | } 74 | 75 | 76 | // updating the record by recordId 77 | + (void)updateRecord:(NSString *)recordId 78 | withRecord:(NSDictionary *)recordDic 79 | completionHandler:(CloudKitCompletionHandler)handler { 80 | 81 | // Fetch the record from the database 82 | CKDatabase *publicDatabase = [[CKContainer defaultContainer] publicCloudDatabase]; 83 | CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName:recordId]; 84 | [publicDatabase fetchRecordWithID:recordID completionHandler:^(CKRecord *record, NSError *error) { 85 | if (!handler) return; 86 | 87 | if (error) { 88 | dispatch_async(dispatch_get_main_queue(), ^{ 89 | handler (nil, error); 90 | }); 91 | return; 92 | } 93 | else { 94 | // Modify the record and save it to the database 95 | [[recordDic allKeys] enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop) { 96 | 97 | record[key] = recordDic[key]; 98 | 99 | }]; 100 | 101 | [publicDatabase saveRecord:record completionHandler:^(CKRecord *savedRecord, NSError *saveError) { 102 | // Error handling for failed save to public database 103 | if (error) { 104 | dispatch_async(dispatch_get_main_queue(), ^{ 105 | handler (nil, error); 106 | }); 107 | return; 108 | } 109 | else { 110 | dispatch_async(dispatch_get_main_queue(), ^{ 111 | NSLog(@"Saved successfully"); 112 | handler (@[record], error); 113 | }); 114 | } 115 | }]; 116 | } 117 | }]; 118 | 119 | } 120 | 121 | 122 | 123 | // remove the record 124 | + (void)removeRecordWithId:(NSString *)recordId 125 | completionHandler:(CloudKitCompletionHandler)handler { 126 | 127 | CKDatabase *publicDatabase = [[CKContainer defaultContainer] publicCloudDatabase]; 128 | CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName:recordId]; 129 | [publicDatabase deleteRecordWithID:recordID completionHandler:^(CKRecordID *recordID, NSError *error) { 130 | if (!handler) return; 131 | 132 | dispatch_async(dispatch_get_main_queue(), ^{ 133 | handler (nil, error); 134 | }); 135 | 136 | }]; 137 | } 138 | 139 | 140 | @end 141 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | ILS CloudKit 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Managers/CloudKitManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // CloudKitManager.h 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/6/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef void(^CloudKitCompletionHandler)(NSArray *results, NSError *error); 12 | 13 | @interface CloudKitManager : NSObject 14 | 15 | + (void)fetchAllCitiesWithCompletionHandler:(CloudKitCompletionHandler)handler; 16 | 17 | + (void)createRecord:(NSDictionary *)recordDic 18 | completionHandler:(CloudKitCompletionHandler)handler; 19 | 20 | + (void)updateRecordTextWithId:(NSString *)recordId 21 | text:(NSString *)text 22 | completionHandler:(CloudKitCompletionHandler)handler; 23 | 24 | + (void)removeRecordWithId:(NSString *)recordId 25 | completionHandler:(CloudKitCompletionHandler)handler; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Managers/CloudKitManager.m: -------------------------------------------------------------------------------- 1 | // 2 | // CloudKitManager.m 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/6/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | 10 | #import "CloudKitManager.h" 11 | #import 12 | #import 13 | #import "City.h" 14 | 15 | NSString * const kCitiesRecord = @"Cities"; 16 | 17 | @implementation CloudKitManager 18 | 19 | + (CKDatabase *)publicCloudDatabase { 20 | return [[CKContainer defaultContainer] publicCloudDatabase]; 21 | } 22 | 23 | // Retrieve existing records 24 | + (void)fetchAllCitiesWithCompletionHandler:(CloudKitCompletionHandler)handler { 25 | 26 | NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@",@"Dubai"]; 27 | CKQuery *query = [[CKQuery alloc] initWithRecordType:kCitiesRecord predicate:predicate]; 28 | 29 | [[self publicCloudDatabase] performQuery:query 30 | inZoneWithID:nil 31 | completionHandler:^(NSArray *results, NSError *error) { 32 | 33 | if (!handler) return; 34 | 35 | dispatch_async(dispatch_get_main_queue(), ^{ 36 | handler ([self mapCities:results], error); 37 | }); 38 | }]; 39 | } 40 | 41 | // add a new record 42 | + (void)createRecord:(NSDictionary *)recordDic completionHandler:(CloudKitCompletionHandler)handler { 43 | 44 | CKRecord *record = [[CKRecord alloc] initWithRecordType:kCitiesRecord]; 45 | 46 | [[recordDic allKeys] enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop) { 47 | 48 | if ([key isEqualToString:CloudKitCityFields.picture]) { 49 | NSString *path = [[NSBundle mainBundle] pathForResource:recordDic[key] ofType:@"png"]; 50 | NSData *data = [NSData dataWithContentsOfFile:path]; 51 | record[key] = data; 52 | } else { 53 | record[key] = recordDic[key]; 54 | } 55 | }]; 56 | 57 | [[self publicCloudDatabase] saveRecord:record completionHandler:^(CKRecord *record, NSError *error) { 58 | 59 | if (!handler) return; 60 | 61 | dispatch_async(dispatch_get_main_queue(), ^{ 62 | handler (@[record], error); 63 | }); 64 | }]; 65 | } 66 | 67 | // updating the record by recordId 68 | + (void)updateRecordTextWithId:(NSString *)recordId text:(NSString *)text completionHandler:(CloudKitCompletionHandler)handler { 69 | CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName:recordId]; 70 | [[self publicCloudDatabase] fetchRecordWithID:recordID completionHandler:^(CKRecord *record, NSError *error) { 71 | 72 | if (!handler) return; 73 | 74 | if (error) { 75 | dispatch_async(dispatch_get_main_queue(), ^{ 76 | handler (nil, error); 77 | }); 78 | return; 79 | } 80 | 81 | record[CloudKitCityFields.text] = text; 82 | [[self publicCloudDatabase] saveRecord:record completionHandler:^(CKRecord *record, NSError *error) { 83 | dispatch_async(dispatch_get_main_queue(), ^{ 84 | handler (@[record], error); 85 | }); 86 | }]; 87 | }]; 88 | } 89 | 90 | // remove the record 91 | + (void)removeRecordWithId:(NSString *)recordId completionHandler:(CloudKitCompletionHandler)handler { 92 | 93 | CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName:recordId]; 94 | [[self publicCloudDatabase] deleteRecordWithID:recordID completionHandler:^(CKRecordID *recordID, NSError *error) { 95 | 96 | if (!handler) return; 97 | 98 | dispatch_async(dispatch_get_main_queue(), ^{ 99 | handler (nil, error); 100 | }); 101 | }]; 102 | } 103 | 104 | + (NSArray *)mapCities:(NSArray *)cities { 105 | if (cities.count == 0) return nil; 106 | 107 | NSMutableArray *temp = [[NSMutableArray alloc] init]; 108 | [cities enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 109 | City *city = [[City alloc] initWithInputData:obj]; 110 | [temp addObject:city]; 111 | }]; 112 | 113 | return [NSArray arrayWithArray:temp]; 114 | } 115 | 116 | @end 117 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Student Model/Student.h: -------------------------------------------------------------------------------- 1 | // 2 | // Student.h 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/6/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | extern const struct CloudKitStudentFields { 13 | __unsafe_unretained NSString *name; 14 | __unsafe_unretained NSString *email; 15 | __unsafe_unretained NSString *password; 16 | __unsafe_unretained NSString *picture; 17 | 18 | } CloudKitStudentFields; 19 | 20 | @interface Student : NSObject 21 | 22 | @property (nonatomic, copy, readonly) NSString *name; 23 | @property (nonatomic, copy, readonly) NSString *email; 24 | @property (nonatomic, copy, readonly) NSString *password; 25 | @property (nonatomic, strong) UIImage *picture; 26 | 27 | - (instancetype)initWithInputData:(id)inputData; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/Student Model/Student.m: -------------------------------------------------------------------------------- 1 | // 2 | // Student.m 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/6/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | #import "Student.h" 10 | #import 11 | 12 | const struct CloudKitStudentFields CloudKitStudentFields = { 13 | .name = @"name", 14 | .email = @"email", 15 | .password = @"password", 16 | .picture = @"picture" 17 | }; 18 | 19 | @implementation Student 20 | 21 | #pragma mark - Lifecycle 22 | 23 | - (instancetype)initWithInputData:(id)inputData { 24 | self = [super init]; 25 | if (self) { 26 | [self mapObject:inputData]; 27 | } 28 | 29 | return self; 30 | } 31 | 32 | #pragma mark - Private 33 | 34 | - (void)mapObject:(CKRecord *)object { 35 | 36 | _name = [object valueForKeyPath:CloudKitStudentFields.name]; 37 | _email = [object valueForKeyPath:CloudKitStudentFields.email]; 38 | 39 | //Converting CKAsset to UIImage 40 | CKAsset *asset = (CKAsset *)[object valueForKeyPath:CloudKitStudentFields.picture]; 41 | NSData *data = [[NSData alloc]initWithContentsOfURL:asset.fileURL]; 42 | _picture = [UIImage imageWithData:data]; 43 | 44 | _password = [object valueForKeyPath:CloudKitStudentFields.password]; 45 | 46 | } 47 | 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/StudentTableViewCell/StudentTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // StudentTableViewCell.h 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/6/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "Student.h" 11 | 12 | @interface StudentTableViewCell : UITableViewCell 13 | 14 | + (NSString *)reuseIdentifier; 15 | 16 | - (void)setStudent:(Student *)student; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/StudentTableViewCell/StudentTableViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // StudentTableViewCell.m 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/6/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | #import "StudentTableViewCell.h" 10 | 11 | static NSString * const kStudentCellReuseId = @"StudentTableViewCellReuseId"; 12 | 13 | 14 | @interface StudentTableViewCell () 15 | 16 | @property (nonatomic, weak) IBOutlet UILabel *nameLabel; 17 | @property (nonatomic, weak) IBOutlet UILabel *emailLabel; 18 | @property (nonatomic, weak) IBOutlet UILabel *passwordLabel; 19 | @property (nonatomic, weak) IBOutlet UIImageView *pictureImageView; 20 | 21 | 22 | @end 23 | 24 | 25 | @implementation StudentTableViewCell 26 | 27 | - (void)awakeFromNib { 28 | [super awakeFromNib]; 29 | // Initialization code+ 30 | self.pictureImageView.layer.cornerRadius = _pictureImageView.frame.size.height/2; 31 | self.pictureImageView.clipsToBounds = YES; 32 | } 33 | 34 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated { 35 | [super setSelected:selected animated:animated]; 36 | 37 | // Configure the view for the selected state 38 | } 39 | 40 | + (NSString *)reuseIdentifier { 41 | return kStudentCellReuseId; 42 | } 43 | 44 | #pragma mark - Public 45 | 46 | - (void)setStudent:(Student *)student { 47 | 48 | self.nameLabel.text = student.name; 49 | self.emailLabel.text = student.email; 50 | self.passwordLabel.text = student.password; 51 | 52 | self.pictureImageView.alpha = 0.f; 53 | UIImage *image = student.picture ? student.picture : [UIImage imageNamed:@"placeholder"]; 54 | self.pictureImageView.image = image; 55 | 56 | [UIView animateWithDuration:.3 animations:^{ 57 | self.pictureImageView.alpha = 1.f; 58 | }]; 59 | 60 | } 61 | 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/ViewControllers/DetailViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DetailViewController.h 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/6/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "Student.h" 11 | 12 | @interface DetailViewController : UIViewController 13 | 14 | @property (strong,nonatomic) Student *student; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/ViewControllers/DetailViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // DetailViewController.m 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/6/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | #import "DetailViewController.h" 10 | #import 11 | #import "ILSCloudKitManager.h" 12 | 13 | static NSString * const kCKRecordName = @"STUDENT"; 14 | 15 | 16 | @interface DetailViewController () 17 | 18 | @property (nonatomic, weak) IBOutlet UITextField *nameField; 19 | @property (nonatomic, weak) IBOutlet UITextField *emailField; 20 | @property (nonatomic, weak) IBOutlet UITextField *passwordField; 21 | @property (nonatomic, weak) IBOutlet UIImageView *pictureImageView; 22 | 23 | @property (nonatomic, strong) NSURL *pictureImageURL; 24 | 25 | 26 | @end 27 | 28 | @implementation DetailViewController 29 | 30 | - (void)viewDidLoad { 31 | [super viewDidLoad]; 32 | // Do any additional setup after loading the view. 33 | _pictureImageView.layer.cornerRadius = _pictureImageView.frame.size.height/2; 34 | _pictureImageView.clipsToBounds = YES; 35 | 36 | [self addPaddingInFrontOfTextField:_emailField]; 37 | [self addPaddingInFrontOfTextField:_passwordField]; 38 | [self addPaddingInFrontOfTextField:_nameField]; 39 | 40 | 41 | // If editing a record, populate data in textfields 42 | if(_student){ 43 | _nameField.text = _student.name; 44 | _emailField.text = _student.email; 45 | _passwordField.text = _student.password; 46 | UIImage *image = _student.picture ? _student.picture : [UIImage imageNamed:@"placeholder"]; 47 | _pictureImageURL = [self urlFromImage:_student.picture]; 48 | _pictureImageView.image = image; 49 | 50 | //Email is not changable once entered since it is the key to find the record 51 | _emailField.userInteractionEnabled = NO; 52 | 53 | } 54 | } 55 | 56 | - (void)addPaddingInFrontOfTextField:(UITextField*)textField{ 57 | UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 60, 60)]; 58 | textField.leftView = paddingView; 59 | textField.leftViewMode = UITextFieldViewModeAlways; 60 | } 61 | 62 | 63 | - (void)didReceiveMemoryWarning { 64 | [super didReceiveMemoryWarning]; 65 | // Dispose of any resources that can be recreated. 66 | } 67 | 68 | /* 69 | #pragma mark - Navigation 70 | 71 | // In a storyboard-based application, you will often want to do a little preparation before navigation 72 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 73 | // Get the new view controller using [segue destinationViewController]. 74 | // Pass the selected object to the new view controller. 75 | } 76 | */ 77 | 78 | #pragma mark Take photo 79 | 80 | 81 | - (IBAction)takePhoto:(UIButton *)sender { 82 | 83 | UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 84 | picker.delegate = self; 85 | picker.allowsEditing = YES; 86 | picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 87 | 88 | [self presentViewController:picker animated:YES completion:nil]; 89 | } 90 | 91 | 92 | - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 93 | 94 | UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; 95 | 96 | if (chosenImage != nil) 97 | { 98 | _pictureImageURL = [self urlFromImage:chosenImage]; 99 | } 100 | 101 | self.pictureImageView.image = chosenImage; 102 | [picker dismissViewControllerAnimated:YES completion:nil]; 103 | } 104 | 105 | 106 | - (NSURL*)urlFromImage:(UIImage*)image{ 107 | 108 | NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 109 | NSUserDomainMask, YES); 110 | NSString *documentsDirectory = [paths objectAtIndex:0]; 111 | NSString* path = [documentsDirectory stringByAppendingPathComponent: 112 | @"test.png" ]; 113 | NSURL *imageUrl = [[NSURL alloc]initFileURLWithPath:path]; 114 | NSData* data = UIImagePNGRepresentation(image); 115 | [data writeToFile:path atomically:YES]; 116 | return imageUrl; 117 | } 118 | 119 | 120 | #pragma mark Save or update student record in iCloud 121 | 122 | - (IBAction)saveStudent:(id)sender { 123 | 124 | 125 | NSMutableDictionary *recordDic = [[NSMutableDictionary alloc]init]; 126 | 127 | // Name 128 | NSString *name = [self.nameField.text stringByTrimmingCharactersInSet: 129 | [NSCharacterSet whitespaceCharacterSet]]; 130 | [recordDic setObject:name forKey:@"name"]; 131 | 132 | // Email 133 | NSString *email = [self.emailField.text stringByTrimmingCharactersInSet: 134 | [NSCharacterSet whitespaceCharacterSet]]; 135 | [recordDic setObject:email forKey:@"email"]; 136 | 137 | // Password 138 | NSString *password = [self.passwordField.text stringByTrimmingCharactersInSet: 139 | [NSCharacterSet whitespaceCharacterSet]]; 140 | [recordDic setObject:password forKey:@"password"]; 141 | // Category 142 | [recordDic setObject:kCKRecordName forKey:@"category"]; 143 | 144 | // Picture 145 | if(_pictureImageURL){ 146 | CKAsset *picture = [[CKAsset alloc]initWithFileURL:_pictureImageURL]; 147 | [recordDic setObject:picture forKey:@"picture"]; 148 | } 149 | 150 | 151 | if(!_student){ 152 | [ILSCloudKitManager createRecord:recordDic WithRecordType:kCKRecordName WithRecordId:[self.emailField.text stringByTrimmingCharactersInSet: 153 | [NSCharacterSet whitespaceCharacterSet]] completionHandler:^(NSArray *results, NSError *error) { 154 | 155 | if(error) { 156 | NSLog(@"%@", error); 157 | } else { 158 | NSLog(@"Saved successfully"); 159 | dispatch_async(dispatch_get_main_queue(), ^(void){ 160 | [self.navigationController popViewControllerAnimated:YES]; 161 | }); 162 | } 163 | 164 | }]; 165 | 166 | }else{ 167 | 168 | [ILSCloudKitManager updateRecord:_student.email withRecord:recordDic completionHandler:^(NSArray *results, NSError *error) { 169 | if(error) { 170 | NSLog(@"%@", error); 171 | } else { 172 | NSLog(@"Saved successfully"); 173 | dispatch_async(dispatch_get_main_queue(), ^(void){ 174 | if(_pictureImageURL.path.length > 0) 175 | [[NSFileManager defaultManager]removeItemAtURL:_pictureImageURL error:nil]; 176 | [self.navigationController popViewControllerAnimated:YES]; 177 | }); 178 | } 179 | }]; 180 | 181 | } 182 | 183 | 184 | 185 | } 186 | 187 | 188 | 189 | @end 190 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/ViewControllers/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/6/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/ViewControllers/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/6/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import 11 | #import "StudentTableViewCell.h" 12 | #import "DetailViewController.h" 13 | #import "ILSCloudKitManager.h" 14 | 15 | static NSString * const kCKRecordName = @"STUDENT"; 16 | 17 | 18 | @interface ViewController () 19 | 20 | @property (nonatomic, weak) IBOutlet UITableView *tableView; 21 | 22 | //UITableview Datasource array 23 | @property (nonatomic, strong) NSArray *Students; 24 | 25 | //Refresh control for updating students list 26 | @property (nonatomic, strong) UIRefreshControl *refreshControl; 27 | 28 | 29 | @end 30 | 31 | @implementation ViewController 32 | 33 | - (void)viewDidLoad { 34 | [super viewDidLoad]; 35 | // Do any additional setup after loading the view, typically from a nib. 36 | 37 | //Setting up refresh control 38 | _refreshControl = [[UIRefreshControl alloc]init]; 39 | [self.tableView addSubview:_refreshControl]; 40 | [_refreshControl addTarget:self action:@selector(refreshStudentList) forControlEvents:UIControlEventValueChanged]; 41 | } 42 | 43 | - (void)viewDidAppear:(BOOL)animated{ 44 | [super viewDidAppear:YES]; 45 | //Fetch students list from iCloud when view loads 46 | [self fetchStudents]; 47 | } 48 | 49 | 50 | - (void)didReceiveMemoryWarning { 51 | [super didReceiveMemoryWarning]; 52 | // Dispose of any resources that can be recreated. 53 | } 54 | 55 | //Refresh control action, updating students list 56 | - (void)refreshStudentList { 57 | [_refreshControl endRefreshing]; 58 | [self fetchStudents]; 59 | } 60 | 61 | 62 | #pragma mark - UITableViewDataSource 63 | 64 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 65 | return [self.Students count]; 66 | } 67 | 68 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 69 | StudentTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[StudentTableViewCell reuseIdentifier]]; 70 | [cell setStudent:[self.Students objectAtIndex:indexPath.item]]; 71 | return cell; 72 | } 73 | 74 | #pragma mark - UITableViewDelegate 75 | 76 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 77 | [self performSegueWithIdentifier:@"ShowDetail" sender:[self.Students objectAtIndex:indexPath.item]]; 78 | } 79 | 80 | - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { 81 | return YES; 82 | } 83 | 84 | - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 85 | if (editingStyle == UITableViewCellEditingStyleDelete) { 86 | [self deleteStudent:indexPath]; 87 | } 88 | } 89 | 90 | 91 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 92 | { 93 | if ([[segue identifier] isEqualToString:@"ShowDetail"]) { 94 | // Get destination view 95 | DetailViewController *vc = [segue destinationViewController]; 96 | if([sender isKindOfClass:[Student class]]) 97 | vc.student = sender; 98 | } 99 | } 100 | 101 | #pragma mark - Fetch students list from iCloud 102 | 103 | - (void)fetchStudents { 104 | 105 | NSPredicate *predicate = [NSPredicate predicateWithFormat:@"category == %@", kCKRecordName]; 106 | [ILSCloudKitManager fetchAllRecordsWithType:kCKRecordName withPredicate:predicate CompletionHandler:^(NSArray *results, NSError *error) { 107 | 108 | if (error) { 109 | // Error handling for failed fetch from public database 110 | } 111 | else { 112 | // Display the fetched records 113 | dispatch_async(dispatch_get_main_queue(), ^(void){ 114 | NSArray *students = [self mapStudents:results]; 115 | self.Students = students; 116 | [self.tableView reloadData]; 117 | }); 118 | } 119 | }]; 120 | 121 | 122 | 123 | } 124 | 125 | #pragma mark - Delete a student record from iCloud 126 | 127 | - (void)deleteStudent:(NSIndexPath *)indexPath{ 128 | Student *student = [self.Students objectAtIndex:indexPath.item]; 129 | [ILSCloudKitManager removeRecordWithId:student.email completionHandler:^(NSArray *results, NSError *error) { 130 | if (error) { 131 | NSLog(@"error"); 132 | }else{ 133 | dispatch_async(dispatch_get_main_queue(), ^(void){ 134 | NSMutableArray *studentsArray = [[NSMutableArray alloc]initWithArray:self.Students]; 135 | [studentsArray removeObjectAtIndex:indexPath.row]; 136 | self.Students = studentsArray; 137 | [_tableView reloadData]; 138 | }); 139 | } 140 | }]; 141 | 142 | 143 | } 144 | 145 | #pragma mark - Map fetch result to student model object 146 | 147 | - (NSArray *)mapStudents:(NSArray *)students { 148 | 149 | if (students.count == 0) return nil; 150 | 151 | NSMutableArray *temp = [[NSMutableArray alloc] init]; 152 | [students enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 153 | Student *student = [[Student alloc] initWithInputData:obj]; 154 | [temp addObject:student]; 155 | }]; 156 | 157 | return [NSArray arrayWithArray:temp]; 158 | } 159 | 160 | @end 161 | -------------------------------------------------------------------------------- /ILSCloudKitExample/ILSCloudKitExample/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // ILSCloudKitExample 4 | // 5 | // Created by Hiran on 2/6/18. 6 | // Copyright © 2018 iLeaf Solutions pvt ltd. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 iLeaf Solutions Pvt. Ltd. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # ILSCloudKitManager 4 | 5 | ILSCloudKitManager is wrapper for managing apple's CloudKit operations like create, update, fetch and delete records. 6 | 7 | CloudKit, Apple’s remote data storage service, provides a possibility to store app data using users’ iCloud accounts as a back-end storage service. 8 | 9 | 10 | ## Preview 11 | 12 | 13 | 14 | ## Requirements 15 | iOS 8.0 16 | 17 | ## How To Get Started 18 | 19 | - Set up Cloud/CloudKit at iOS Developer Portal. 20 | - Insert a bundle identifier and choose a corresponding Team. 21 | - Select Capabilities tab in the target editor, and then switch ON the iCloud. 22 | 23 | It’s important that your app’s bundle id and iCloud containers match and can be reached in the developer account. For example, if a bundle identifier is “com..cloud”, a name for the iCloud container should be “iCloud” + the id of the bundle: “iCloud.com..cloud”. 24 | The app will work only if you meet all the conditions in the settings. 25 | 26 | 27 | 28 | In order to work this in iOS simulator, You have to sign into iCloud on your simulator. Go to settings, iCloud, and enter your iCloud credentials. 29 | 30 | ## Usage 31 | 32 | ### Create a new record 33 | 34 | ```objective-c 35 | [ILSCloudKitManager createRecord:recordDic WithRecordType:@"Enter Record Type Here" WithRecordId:@"Enter Record Id Here" completionHandler:^(NSArray *results, NSError *error) { 36 | if(error) { 37 | NSLog(@"%@", error); 38 | } else { 39 | NSLog(@"Saved successfully"); 40 | } 41 | }]; 42 | ``` 43 | 44 | ### Retrieve existing records 45 | ```objective-c 46 | NSPredicate *predicate = [NSPredicate predicateWithFormat:@"#Enter Condition Here#"]; 47 | [ILSCloudKitManager fetchAllRecordsWithType:@"#Enter Record Type Here#" withPredicate:@"#Enter Predicate Here#" CompletionHandler:^(NSArray *results, NSError *error) { 48 | 49 | if (error) { 50 | // Error handling for failed fetch from public database 51 | } 52 | else { 53 | // Display the fetched records 54 | } 55 | }]; 56 | ``` 57 | 58 | ### Update the record 59 | ```objective-c 60 | [ILSCloudKitManager updateRecord:@"Enter Record Id Here" withRecord:@"Pass record that needs to be updated" completionHandler:^(NSArray *results, NSError *error) { 61 | if(error) { 62 | NSLog(@"%@", error); 63 | } else { 64 | NSLog(@"Saved successfully"); 65 | } 66 | }]; 67 | ``` 68 | ### Remove the record 69 | ```objective-c 70 | [ILSCloudKitManager removeRecordWithId:@"Enter Record Id Here" completionHandler:^(NSArray *results, NSError *error) { 71 | if (error) { 72 | NSLog(@"error"); 73 | }else{ 74 | NSLog(@"deleted"); 75 | } 76 | }]; 77 | ``` 78 | 79 | ## Author 80 | iLeaf Solutions 81 | [http://www.ileafsolutions.com](http://www.ileafsolutions.com) 82 | 83 | 84 | ## License 85 | 86 | MIT License 87 | 88 | Copyright (c) 2018 iLeaf Solutions Pvt. Ltd. 89 | 90 | Permission is hereby granted, free of charge, to any person obtaining a copy 91 | of this software and associated documentation files (the "Software"), to deal 92 | in the Software without restriction, including without limitation the rights 93 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 94 | copies of the Software, and to permit persons to whom the Software is 95 | furnished to do so, subject to the following conditions: 96 | 97 | The above copyright notice and this permission notice shall be included in all 98 | copies or substantial portions of the Software. 99 | 100 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 101 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 102 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 103 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 104 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 105 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 106 | SOFTWARE. 107 | 108 | 109 | 110 | --------------------------------------------------------------------------------