Initial Commit
This commit is contained in:
		
							
								
								
									
										602
									
								
								KlipperMon.xcodeproj/project.pbxproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										602
									
								
								KlipperMon.xcodeproj/project.pbxproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,602 @@
 | 
				
			|||||||
 | 
					// !$*UTF8*$!
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						archiveVersion = 1;
 | 
				
			||||||
 | 
						classes = {
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						objectVersion = 56;
 | 
				
			||||||
 | 
						objects = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Begin PBXBuildFile section */
 | 
				
			||||||
 | 
							E180B5E92992CD9100425DB0 /* KlipperMonApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = E180B5E82992CD9100425DB0 /* KlipperMonApp.swift */; };
 | 
				
			||||||
 | 
							E180B5EB2992CD9100425DB0 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E180B5EA2992CD9100425DB0 /* ContentView.swift */; };
 | 
				
			||||||
 | 
							E180B5ED2992CD9200425DB0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E180B5EC2992CD9200425DB0 /* Assets.xcassets */; };
 | 
				
			||||||
 | 
							E180B5F02992CD9200425DB0 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E180B5EF2992CD9200425DB0 /* Preview Assets.xcassets */; };
 | 
				
			||||||
 | 
							E180B5F22992CD9200425DB0 /* Persistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = E180B5F12992CD9200425DB0 /* Persistence.swift */; };
 | 
				
			||||||
 | 
							E180B5F52992CD9200425DB0 /* KlipperMon.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = E180B5F32992CD9200425DB0 /* KlipperMon.xcdatamodeld */; };
 | 
				
			||||||
 | 
							E180B6002992CD9300425DB0 /* KlipperMonTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E180B5FF2992CD9300425DB0 /* KlipperMonTests.swift */; };
 | 
				
			||||||
 | 
							E180B60A2992CD9300425DB0 /* KlipperMonUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E180B6092992CD9300425DB0 /* KlipperMonUITests.swift */; };
 | 
				
			||||||
 | 
							E180B60C2992CD9300425DB0 /* KlipperMonUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E180B60B2992CD9300425DB0 /* KlipperMonUITestsLaunchTests.swift */; };
 | 
				
			||||||
 | 
					/* End PBXBuildFile section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Begin PBXContainerItemProxy section */
 | 
				
			||||||
 | 
							E180B5FC2992CD9300425DB0 /* PBXContainerItemProxy */ = {
 | 
				
			||||||
 | 
								isa = PBXContainerItemProxy;
 | 
				
			||||||
 | 
								containerPortal = E180B5DD2992CD9100425DB0 /* Project object */;
 | 
				
			||||||
 | 
								proxyType = 1;
 | 
				
			||||||
 | 
								remoteGlobalIDString = E180B5E42992CD9100425DB0;
 | 
				
			||||||
 | 
								remoteInfo = KlipperMon;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6062992CD9300425DB0 /* PBXContainerItemProxy */ = {
 | 
				
			||||||
 | 
								isa = PBXContainerItemProxy;
 | 
				
			||||||
 | 
								containerPortal = E180B5DD2992CD9100425DB0 /* Project object */;
 | 
				
			||||||
 | 
								proxyType = 1;
 | 
				
			||||||
 | 
								remoteGlobalIDString = E180B5E42992CD9100425DB0;
 | 
				
			||||||
 | 
								remoteInfo = KlipperMon;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					/* End PBXContainerItemProxy section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Begin PBXFileReference section */
 | 
				
			||||||
 | 
							E180B5E52992CD9100425DB0 /* KlipperMon.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KlipperMon.app; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
				
			||||||
 | 
							E180B5E82992CD9100425DB0 /* KlipperMonApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlipperMonApp.swift; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
							E180B5EA2992CD9100425DB0 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
							E180B5EC2992CD9200425DB0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
							E180B5EF2992CD9200425DB0 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
							E180B5F12992CD9200425DB0 /* Persistence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Persistence.swift; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
							E180B5F42992CD9200425DB0 /* KlipperMon.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = KlipperMon.xcdatamodel; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
							E180B5F62992CD9200425DB0 /* KlipperMon.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = KlipperMon.entitlements; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
							E180B5FB2992CD9300425DB0 /* KlipperMonTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KlipperMonTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
				
			||||||
 | 
							E180B5FF2992CD9300425DB0 /* KlipperMonTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlipperMonTests.swift; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
							E180B6052992CD9300425DB0 /* KlipperMonUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KlipperMonUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
				
			||||||
 | 
							E180B6092992CD9300425DB0 /* KlipperMonUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlipperMonUITests.swift; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
							E180B60B2992CD9300425DB0 /* KlipperMonUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlipperMonUITestsLaunchTests.swift; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
					/* End PBXFileReference section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Begin PBXFrameworksBuildPhase section */
 | 
				
			||||||
 | 
							E180B5E22992CD9100425DB0 /* Frameworks */ = {
 | 
				
			||||||
 | 
								isa = PBXFrameworksBuildPhase;
 | 
				
			||||||
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
 | 
								files = (
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B5F82992CD9300425DB0 /* Frameworks */ = {
 | 
				
			||||||
 | 
								isa = PBXFrameworksBuildPhase;
 | 
				
			||||||
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
 | 
								files = (
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6022992CD9300425DB0 /* Frameworks */ = {
 | 
				
			||||||
 | 
								isa = PBXFrameworksBuildPhase;
 | 
				
			||||||
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
 | 
								files = (
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					/* End PBXFrameworksBuildPhase section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Begin PBXGroup section */
 | 
				
			||||||
 | 
							E180B5DC2992CD9100425DB0 = {
 | 
				
			||||||
 | 
								isa = PBXGroup;
 | 
				
			||||||
 | 
								children = (
 | 
				
			||||||
 | 
									E180B5E72992CD9100425DB0 /* KlipperMon */,
 | 
				
			||||||
 | 
									E180B5FE2992CD9300425DB0 /* KlipperMonTests */,
 | 
				
			||||||
 | 
									E180B6082992CD9300425DB0 /* KlipperMonUITests */,
 | 
				
			||||||
 | 
									E180B5E62992CD9100425DB0 /* Products */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								sourceTree = "<group>";
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B5E62992CD9100425DB0 /* Products */ = {
 | 
				
			||||||
 | 
								isa = PBXGroup;
 | 
				
			||||||
 | 
								children = (
 | 
				
			||||||
 | 
									E180B5E52992CD9100425DB0 /* KlipperMon.app */,
 | 
				
			||||||
 | 
									E180B5FB2992CD9300425DB0 /* KlipperMonTests.xctest */,
 | 
				
			||||||
 | 
									E180B6052992CD9300425DB0 /* KlipperMonUITests.xctest */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								name = Products;
 | 
				
			||||||
 | 
								sourceTree = "<group>";
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B5E72992CD9100425DB0 /* KlipperMon */ = {
 | 
				
			||||||
 | 
								isa = PBXGroup;
 | 
				
			||||||
 | 
								children = (
 | 
				
			||||||
 | 
									E180B5E82992CD9100425DB0 /* KlipperMonApp.swift */,
 | 
				
			||||||
 | 
									E180B5EA2992CD9100425DB0 /* ContentView.swift */,
 | 
				
			||||||
 | 
									E180B5EC2992CD9200425DB0 /* Assets.xcassets */,
 | 
				
			||||||
 | 
									E180B5F12992CD9200425DB0 /* Persistence.swift */,
 | 
				
			||||||
 | 
									E180B5F62992CD9200425DB0 /* KlipperMon.entitlements */,
 | 
				
			||||||
 | 
									E180B5F32992CD9200425DB0 /* KlipperMon.xcdatamodeld */,
 | 
				
			||||||
 | 
									E180B5EE2992CD9200425DB0 /* Preview Content */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								path = KlipperMon;
 | 
				
			||||||
 | 
								sourceTree = "<group>";
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B5EE2992CD9200425DB0 /* Preview Content */ = {
 | 
				
			||||||
 | 
								isa = PBXGroup;
 | 
				
			||||||
 | 
								children = (
 | 
				
			||||||
 | 
									E180B5EF2992CD9200425DB0 /* Preview Assets.xcassets */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								path = "Preview Content";
 | 
				
			||||||
 | 
								sourceTree = "<group>";
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B5FE2992CD9300425DB0 /* KlipperMonTests */ = {
 | 
				
			||||||
 | 
								isa = PBXGroup;
 | 
				
			||||||
 | 
								children = (
 | 
				
			||||||
 | 
									E180B5FF2992CD9300425DB0 /* KlipperMonTests.swift */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								path = KlipperMonTests;
 | 
				
			||||||
 | 
								sourceTree = "<group>";
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6082992CD9300425DB0 /* KlipperMonUITests */ = {
 | 
				
			||||||
 | 
								isa = PBXGroup;
 | 
				
			||||||
 | 
								children = (
 | 
				
			||||||
 | 
									E180B6092992CD9300425DB0 /* KlipperMonUITests.swift */,
 | 
				
			||||||
 | 
									E180B60B2992CD9300425DB0 /* KlipperMonUITestsLaunchTests.swift */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								path = KlipperMonUITests;
 | 
				
			||||||
 | 
								sourceTree = "<group>";
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					/* End PBXGroup section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Begin PBXNativeTarget section */
 | 
				
			||||||
 | 
							E180B5E42992CD9100425DB0 /* KlipperMon */ = {
 | 
				
			||||||
 | 
								isa = PBXNativeTarget;
 | 
				
			||||||
 | 
								buildConfigurationList = E180B60F2992CD9300425DB0 /* Build configuration list for PBXNativeTarget "KlipperMon" */;
 | 
				
			||||||
 | 
								buildPhases = (
 | 
				
			||||||
 | 
									E180B5E12992CD9100425DB0 /* Sources */,
 | 
				
			||||||
 | 
									E180B5E22992CD9100425DB0 /* Frameworks */,
 | 
				
			||||||
 | 
									E180B5E32992CD9100425DB0 /* Resources */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								buildRules = (
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								dependencies = (
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								name = KlipperMon;
 | 
				
			||||||
 | 
								productName = KlipperMon;
 | 
				
			||||||
 | 
								productReference = E180B5E52992CD9100425DB0 /* KlipperMon.app */;
 | 
				
			||||||
 | 
								productType = "com.apple.product-type.application";
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B5FA2992CD9300425DB0 /* KlipperMonTests */ = {
 | 
				
			||||||
 | 
								isa = PBXNativeTarget;
 | 
				
			||||||
 | 
								buildConfigurationList = E180B6122992CD9300425DB0 /* Build configuration list for PBXNativeTarget "KlipperMonTests" */;
 | 
				
			||||||
 | 
								buildPhases = (
 | 
				
			||||||
 | 
									E180B5F72992CD9300425DB0 /* Sources */,
 | 
				
			||||||
 | 
									E180B5F82992CD9300425DB0 /* Frameworks */,
 | 
				
			||||||
 | 
									E180B5F92992CD9300425DB0 /* Resources */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								buildRules = (
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								dependencies = (
 | 
				
			||||||
 | 
									E180B5FD2992CD9300425DB0 /* PBXTargetDependency */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								name = KlipperMonTests;
 | 
				
			||||||
 | 
								productName = KlipperMonTests;
 | 
				
			||||||
 | 
								productReference = E180B5FB2992CD9300425DB0 /* KlipperMonTests.xctest */;
 | 
				
			||||||
 | 
								productType = "com.apple.product-type.bundle.unit-test";
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6042992CD9300425DB0 /* KlipperMonUITests */ = {
 | 
				
			||||||
 | 
								isa = PBXNativeTarget;
 | 
				
			||||||
 | 
								buildConfigurationList = E180B6152992CD9300425DB0 /* Build configuration list for PBXNativeTarget "KlipperMonUITests" */;
 | 
				
			||||||
 | 
								buildPhases = (
 | 
				
			||||||
 | 
									E180B6012992CD9300425DB0 /* Sources */,
 | 
				
			||||||
 | 
									E180B6022992CD9300425DB0 /* Frameworks */,
 | 
				
			||||||
 | 
									E180B6032992CD9300425DB0 /* Resources */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								buildRules = (
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								dependencies = (
 | 
				
			||||||
 | 
									E180B6072992CD9300425DB0 /* PBXTargetDependency */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								name = KlipperMonUITests;
 | 
				
			||||||
 | 
								productName = KlipperMonUITests;
 | 
				
			||||||
 | 
								productReference = E180B6052992CD9300425DB0 /* KlipperMonUITests.xctest */;
 | 
				
			||||||
 | 
								productType = "com.apple.product-type.bundle.ui-testing";
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					/* End PBXNativeTarget section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Begin PBXProject section */
 | 
				
			||||||
 | 
							E180B5DD2992CD9100425DB0 /* Project object */ = {
 | 
				
			||||||
 | 
								isa = PBXProject;
 | 
				
			||||||
 | 
								attributes = {
 | 
				
			||||||
 | 
									BuildIndependentTargetsInParallel = 1;
 | 
				
			||||||
 | 
									LastSwiftUpdateCheck = 1410;
 | 
				
			||||||
 | 
									LastUpgradeCheck = 1410;
 | 
				
			||||||
 | 
									TargetAttributes = {
 | 
				
			||||||
 | 
										E180B5E42992CD9100425DB0 = {
 | 
				
			||||||
 | 
											CreatedOnToolsVersion = 14.1;
 | 
				
			||||||
 | 
										};
 | 
				
			||||||
 | 
										E180B5FA2992CD9300425DB0 = {
 | 
				
			||||||
 | 
											CreatedOnToolsVersion = 14.1;
 | 
				
			||||||
 | 
											TestTargetID = E180B5E42992CD9100425DB0;
 | 
				
			||||||
 | 
										};
 | 
				
			||||||
 | 
										E180B6042992CD9300425DB0 = {
 | 
				
			||||||
 | 
											CreatedOnToolsVersion = 14.1;
 | 
				
			||||||
 | 
											TestTargetID = E180B5E42992CD9100425DB0;
 | 
				
			||||||
 | 
										};
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								buildConfigurationList = E180B5E02992CD9100425DB0 /* Build configuration list for PBXProject "KlipperMon" */;
 | 
				
			||||||
 | 
								compatibilityVersion = "Xcode 14.0";
 | 
				
			||||||
 | 
								developmentRegion = en;
 | 
				
			||||||
 | 
								hasScannedForEncodings = 0;
 | 
				
			||||||
 | 
								knownRegions = (
 | 
				
			||||||
 | 
									en,
 | 
				
			||||||
 | 
									Base,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								mainGroup = E180B5DC2992CD9100425DB0;
 | 
				
			||||||
 | 
								productRefGroup = E180B5E62992CD9100425DB0 /* Products */;
 | 
				
			||||||
 | 
								projectDirPath = "";
 | 
				
			||||||
 | 
								projectRoot = "";
 | 
				
			||||||
 | 
								targets = (
 | 
				
			||||||
 | 
									E180B5E42992CD9100425DB0 /* KlipperMon */,
 | 
				
			||||||
 | 
									E180B5FA2992CD9300425DB0 /* KlipperMonTests */,
 | 
				
			||||||
 | 
									E180B6042992CD9300425DB0 /* KlipperMonUITests */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					/* End PBXProject section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Begin PBXResourcesBuildPhase section */
 | 
				
			||||||
 | 
							E180B5E32992CD9100425DB0 /* Resources */ = {
 | 
				
			||||||
 | 
								isa = PBXResourcesBuildPhase;
 | 
				
			||||||
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
 | 
								files = (
 | 
				
			||||||
 | 
									E180B5F02992CD9200425DB0 /* Preview Assets.xcassets in Resources */,
 | 
				
			||||||
 | 
									E180B5ED2992CD9200425DB0 /* Assets.xcassets in Resources */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B5F92992CD9300425DB0 /* Resources */ = {
 | 
				
			||||||
 | 
								isa = PBXResourcesBuildPhase;
 | 
				
			||||||
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
 | 
								files = (
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6032992CD9300425DB0 /* Resources */ = {
 | 
				
			||||||
 | 
								isa = PBXResourcesBuildPhase;
 | 
				
			||||||
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
 | 
								files = (
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					/* End PBXResourcesBuildPhase section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Begin PBXSourcesBuildPhase section */
 | 
				
			||||||
 | 
							E180B5E12992CD9100425DB0 /* Sources */ = {
 | 
				
			||||||
 | 
								isa = PBXSourcesBuildPhase;
 | 
				
			||||||
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
 | 
								files = (
 | 
				
			||||||
 | 
									E180B5F52992CD9200425DB0 /* KlipperMon.xcdatamodeld in Sources */,
 | 
				
			||||||
 | 
									E180B5F22992CD9200425DB0 /* Persistence.swift in Sources */,
 | 
				
			||||||
 | 
									E180B5EB2992CD9100425DB0 /* ContentView.swift in Sources */,
 | 
				
			||||||
 | 
									E180B5E92992CD9100425DB0 /* KlipperMonApp.swift in Sources */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B5F72992CD9300425DB0 /* Sources */ = {
 | 
				
			||||||
 | 
								isa = PBXSourcesBuildPhase;
 | 
				
			||||||
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
 | 
								files = (
 | 
				
			||||||
 | 
									E180B6002992CD9300425DB0 /* KlipperMonTests.swift in Sources */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6012992CD9300425DB0 /* Sources */ = {
 | 
				
			||||||
 | 
								isa = PBXSourcesBuildPhase;
 | 
				
			||||||
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
 | 
								files = (
 | 
				
			||||||
 | 
									E180B60A2992CD9300425DB0 /* KlipperMonUITests.swift in Sources */,
 | 
				
			||||||
 | 
									E180B60C2992CD9300425DB0 /* KlipperMonUITestsLaunchTests.swift in Sources */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					/* End PBXSourcesBuildPhase section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Begin PBXTargetDependency section */
 | 
				
			||||||
 | 
							E180B5FD2992CD9300425DB0 /* PBXTargetDependency */ = {
 | 
				
			||||||
 | 
								isa = PBXTargetDependency;
 | 
				
			||||||
 | 
								target = E180B5E42992CD9100425DB0 /* KlipperMon */;
 | 
				
			||||||
 | 
								targetProxy = E180B5FC2992CD9300425DB0 /* PBXContainerItemProxy */;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6072992CD9300425DB0 /* PBXTargetDependency */ = {
 | 
				
			||||||
 | 
								isa = PBXTargetDependency;
 | 
				
			||||||
 | 
								target = E180B5E42992CD9100425DB0 /* KlipperMon */;
 | 
				
			||||||
 | 
								targetProxy = E180B6062992CD9300425DB0 /* PBXContainerItemProxy */;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					/* End PBXTargetDependency section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Begin XCBuildConfiguration section */
 | 
				
			||||||
 | 
							E180B60D2992CD9300425DB0 /* Debug */ = {
 | 
				
			||||||
 | 
								isa = XCBuildConfiguration;
 | 
				
			||||||
 | 
								buildSettings = {
 | 
				
			||||||
 | 
									ALWAYS_SEARCH_USER_PATHS = NO;
 | 
				
			||||||
 | 
									CLANG_ANALYZER_NONNULL = YES;
 | 
				
			||||||
 | 
									CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
 | 
				
			||||||
 | 
									CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
 | 
				
			||||||
 | 
									CLANG_ENABLE_MODULES = YES;
 | 
				
			||||||
 | 
									CLANG_ENABLE_OBJC_ARC = YES;
 | 
				
			||||||
 | 
									CLANG_ENABLE_OBJC_WEAK = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_BOOL_CONVERSION = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_COMMA = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_CONSTANT_CONVERSION = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 | 
				
			||||||
 | 
									CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_EMPTY_BODY = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_ENUM_CONVERSION = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_INFINITE_RECURSION = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_INT_CONVERSION = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 | 
				
			||||||
 | 
									CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_STRICT_PROTOTYPES = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_SUSPICIOUS_MOVE = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
 | 
				
			||||||
 | 
									CLANG_WARN_UNREACHABLE_CODE = YES;
 | 
				
			||||||
 | 
									CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 | 
				
			||||||
 | 
									COPY_PHASE_STRIP = NO;
 | 
				
			||||||
 | 
									DEBUG_INFORMATION_FORMAT = dwarf;
 | 
				
			||||||
 | 
									ENABLE_STRICT_OBJC_MSGSEND = YES;
 | 
				
			||||||
 | 
									ENABLE_TESTABILITY = YES;
 | 
				
			||||||
 | 
									GCC_C_LANGUAGE_STANDARD = gnu11;
 | 
				
			||||||
 | 
									GCC_DYNAMIC_NO_PIC = NO;
 | 
				
			||||||
 | 
									GCC_NO_COMMON_BLOCKS = YES;
 | 
				
			||||||
 | 
									GCC_OPTIMIZATION_LEVEL = 0;
 | 
				
			||||||
 | 
									GCC_PREPROCESSOR_DEFINITIONS = (
 | 
				
			||||||
 | 
										"DEBUG=1",
 | 
				
			||||||
 | 
										"$(inherited)",
 | 
				
			||||||
 | 
									);
 | 
				
			||||||
 | 
									GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 | 
				
			||||||
 | 
									GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 | 
				
			||||||
 | 
									GCC_WARN_UNDECLARED_SELECTOR = YES;
 | 
				
			||||||
 | 
									GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 | 
				
			||||||
 | 
									GCC_WARN_UNUSED_FUNCTION = YES;
 | 
				
			||||||
 | 
									GCC_WARN_UNUSED_VARIABLE = YES;
 | 
				
			||||||
 | 
									MACOSX_DEPLOYMENT_TARGET = 13.0;
 | 
				
			||||||
 | 
									MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
 | 
				
			||||||
 | 
									MTL_FAST_MATH = YES;
 | 
				
			||||||
 | 
									ONLY_ACTIVE_ARCH = YES;
 | 
				
			||||||
 | 
									SDKROOT = macosx;
 | 
				
			||||||
 | 
									SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
 | 
				
			||||||
 | 
									SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								name = Debug;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B60E2992CD9300425DB0 /* Release */ = {
 | 
				
			||||||
 | 
								isa = XCBuildConfiguration;
 | 
				
			||||||
 | 
								buildSettings = {
 | 
				
			||||||
 | 
									ALWAYS_SEARCH_USER_PATHS = NO;
 | 
				
			||||||
 | 
									CLANG_ANALYZER_NONNULL = YES;
 | 
				
			||||||
 | 
									CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
 | 
				
			||||||
 | 
									CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
 | 
				
			||||||
 | 
									CLANG_ENABLE_MODULES = YES;
 | 
				
			||||||
 | 
									CLANG_ENABLE_OBJC_ARC = YES;
 | 
				
			||||||
 | 
									CLANG_ENABLE_OBJC_WEAK = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_BOOL_CONVERSION = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_COMMA = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_CONSTANT_CONVERSION = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 | 
				
			||||||
 | 
									CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_EMPTY_BODY = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_ENUM_CONVERSION = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_INFINITE_RECURSION = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_INT_CONVERSION = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 | 
				
			||||||
 | 
									CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_STRICT_PROTOTYPES = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_SUSPICIOUS_MOVE = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
 | 
				
			||||||
 | 
									CLANG_WARN_UNREACHABLE_CODE = YES;
 | 
				
			||||||
 | 
									CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 | 
				
			||||||
 | 
									COPY_PHASE_STRIP = NO;
 | 
				
			||||||
 | 
									DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 | 
				
			||||||
 | 
									ENABLE_NS_ASSERTIONS = NO;
 | 
				
			||||||
 | 
									ENABLE_STRICT_OBJC_MSGSEND = YES;
 | 
				
			||||||
 | 
									GCC_C_LANGUAGE_STANDARD = gnu11;
 | 
				
			||||||
 | 
									GCC_NO_COMMON_BLOCKS = YES;
 | 
				
			||||||
 | 
									GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 | 
				
			||||||
 | 
									GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 | 
				
			||||||
 | 
									GCC_WARN_UNDECLARED_SELECTOR = YES;
 | 
				
			||||||
 | 
									GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 | 
				
			||||||
 | 
									GCC_WARN_UNUSED_FUNCTION = YES;
 | 
				
			||||||
 | 
									GCC_WARN_UNUSED_VARIABLE = YES;
 | 
				
			||||||
 | 
									MACOSX_DEPLOYMENT_TARGET = 13.0;
 | 
				
			||||||
 | 
									MTL_ENABLE_DEBUG_INFO = NO;
 | 
				
			||||||
 | 
									MTL_FAST_MATH = YES;
 | 
				
			||||||
 | 
									SDKROOT = macosx;
 | 
				
			||||||
 | 
									SWIFT_COMPILATION_MODE = wholemodule;
 | 
				
			||||||
 | 
									SWIFT_OPTIMIZATION_LEVEL = "-O";
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								name = Release;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6102992CD9300425DB0 /* Debug */ = {
 | 
				
			||||||
 | 
								isa = XCBuildConfiguration;
 | 
				
			||||||
 | 
								buildSettings = {
 | 
				
			||||||
 | 
									ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 | 
				
			||||||
 | 
									ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 | 
				
			||||||
 | 
									CODE_SIGN_ENTITLEMENTS = KlipperMon/KlipperMon.entitlements;
 | 
				
			||||||
 | 
									CODE_SIGN_STYLE = Automatic;
 | 
				
			||||||
 | 
									COMBINE_HIDPI_IMAGES = YES;
 | 
				
			||||||
 | 
									CURRENT_PROJECT_VERSION = 1;
 | 
				
			||||||
 | 
									DEVELOPMENT_ASSET_PATHS = "\"KlipperMon/Preview Content\"";
 | 
				
			||||||
 | 
									DEVELOPMENT_TEAM = W9ASV855X5;
 | 
				
			||||||
 | 
									ENABLE_HARDENED_RUNTIME = YES;
 | 
				
			||||||
 | 
									ENABLE_PREVIEWS = YES;
 | 
				
			||||||
 | 
									GENERATE_INFOPLIST_FILE = YES;
 | 
				
			||||||
 | 
									INFOPLIST_KEY_NSHumanReadableCopyright = "";
 | 
				
			||||||
 | 
									LD_RUNPATH_SEARCH_PATHS = (
 | 
				
			||||||
 | 
										"$(inherited)",
 | 
				
			||||||
 | 
										"@executable_path/../Frameworks",
 | 
				
			||||||
 | 
									);
 | 
				
			||||||
 | 
									MARKETING_VERSION = 1.0;
 | 
				
			||||||
 | 
									PRODUCT_BUNDLE_IDENTIFIER = info.maddie.KlipperMon;
 | 
				
			||||||
 | 
									PRODUCT_NAME = "$(TARGET_NAME)";
 | 
				
			||||||
 | 
									SWIFT_EMIT_LOC_STRINGS = YES;
 | 
				
			||||||
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								name = Debug;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6112992CD9300425DB0 /* Release */ = {
 | 
				
			||||||
 | 
								isa = XCBuildConfiguration;
 | 
				
			||||||
 | 
								buildSettings = {
 | 
				
			||||||
 | 
									ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 | 
				
			||||||
 | 
									ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 | 
				
			||||||
 | 
									CODE_SIGN_ENTITLEMENTS = KlipperMon/KlipperMon.entitlements;
 | 
				
			||||||
 | 
									CODE_SIGN_STYLE = Automatic;
 | 
				
			||||||
 | 
									COMBINE_HIDPI_IMAGES = YES;
 | 
				
			||||||
 | 
									CURRENT_PROJECT_VERSION = 1;
 | 
				
			||||||
 | 
									DEVELOPMENT_ASSET_PATHS = "\"KlipperMon/Preview Content\"";
 | 
				
			||||||
 | 
									DEVELOPMENT_TEAM = W9ASV855X5;
 | 
				
			||||||
 | 
									ENABLE_HARDENED_RUNTIME = YES;
 | 
				
			||||||
 | 
									ENABLE_PREVIEWS = YES;
 | 
				
			||||||
 | 
									GENERATE_INFOPLIST_FILE = YES;
 | 
				
			||||||
 | 
									INFOPLIST_KEY_NSHumanReadableCopyright = "";
 | 
				
			||||||
 | 
									LD_RUNPATH_SEARCH_PATHS = (
 | 
				
			||||||
 | 
										"$(inherited)",
 | 
				
			||||||
 | 
										"@executable_path/../Frameworks",
 | 
				
			||||||
 | 
									);
 | 
				
			||||||
 | 
									MARKETING_VERSION = 1.0;
 | 
				
			||||||
 | 
									PRODUCT_BUNDLE_IDENTIFIER = info.maddie.KlipperMon;
 | 
				
			||||||
 | 
									PRODUCT_NAME = "$(TARGET_NAME)";
 | 
				
			||||||
 | 
									SWIFT_EMIT_LOC_STRINGS = YES;
 | 
				
			||||||
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								name = Release;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6132992CD9300425DB0 /* Debug */ = {
 | 
				
			||||||
 | 
								isa = XCBuildConfiguration;
 | 
				
			||||||
 | 
								buildSettings = {
 | 
				
			||||||
 | 
									ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
 | 
				
			||||||
 | 
									BUNDLE_LOADER = "$(TEST_HOST)";
 | 
				
			||||||
 | 
									CODE_SIGN_STYLE = Automatic;
 | 
				
			||||||
 | 
									CURRENT_PROJECT_VERSION = 1;
 | 
				
			||||||
 | 
									DEVELOPMENT_TEAM = W9ASV855X5;
 | 
				
			||||||
 | 
									GENERATE_INFOPLIST_FILE = YES;
 | 
				
			||||||
 | 
									MACOSX_DEPLOYMENT_TARGET = 13.0;
 | 
				
			||||||
 | 
									MARKETING_VERSION = 1.0;
 | 
				
			||||||
 | 
									PRODUCT_BUNDLE_IDENTIFIER = info.maddie.KlipperMonTests;
 | 
				
			||||||
 | 
									PRODUCT_NAME = "$(TARGET_NAME)";
 | 
				
			||||||
 | 
									SWIFT_EMIT_LOC_STRINGS = NO;
 | 
				
			||||||
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
 | 
									TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KlipperMon.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/KlipperMon";
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								name = Debug;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6142992CD9300425DB0 /* Release */ = {
 | 
				
			||||||
 | 
								isa = XCBuildConfiguration;
 | 
				
			||||||
 | 
								buildSettings = {
 | 
				
			||||||
 | 
									ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
 | 
				
			||||||
 | 
									BUNDLE_LOADER = "$(TEST_HOST)";
 | 
				
			||||||
 | 
									CODE_SIGN_STYLE = Automatic;
 | 
				
			||||||
 | 
									CURRENT_PROJECT_VERSION = 1;
 | 
				
			||||||
 | 
									DEVELOPMENT_TEAM = W9ASV855X5;
 | 
				
			||||||
 | 
									GENERATE_INFOPLIST_FILE = YES;
 | 
				
			||||||
 | 
									MACOSX_DEPLOYMENT_TARGET = 13.0;
 | 
				
			||||||
 | 
									MARKETING_VERSION = 1.0;
 | 
				
			||||||
 | 
									PRODUCT_BUNDLE_IDENTIFIER = info.maddie.KlipperMonTests;
 | 
				
			||||||
 | 
									PRODUCT_NAME = "$(TARGET_NAME)";
 | 
				
			||||||
 | 
									SWIFT_EMIT_LOC_STRINGS = NO;
 | 
				
			||||||
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
 | 
									TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KlipperMon.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/KlipperMon";
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								name = Release;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6162992CD9300425DB0 /* Debug */ = {
 | 
				
			||||||
 | 
								isa = XCBuildConfiguration;
 | 
				
			||||||
 | 
								buildSettings = {
 | 
				
			||||||
 | 
									ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
 | 
				
			||||||
 | 
									CODE_SIGN_STYLE = Automatic;
 | 
				
			||||||
 | 
									CURRENT_PROJECT_VERSION = 1;
 | 
				
			||||||
 | 
									DEVELOPMENT_TEAM = W9ASV855X5;
 | 
				
			||||||
 | 
									GENERATE_INFOPLIST_FILE = YES;
 | 
				
			||||||
 | 
									MARKETING_VERSION = 1.0;
 | 
				
			||||||
 | 
									PRODUCT_BUNDLE_IDENTIFIER = info.maddie.KlipperMonUITests;
 | 
				
			||||||
 | 
									PRODUCT_NAME = "$(TARGET_NAME)";
 | 
				
			||||||
 | 
									SWIFT_EMIT_LOC_STRINGS = NO;
 | 
				
			||||||
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
 | 
									TEST_TARGET_NAME = KlipperMon;
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								name = Debug;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6172992CD9300425DB0 /* Release */ = {
 | 
				
			||||||
 | 
								isa = XCBuildConfiguration;
 | 
				
			||||||
 | 
								buildSettings = {
 | 
				
			||||||
 | 
									ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
 | 
				
			||||||
 | 
									CODE_SIGN_STYLE = Automatic;
 | 
				
			||||||
 | 
									CURRENT_PROJECT_VERSION = 1;
 | 
				
			||||||
 | 
									DEVELOPMENT_TEAM = W9ASV855X5;
 | 
				
			||||||
 | 
									GENERATE_INFOPLIST_FILE = YES;
 | 
				
			||||||
 | 
									MARKETING_VERSION = 1.0;
 | 
				
			||||||
 | 
									PRODUCT_BUNDLE_IDENTIFIER = info.maddie.KlipperMonUITests;
 | 
				
			||||||
 | 
									PRODUCT_NAME = "$(TARGET_NAME)";
 | 
				
			||||||
 | 
									SWIFT_EMIT_LOC_STRINGS = NO;
 | 
				
			||||||
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
 | 
									TEST_TARGET_NAME = KlipperMon;
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								name = Release;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					/* End XCBuildConfiguration section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Begin XCConfigurationList section */
 | 
				
			||||||
 | 
							E180B5E02992CD9100425DB0 /* Build configuration list for PBXProject "KlipperMon" */ = {
 | 
				
			||||||
 | 
								isa = XCConfigurationList;
 | 
				
			||||||
 | 
								buildConfigurations = (
 | 
				
			||||||
 | 
									E180B60D2992CD9300425DB0 /* Debug */,
 | 
				
			||||||
 | 
									E180B60E2992CD9300425DB0 /* Release */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								defaultConfigurationIsVisible = 0;
 | 
				
			||||||
 | 
								defaultConfigurationName = Release;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B60F2992CD9300425DB0 /* Build configuration list for PBXNativeTarget "KlipperMon" */ = {
 | 
				
			||||||
 | 
								isa = XCConfigurationList;
 | 
				
			||||||
 | 
								buildConfigurations = (
 | 
				
			||||||
 | 
									E180B6102992CD9300425DB0 /* Debug */,
 | 
				
			||||||
 | 
									E180B6112992CD9300425DB0 /* Release */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								defaultConfigurationIsVisible = 0;
 | 
				
			||||||
 | 
								defaultConfigurationName = Release;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6122992CD9300425DB0 /* Build configuration list for PBXNativeTarget "KlipperMonTests" */ = {
 | 
				
			||||||
 | 
								isa = XCConfigurationList;
 | 
				
			||||||
 | 
								buildConfigurations = (
 | 
				
			||||||
 | 
									E180B6132992CD9300425DB0 /* Debug */,
 | 
				
			||||||
 | 
									E180B6142992CD9300425DB0 /* Release */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								defaultConfigurationIsVisible = 0;
 | 
				
			||||||
 | 
								defaultConfigurationName = Release;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							E180B6152992CD9300425DB0 /* Build configuration list for PBXNativeTarget "KlipperMonUITests" */ = {
 | 
				
			||||||
 | 
								isa = XCConfigurationList;
 | 
				
			||||||
 | 
								buildConfigurations = (
 | 
				
			||||||
 | 
									E180B6162992CD9300425DB0 /* Debug */,
 | 
				
			||||||
 | 
									E180B6172992CD9300425DB0 /* Release */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								defaultConfigurationIsVisible = 0;
 | 
				
			||||||
 | 
								defaultConfigurationName = Release;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					/* End XCConfigurationList section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Begin XCVersionGroup section */
 | 
				
			||||||
 | 
							E180B5F32992CD9200425DB0 /* KlipperMon.xcdatamodeld */ = {
 | 
				
			||||||
 | 
								isa = XCVersionGroup;
 | 
				
			||||||
 | 
								children = (
 | 
				
			||||||
 | 
									E180B5F42992CD9200425DB0 /* KlipperMon.xcdatamodel */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								currentVersion = E180B5F42992CD9200425DB0 /* KlipperMon.xcdatamodel */;
 | 
				
			||||||
 | 
								path = KlipperMon.xcdatamodeld;
 | 
				
			||||||
 | 
								sourceTree = "<group>";
 | 
				
			||||||
 | 
								versionGroupType = wrapper.xcdatamodel;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					/* End XCVersionGroup section */
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						rootObject = E180B5DD2992CD9100425DB0 /* Project object */;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										7
									
								
								KlipperMon.xcodeproj/project.xcworkspace/contents.xcworkspacedata
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								KlipperMon.xcodeproj/project.xcworkspace/contents.xcworkspacedata
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<Workspace
 | 
				
			||||||
 | 
					   version = "1.0">
 | 
				
			||||||
 | 
					   <FileRef
 | 
				
			||||||
 | 
					      location = "self:">
 | 
				
			||||||
 | 
					   </FileRef>
 | 
				
			||||||
 | 
					</Workspace>
 | 
				
			||||||
@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
				
			||||||
 | 
					<plist version="1.0">
 | 
				
			||||||
 | 
					<dict>
 | 
				
			||||||
 | 
						<key>IDEDidComputeMac32BitWarning</key>
 | 
				
			||||||
 | 
						<true/>
 | 
				
			||||||
 | 
					</dict>
 | 
				
			||||||
 | 
					</plist>
 | 
				
			||||||
@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
				
			||||||
 | 
					<plist version="1.0">
 | 
				
			||||||
 | 
					<dict>
 | 
				
			||||||
 | 
						<key>SchemeUserState</key>
 | 
				
			||||||
 | 
						<dict>
 | 
				
			||||||
 | 
							<key>KlipperMon.xcscheme_^#shared#^_</key>
 | 
				
			||||||
 | 
							<dict>
 | 
				
			||||||
 | 
								<key>orderHint</key>
 | 
				
			||||||
 | 
								<integer>0</integer>
 | 
				
			||||||
 | 
							</dict>
 | 
				
			||||||
 | 
						</dict>
 | 
				
			||||||
 | 
					</dict>
 | 
				
			||||||
 | 
					</plist>
 | 
				
			||||||
@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "colors" : [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "idiom" : "universal"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "info" : {
 | 
				
			||||||
 | 
					    "author" : "xcode",
 | 
				
			||||||
 | 
					    "version" : 1
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										58
									
								
								KlipperMon/Assets.xcassets/AppIcon.appiconset/Contents.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								KlipperMon/Assets.xcassets/AppIcon.appiconset/Contents.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "images" : [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "idiom" : "mac",
 | 
				
			||||||
 | 
					      "scale" : "1x",
 | 
				
			||||||
 | 
					      "size" : "16x16"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "idiom" : "mac",
 | 
				
			||||||
 | 
					      "scale" : "2x",
 | 
				
			||||||
 | 
					      "size" : "16x16"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "idiom" : "mac",
 | 
				
			||||||
 | 
					      "scale" : "1x",
 | 
				
			||||||
 | 
					      "size" : "32x32"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "idiom" : "mac",
 | 
				
			||||||
 | 
					      "scale" : "2x",
 | 
				
			||||||
 | 
					      "size" : "32x32"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "idiom" : "mac",
 | 
				
			||||||
 | 
					      "scale" : "1x",
 | 
				
			||||||
 | 
					      "size" : "128x128"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "idiom" : "mac",
 | 
				
			||||||
 | 
					      "scale" : "2x",
 | 
				
			||||||
 | 
					      "size" : "128x128"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "idiom" : "mac",
 | 
				
			||||||
 | 
					      "scale" : "1x",
 | 
				
			||||||
 | 
					      "size" : "256x256"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "idiom" : "mac",
 | 
				
			||||||
 | 
					      "scale" : "2x",
 | 
				
			||||||
 | 
					      "size" : "256x256"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "idiom" : "mac",
 | 
				
			||||||
 | 
					      "scale" : "1x",
 | 
				
			||||||
 | 
					      "size" : "512x512"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "idiom" : "mac",
 | 
				
			||||||
 | 
					      "scale" : "2x",
 | 
				
			||||||
 | 
					      "size" : "512x512"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "info" : {
 | 
				
			||||||
 | 
					    "author" : "xcode",
 | 
				
			||||||
 | 
					    "version" : 1
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										6
									
								
								KlipperMon/Assets.xcassets/Contents.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								KlipperMon/Assets.xcassets/Contents.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "info" : {
 | 
				
			||||||
 | 
					    "author" : "xcode",
 | 
				
			||||||
 | 
					    "version" : 1
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										85
									
								
								KlipperMon/ContentView.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								KlipperMon/ContentView.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					//  ContentView.swift
 | 
				
			||||||
 | 
					//  KlipperMon
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by maddiefuzz on 2/7/23.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import SwiftUI
 | 
				
			||||||
 | 
					import CoreData
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct ContentView: View {
 | 
				
			||||||
 | 
					    @Environment(\.managedObjectContext) private var viewContext
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @FetchRequest(
 | 
				
			||||||
 | 
					        sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: true)],
 | 
				
			||||||
 | 
					        animation: .default)
 | 
				
			||||||
 | 
					    private var items: FetchedResults<Item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var body: some View {
 | 
				
			||||||
 | 
					        NavigationView {
 | 
				
			||||||
 | 
					            List {
 | 
				
			||||||
 | 
					                ForEach(items) { item in
 | 
				
			||||||
 | 
					                    NavigationLink {
 | 
				
			||||||
 | 
					                        Text("Item at \(item.timestamp!, formatter: itemFormatter)")
 | 
				
			||||||
 | 
					                    } label: {
 | 
				
			||||||
 | 
					                        Text(item.timestamp!, formatter: itemFormatter)
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                .onDelete(perform: deleteItems)
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            .toolbar {
 | 
				
			||||||
 | 
					                ToolbarItem {
 | 
				
			||||||
 | 
					                    Button(action: addItem) {
 | 
				
			||||||
 | 
					                        Label("Add Item", systemImage: "plus")
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            Text("Select an item")
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private func addItem() {
 | 
				
			||||||
 | 
					        withAnimation {
 | 
				
			||||||
 | 
					            let newItem = Item(context: viewContext)
 | 
				
			||||||
 | 
					            newItem.timestamp = Date()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            do {
 | 
				
			||||||
 | 
					                try viewContext.save()
 | 
				
			||||||
 | 
					            } catch {
 | 
				
			||||||
 | 
					                // Replace this implementation with code to handle the error appropriately.
 | 
				
			||||||
 | 
					                // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
 | 
				
			||||||
 | 
					                let nsError = error as NSError
 | 
				
			||||||
 | 
					                fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private func deleteItems(offsets: IndexSet) {
 | 
				
			||||||
 | 
					        withAnimation {
 | 
				
			||||||
 | 
					            offsets.map { items[$0] }.forEach(viewContext.delete)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            do {
 | 
				
			||||||
 | 
					                try viewContext.save()
 | 
				
			||||||
 | 
					            } catch {
 | 
				
			||||||
 | 
					                // Replace this implementation with code to handle the error appropriately.
 | 
				
			||||||
 | 
					                // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
 | 
				
			||||||
 | 
					                let nsError = error as NSError
 | 
				
			||||||
 | 
					                fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private let itemFormatter: DateFormatter = {
 | 
				
			||||||
 | 
					    let formatter = DateFormatter()
 | 
				
			||||||
 | 
					    formatter.dateStyle = .short
 | 
				
			||||||
 | 
					    formatter.timeStyle = .medium
 | 
				
			||||||
 | 
					    return formatter
 | 
				
			||||||
 | 
					}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct ContentView_Previews: PreviewProvider {
 | 
				
			||||||
 | 
					    static var previews: some View {
 | 
				
			||||||
 | 
					        ContentView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										10
									
								
								KlipperMon/KlipperMon.entitlements
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								KlipperMon/KlipperMon.entitlements
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
				
			||||||
 | 
					<plist version="1.0">
 | 
				
			||||||
 | 
					<dict>
 | 
				
			||||||
 | 
					    <key>com.apple.security.app-sandbox</key>
 | 
				
			||||||
 | 
					    <true/>
 | 
				
			||||||
 | 
					    <key>com.apple.security.files.user-selected.read-only</key>
 | 
				
			||||||
 | 
					    <true/>
 | 
				
			||||||
 | 
					</dict>
 | 
				
			||||||
 | 
					</plist>
 | 
				
			||||||
							
								
								
									
										8
									
								
								KlipperMon/KlipperMon.xcdatamodeld/.xccurrentversion
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								KlipperMon/KlipperMon.xcdatamodeld/.xccurrentversion
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
				
			||||||
 | 
					<plist version="1.0">
 | 
				
			||||||
 | 
					<dict>
 | 
				
			||||||
 | 
						<key>_XCCurrentVersionName</key>
 | 
				
			||||||
 | 
						<string>KlipperMon.xcdatamodel</string>
 | 
				
			||||||
 | 
					</dict>
 | 
				
			||||||
 | 
					</plist>
 | 
				
			||||||
@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 | 
				
			||||||
 | 
					<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="1" systemVersion="11A491" minimumToolsVersion="Automatic" sourceLanguage="Swift" usedWithCloudKit="false" userDefinedModelVersionIdentifier="">
 | 
				
			||||||
 | 
					    <entity name="Item" representedClassName="Item" syncable="YES" codeGenerationType="class">
 | 
				
			||||||
 | 
					        <attribute name="timestamp" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
 | 
				
			||||||
 | 
					    </entity>
 | 
				
			||||||
 | 
					    <elements>
 | 
				
			||||||
 | 
					        <element name="Item" positionX="-63" positionY="-18" width="128" height="44"/>
 | 
				
			||||||
 | 
					    </elements>
 | 
				
			||||||
 | 
					</model>
 | 
				
			||||||
							
								
								
									
										20
									
								
								KlipperMon/KlipperMonApp.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								KlipperMon/KlipperMonApp.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					//  KlipperMonApp.swift
 | 
				
			||||||
 | 
					//  KlipperMon
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by maddiefuzz on 2/7/23.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import SwiftUI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@main
 | 
				
			||||||
 | 
					struct KlipperMonApp: App {
 | 
				
			||||||
 | 
					    let persistenceController = PersistenceController.shared
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var body: some Scene {
 | 
				
			||||||
 | 
					        WindowGroup {
 | 
				
			||||||
 | 
					            ContentView()
 | 
				
			||||||
 | 
					                .environment(\.managedObjectContext, persistenceController.container.viewContext)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										56
									
								
								KlipperMon/Persistence.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								KlipperMon/Persistence.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Persistence.swift
 | 
				
			||||||
 | 
					//  KlipperMon
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by maddiefuzz on 2/7/23.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import CoreData
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct PersistenceController {
 | 
				
			||||||
 | 
					    static let shared = PersistenceController()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static var preview: PersistenceController = {
 | 
				
			||||||
 | 
					        let result = PersistenceController(inMemory: true)
 | 
				
			||||||
 | 
					        let viewContext = result.container.viewContext
 | 
				
			||||||
 | 
					        for _ in 0..<10 {
 | 
				
			||||||
 | 
					            let newItem = Item(context: viewContext)
 | 
				
			||||||
 | 
					            newItem.timestamp = Date()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        do {
 | 
				
			||||||
 | 
					            try viewContext.save()
 | 
				
			||||||
 | 
					        } catch {
 | 
				
			||||||
 | 
					            // Replace this implementation with code to handle the error appropriately.
 | 
				
			||||||
 | 
					            // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
 | 
				
			||||||
 | 
					            let nsError = error as NSError
 | 
				
			||||||
 | 
					            fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return result
 | 
				
			||||||
 | 
					    }()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let container: NSPersistentContainer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    init(inMemory: Bool = false) {
 | 
				
			||||||
 | 
					        container = NSPersistentContainer(name: "KlipperMon")
 | 
				
			||||||
 | 
					        if inMemory {
 | 
				
			||||||
 | 
					            container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
 | 
				
			||||||
 | 
					            if let error = error as NSError? {
 | 
				
			||||||
 | 
					                // Replace this implementation with code to handle the error appropriately.
 | 
				
			||||||
 | 
					                // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                /*
 | 
				
			||||||
 | 
					                 Typical reasons for an error here include:
 | 
				
			||||||
 | 
					                 * The parent directory does not exist, cannot be created, or disallows writing.
 | 
				
			||||||
 | 
					                 * The persistent store is not accessible, due to permissions or data protection when the device is locked.
 | 
				
			||||||
 | 
					                 * The device is out of space.
 | 
				
			||||||
 | 
					                 * The store could not be migrated to the current model version.
 | 
				
			||||||
 | 
					                 Check the error message to determine what the actual problem was.
 | 
				
			||||||
 | 
					                 */
 | 
				
			||||||
 | 
					                fatalError("Unresolved error \(error), \(error.userInfo)")
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        container.viewContext.automaticallyMergesChangesFromParent = true
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "info" : {
 | 
				
			||||||
 | 
					    "author" : "xcode",
 | 
				
			||||||
 | 
					    "version" : 1
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										36
									
								
								KlipperMonTests/KlipperMonTests.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								KlipperMonTests/KlipperMonTests.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					//  KlipperMonTests.swift
 | 
				
			||||||
 | 
					//  KlipperMonTests
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by maddiefuzz on 2/7/23.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import XCTest
 | 
				
			||||||
 | 
					@testable import KlipperMon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					final class KlipperMonTests: XCTestCase {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override func setUpWithError() throws {
 | 
				
			||||||
 | 
					        // Put setup code here. This method is called before the invocation of each test method in the class.
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override func tearDownWithError() throws {
 | 
				
			||||||
 | 
					        // Put teardown code here. This method is called after the invocation of each test method in the class.
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func testExample() throws {
 | 
				
			||||||
 | 
					        // This is an example of a functional test case.
 | 
				
			||||||
 | 
					        // Use XCTAssert and related functions to verify your tests produce the correct results.
 | 
				
			||||||
 | 
					        // Any test you write for XCTest can be annotated as throws and async.
 | 
				
			||||||
 | 
					        // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
 | 
				
			||||||
 | 
					        // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func testPerformanceExample() throws {
 | 
				
			||||||
 | 
					        // This is an example of a performance test case.
 | 
				
			||||||
 | 
					        self.measure {
 | 
				
			||||||
 | 
					            // Put the code you want to measure the time of here.
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										41
									
								
								KlipperMonUITests/KlipperMonUITests.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								KlipperMonUITests/KlipperMonUITests.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					//  KlipperMonUITests.swift
 | 
				
			||||||
 | 
					//  KlipperMonUITests
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by maddiefuzz on 2/7/23.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import XCTest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					final class KlipperMonUITests: XCTestCase {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override func setUpWithError() throws {
 | 
				
			||||||
 | 
					        // Put setup code here. This method is called before the invocation of each test method in the class.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // In UI tests it is usually best to stop immediately when a failure occurs.
 | 
				
			||||||
 | 
					        continueAfterFailure = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override func tearDownWithError() throws {
 | 
				
			||||||
 | 
					        // Put teardown code here. This method is called after the invocation of each test method in the class.
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func testExample() throws {
 | 
				
			||||||
 | 
					        // UI tests must launch the application that they test.
 | 
				
			||||||
 | 
					        let app = XCUIApplication()
 | 
				
			||||||
 | 
					        app.launch()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Use XCTAssert and related functions to verify your tests produce the correct results.
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func testLaunchPerformance() throws {
 | 
				
			||||||
 | 
					        if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {
 | 
				
			||||||
 | 
					            // This measures how long it takes to launch your application.
 | 
				
			||||||
 | 
					            measure(metrics: [XCTApplicationLaunchMetric()]) {
 | 
				
			||||||
 | 
					                XCUIApplication().launch()
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										32
									
								
								KlipperMonUITests/KlipperMonUITestsLaunchTests.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								KlipperMonUITests/KlipperMonUITestsLaunchTests.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					//  KlipperMonUITestsLaunchTests.swift
 | 
				
			||||||
 | 
					//  KlipperMonUITests
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by maddiefuzz on 2/7/23.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import XCTest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					final class KlipperMonUITestsLaunchTests: XCTestCase {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override class var runsForEachTargetApplicationUIConfiguration: Bool {
 | 
				
			||||||
 | 
					        true
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override func setUpWithError() throws {
 | 
				
			||||||
 | 
					        continueAfterFailure = false
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func testLaunch() throws {
 | 
				
			||||||
 | 
					        let app = XCUIApplication()
 | 
				
			||||||
 | 
					        app.launch()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Insert steps here to perform after app launch but before taking a screenshot,
 | 
				
			||||||
 | 
					        // such as logging into a test account or navigating somewhere in the app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let attachment = XCTAttachment(screenshot: app.screenshot())
 | 
				
			||||||
 | 
					        attachment.name = "Launch Screen"
 | 
				
			||||||
 | 
					        attachment.lifetime = .keepAlways
 | 
				
			||||||
 | 
					        add(attachment)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user