Merge branch 'main' into fix_hasrunsetup
							
								
								
									
										2
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						@ -77,7 +77,7 @@ jobs:
 | 
				
			|||||||
      uses: actions/attest-build-provenance@v2
 | 
					      uses: actions/attest-build-provenance@v2
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        subject-name: "Secretive.zip"
 | 
					        subject-name: "Secretive.zip"
 | 
				
			||||||
        subject-digest: ${{ steps.upload.outputs.artifact-digest }}
 | 
					        subject-digest: sha256:${{ steps.upload.outputs.artifact-digest }}
 | 
				
			||||||
    - name: Create Release
 | 
					    - name: Create Release
 | 
				
			||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
            sed -i.tmp "s/RUN_ID/$RUN_ID/g" .github/templates/release.md
 | 
					            sed -i.tmp "s/RUN_ID/$RUN_ID/g" .github/templates/release.md
 | 
				
			||||||
 | 
				
			|||||||
@ -50,16 +50,16 @@ extension SecureEnclave {
 | 
				
			|||||||
                    let secret = Secret(id: UUID().uuidString, name: name, publicKey: parsed.publicKey.x963Representation, attributes: Attributes(keyType: .init(algorithm: .ecdsa, size: 256), authentication: auth))
 | 
					                    let secret = Secret(id: UUID().uuidString, name: name, publicKey: parsed.publicKey.x963Representation, attributes: Attributes(keyType: .init(algorithm: .ecdsa, size: 256), authentication: auth))
 | 
				
			||||||
                    guard !migratedPublicKeys.contains(parsed.publicKey.x963Representation) else {
 | 
					                    guard !migratedPublicKeys.contains(parsed.publicKey.x963Representation) else {
 | 
				
			||||||
                        logger.log("Skipping \(name), public key already present. Marking as migrated.")
 | 
					                        logger.log("Skipping \(name), public key already present. Marking as migrated.")
 | 
				
			||||||
                        try markMigrated(secret: secret, oldID: id)
 | 
					                        markMigrated(secret: secret, oldID: id)
 | 
				
			||||||
                        continue
 | 
					                        continue
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    logger.log("Migrating \(name).")
 | 
					                    logger.log("Migrating \(name).")
 | 
				
			||||||
                    try store.saveKey(tokenObjectID, name: name, attributes: secret.attributes)
 | 
					                    try store.saveKey(tokenObjectID, name: name, attributes: secret.attributes)
 | 
				
			||||||
                    logger.log("Migrated \(name).")
 | 
					                    logger.log("Migrated \(name).")
 | 
				
			||||||
                    try markMigrated(secret: secret, oldID: id)
 | 
					                    markMigrated(secret: secret, oldID: id)
 | 
				
			||||||
                    migratedAny = true
 | 
					                    migratedAny = true
 | 
				
			||||||
                } catch {
 | 
					                } catch {
 | 
				
			||||||
                    logger.error("Failed to migrate \(name): \(error).")
 | 
					                    logger.error("Failed to migrate \(name): \(error.localizedDescription).")
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if migratedAny {
 | 
					            if migratedAny {
 | 
				
			||||||
@ -69,10 +69,10 @@ extension SecureEnclave {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public func markMigrated(secret: Secret, oldID: Data) throws {
 | 
					        public func markMigrated(secret: Secret, oldID: Data) {
 | 
				
			||||||
            let updateQuery = KeychainDictionary([
 | 
					            let updateQuery = KeychainDictionary([
 | 
				
			||||||
                kSecClass: kSecClassKey,
 | 
					                kSecClass: kSecClassKey,
 | 
				
			||||||
                kSecAttrApplicationLabel: secret.id
 | 
					                kSecAttrApplicationLabel: oldID
 | 
				
			||||||
            ])
 | 
					            ])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            let newID = oldID + Constants.migrationMagicNumber
 | 
					            let newID = oldID + Constants.migrationMagicNumber
 | 
				
			||||||
@ -82,7 +82,7 @@ extension SecureEnclave {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            let status = SecItemUpdate(updateQuery, updatedAttributes)
 | 
					            let status = SecItemUpdate(updateQuery, updatedAttributes)
 | 
				
			||||||
            if status != errSecSuccess {
 | 
					            if status != errSecSuccess {
 | 
				
			||||||
                throw KeychainError(statusCode: status)
 | 
					                logger.warning("Failed to mark \(secret.name) as migrated: \(status).")
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -19,7 +19,6 @@
 | 
				
			|||||||
		5003EF632780081B00DF2006 /* SecureEnclaveSecretKit in Frameworks */ = {isa = PBXBuildFile; productRef = 5003EF622780081B00DF2006 /* SecureEnclaveSecretKit */; };
 | 
							5003EF632780081B00DF2006 /* SecureEnclaveSecretKit in Frameworks */ = {isa = PBXBuildFile; productRef = 5003EF622780081B00DF2006 /* SecureEnclaveSecretKit */; };
 | 
				
			||||||
		5003EF652780081B00DF2006 /* SmartCardSecretKit in Frameworks */ = {isa = PBXBuildFile; productRef = 5003EF642780081B00DF2006 /* SmartCardSecretKit */; };
 | 
							5003EF652780081B00DF2006 /* SmartCardSecretKit in Frameworks */ = {isa = PBXBuildFile; productRef = 5003EF642780081B00DF2006 /* SmartCardSecretKit */; };
 | 
				
			||||||
		5008C23E2E525D8900507AC2 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 5008C23D2E525D8200507AC2 /* Localizable.xcstrings */; };
 | 
							5008C23E2E525D8900507AC2 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 5008C23D2E525D8200507AC2 /* Localizable.xcstrings */; };
 | 
				
			||||||
		5008C2402E52792400507AC2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 50617D8623FCE48E0099B055 /* Assets.xcassets */; };
 | 
					 | 
				
			||||||
		5008C2412E52D18700507AC2 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 5008C23D2E525D8200507AC2 /* Localizable.xcstrings */; };
 | 
							5008C2412E52D18700507AC2 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 5008C23D2E525D8200507AC2 /* Localizable.xcstrings */; };
 | 
				
			||||||
		501421622781262300BBAA70 /* Brief in Frameworks */ = {isa = PBXBuildFile; productRef = 501421612781262300BBAA70 /* Brief */; };
 | 
							501421622781262300BBAA70 /* Brief in Frameworks */ = {isa = PBXBuildFile; productRef = 501421612781262300BBAA70 /* Brief */; };
 | 
				
			||||||
		501421652781268000BBAA70 /* SecretAgent.app in CopyFiles */ = {isa = PBXBuildFile; fileRef = 50A3B78A24026B7500D209EA /* SecretAgent.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 | 
							501421652781268000BBAA70 /* SecretAgent.app in CopyFiles */ = {isa = PBXBuildFile; fileRef = 50A3B78A24026B7500D209EA /* SecretAgent.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 | 
				
			||||||
@ -36,7 +35,6 @@
 | 
				
			|||||||
		50571E0524393D1500F76F6C /* LaunchAgentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50571E0424393D1500F76F6C /* LaunchAgentController.swift */; };
 | 
							50571E0524393D1500F76F6C /* LaunchAgentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50571E0424393D1500F76F6C /* LaunchAgentController.swift */; };
 | 
				
			||||||
		50617D8323FCE48E0099B055 /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50617D8223FCE48E0099B055 /* App.swift */; };
 | 
							50617D8323FCE48E0099B055 /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50617D8223FCE48E0099B055 /* App.swift */; };
 | 
				
			||||||
		50617D8523FCE48E0099B055 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50617D8423FCE48E0099B055 /* ContentView.swift */; };
 | 
							50617D8523FCE48E0099B055 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50617D8423FCE48E0099B055 /* ContentView.swift */; };
 | 
				
			||||||
		50617D8723FCE48E0099B055 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 50617D8623FCE48E0099B055 /* Assets.xcassets */; };
 | 
					 | 
				
			||||||
		50617D8A23FCE48E0099B055 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 50617D8923FCE48E0099B055 /* Preview Assets.xcassets */; };
 | 
							50617D8A23FCE48E0099B055 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 50617D8923FCE48E0099B055 /* Preview Assets.xcassets */; };
 | 
				
			||||||
		50617DD223FCEFA90099B055 /* PreviewStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50617DD123FCEFA90099B055 /* PreviewStore.swift */; };
 | 
							50617DD223FCEFA90099B055 /* PreviewStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50617DD123FCEFA90099B055 /* PreviewStore.swift */; };
 | 
				
			||||||
		5065E313295517C500E16645 /* ToolbarButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5065E312295517C500E16645 /* ToolbarButtonStyle.swift */; };
 | 
							5065E313295517C500E16645 /* ToolbarButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5065E312295517C500E16645 /* ToolbarButtonStyle.swift */; };
 | 
				
			||||||
@ -74,6 +72,8 @@
 | 
				
			|||||||
		50CF4ABC2E601B0F005588DC /* ActionButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50CF4ABB2E601B0F005588DC /* ActionButtonStyle.swift */; };
 | 
							50CF4ABC2E601B0F005588DC /* ActionButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50CF4ABB2E601B0F005588DC /* ActionButtonStyle.swift */; };
 | 
				
			||||||
		50E4C4532E73C78C00C73783 /* WindowBackgroundStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E4C4522E73C78900C73783 /* WindowBackgroundStyle.swift */; };
 | 
							50E4C4532E73C78C00C73783 /* WindowBackgroundStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E4C4522E73C78900C73783 /* WindowBackgroundStyle.swift */; };
 | 
				
			||||||
		50E4C4C32E7765DF00C73783 /* AboutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E4C4C22E7765DF00C73783 /* AboutView.swift */; };
 | 
							50E4C4C32E7765DF00C73783 /* AboutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E4C4C22E7765DF00C73783 /* AboutView.swift */; };
 | 
				
			||||||
 | 
							50E4C4C82E777E4200C73783 /* AppIcon.icon in Resources */ = {isa = PBXBuildFile; fileRef = 50E4C4C72E777E4200C73783 /* AppIcon.icon */; };
 | 
				
			||||||
 | 
							50E4C4C92E777E4200C73783 /* AppIcon.icon in Resources */ = {isa = PBXBuildFile; fileRef = 50E4C4C72E777E4200C73783 /* AppIcon.icon */; };
 | 
				
			||||||
/* End PBXBuildFile section */
 | 
					/* End PBXBuildFile section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Begin PBXContainerItemProxy section */
 | 
					/* Begin PBXContainerItemProxy section */
 | 
				
			||||||
@ -198,7 +198,6 @@
 | 
				
			|||||||
		50617D7F23FCE48E0099B055 /* Secretive.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Secretive.app; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
							50617D7F23FCE48E0099B055 /* Secretive.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Secretive.app; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
				
			||||||
		50617D8223FCE48E0099B055 /* App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = "<group>"; };
 | 
							50617D8223FCE48E0099B055 /* App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = "<group>"; };
 | 
				
			||||||
		50617D8423FCE48E0099B055 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
 | 
							50617D8423FCE48E0099B055 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
 | 
				
			||||||
		50617D8623FCE48E0099B055 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		50617D8923FCE48E0099B055 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
 | 
							50617D8923FCE48E0099B055 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
 | 
				
			||||||
		50617D8E23FCE48E0099B055 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 | 
							50617D8E23FCE48E0099B055 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 | 
				
			||||||
		50617D8F23FCE48E0099B055 /* Secretive.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Secretive.entitlements; sourceTree = "<group>"; };
 | 
							50617D8F23FCE48E0099B055 /* Secretive.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Secretive.entitlements; sourceTree = "<group>"; };
 | 
				
			||||||
@ -241,6 +240,7 @@
 | 
				
			|||||||
		50CF4ABB2E601B0F005588DC /* ActionButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionButtonStyle.swift; sourceTree = "<group>"; };
 | 
							50CF4ABB2E601B0F005588DC /* ActionButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionButtonStyle.swift; sourceTree = "<group>"; };
 | 
				
			||||||
		50E4C4522E73C78900C73783 /* WindowBackgroundStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowBackgroundStyle.swift; sourceTree = "<group>"; };
 | 
							50E4C4522E73C78900C73783 /* WindowBackgroundStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowBackgroundStyle.swift; sourceTree = "<group>"; };
 | 
				
			||||||
		50E4C4C22E7765DF00C73783 /* AboutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutView.swift; sourceTree = "<group>"; };
 | 
							50E4C4C22E7765DF00C73783 /* AboutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutView.swift; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
							50E4C4C72E777E4200C73783 /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = AppIcon.icon; sourceTree = "<group>"; };
 | 
				
			||||||
/* End PBXFileReference section */
 | 
					/* End PBXFileReference section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Begin PBXFrameworksBuildPhase section */
 | 
					/* Begin PBXFrameworksBuildPhase section */
 | 
				
			||||||
@ -379,9 +379,9 @@
 | 
				
			|||||||
				508A58B0241ED1C40069DC07 /* Views */,
 | 
									508A58B0241ED1C40069DC07 /* Views */,
 | 
				
			||||||
				508A58B1241ED1EA0069DC07 /* Controllers */,
 | 
									508A58B1241ED1EA0069DC07 /* Controllers */,
 | 
				
			||||||
				50033AC427813F1C00253856 /* Helpers */,
 | 
									50033AC427813F1C00253856 /* Helpers */,
 | 
				
			||||||
				50617D8623FCE48E0099B055 /* Assets.xcassets */,
 | 
					 | 
				
			||||||
				50617D8E23FCE48E0099B055 /* Info.plist */,
 | 
									50617D8E23FCE48E0099B055 /* Info.plist */,
 | 
				
			||||||
				508BF28D25B4F005009EFB7E /* InternetAccessPolicy.plist */,
 | 
									508BF28D25B4F005009EFB7E /* InternetAccessPolicy.plist */,
 | 
				
			||||||
 | 
									50E4C4C72E777E4200C73783 /* AppIcon.icon */,
 | 
				
			||||||
				50617D8F23FCE48E0099B055 /* Secretive.entitlements */,
 | 
									50617D8F23FCE48E0099B055 /* Secretive.entitlements */,
 | 
				
			||||||
				5008C23D2E525D8200507AC2 /* Localizable.xcstrings */,
 | 
									5008C23D2E525D8200507AC2 /* Localizable.xcstrings */,
 | 
				
			||||||
				50617D8823FCE48E0099B055 /* Preview Content */,
 | 
									50617D8823FCE48E0099B055 /* Preview Content */,
 | 
				
			||||||
@ -646,8 +646,8 @@
 | 
				
			|||||||
			buildActionMask = 2147483647;
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
			files = (
 | 
								files = (
 | 
				
			||||||
				50617D8A23FCE48E0099B055 /* Preview Assets.xcassets in Resources */,
 | 
									50617D8A23FCE48E0099B055 /* Preview Assets.xcassets in Resources */,
 | 
				
			||||||
 | 
									50E4C4C82E777E4200C73783 /* AppIcon.icon in Resources */,
 | 
				
			||||||
				5008C23E2E525D8900507AC2 /* Localizable.xcstrings in Resources */,
 | 
									5008C23E2E525D8900507AC2 /* Localizable.xcstrings in Resources */,
 | 
				
			||||||
				50617D8723FCE48E0099B055 /* Assets.xcassets in Resources */,
 | 
					 | 
				
			||||||
				508BF28E25B4F005009EFB7E /* InternetAccessPolicy.plist in Resources */,
 | 
									508BF28E25B4F005009EFB7E /* InternetAccessPolicy.plist in Resources */,
 | 
				
			||||||
			);
 | 
								);
 | 
				
			||||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
@ -673,8 +673,8 @@
 | 
				
			|||||||
				50A3B79724026B7600D209EA /* Main.storyboard in Resources */,
 | 
									50A3B79724026B7600D209EA /* Main.storyboard in Resources */,
 | 
				
			||||||
				5008C2412E52D18700507AC2 /* Localizable.xcstrings in Resources */,
 | 
									5008C2412E52D18700507AC2 /* Localizable.xcstrings in Resources */,
 | 
				
			||||||
				50A3B79424026B7600D209EA /* Preview Assets.xcassets in Resources */,
 | 
									50A3B79424026B7600D209EA /* Preview Assets.xcassets in Resources */,
 | 
				
			||||||
 | 
									50E4C4C92E777E4200C73783 /* AppIcon.icon in Resources */,
 | 
				
			||||||
				508BF2AA25B4F1CB009EFB7E /* InternetAccessPolicy.plist in Resources */,
 | 
									508BF2AA25B4F1CB009EFB7E /* InternetAccessPolicy.plist in Resources */,
 | 
				
			||||||
				5008C2402E52792400507AC2 /* Assets.xcassets in Resources */,
 | 
					 | 
				
			||||||
			);
 | 
								);
 | 
				
			||||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
				
			|||||||
| 
		 Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB  | 
| 
		 Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB  | 
| 
		 Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB  | 
@ -1,68 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
  "images" : [
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "filename" : "Icon-macOS-ClearDark-16x16@1x.png",
 | 
					 | 
				
			||||||
      "idiom" : "mac",
 | 
					 | 
				
			||||||
      "scale" : "1x",
 | 
					 | 
				
			||||||
      "size" : "16x16"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "filename" : "Icon-macOS-ClearDark-16x16@2x.png",
 | 
					 | 
				
			||||||
      "idiom" : "mac",
 | 
					 | 
				
			||||||
      "scale" : "2x",
 | 
					 | 
				
			||||||
      "size" : "16x16"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "filename" : "Icon-macOS-ClearDark-32x32@1x.png",
 | 
					 | 
				
			||||||
      "idiom" : "mac",
 | 
					 | 
				
			||||||
      "scale" : "1x",
 | 
					 | 
				
			||||||
      "size" : "32x32"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "filename" : "Icon-macOS-ClearDark-32x32@2x.png",
 | 
					 | 
				
			||||||
      "idiom" : "mac",
 | 
					 | 
				
			||||||
      "scale" : "2x",
 | 
					 | 
				
			||||||
      "size" : "32x32"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "filename" : "Icon-macOS-ClearDark-128x128@1x.png",
 | 
					 | 
				
			||||||
      "idiom" : "mac",
 | 
					 | 
				
			||||||
      "scale" : "1x",
 | 
					 | 
				
			||||||
      "size" : "128x128"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "filename" : "Icon-macOS-ClearDark-128x128@2x.png",
 | 
					 | 
				
			||||||
      "idiom" : "mac",
 | 
					 | 
				
			||||||
      "scale" : "2x",
 | 
					 | 
				
			||||||
      "size" : "128x128"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "filename" : "Icon-macOS-ClearDark-256x256@1x.png",
 | 
					 | 
				
			||||||
      "idiom" : "mac",
 | 
					 | 
				
			||||||
      "scale" : "1x",
 | 
					 | 
				
			||||||
      "size" : "256x256"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "filename" : "Icon-macOS-ClearDark-256x256@2x.png",
 | 
					 | 
				
			||||||
      "idiom" : "mac",
 | 
					 | 
				
			||||||
      "scale" : "2x",
 | 
					 | 
				
			||||||
      "size" : "256x256"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "filename" : "Icon-macOS-ClearDark-512x512@1x.png",
 | 
					 | 
				
			||||||
      "idiom" : "mac",
 | 
					 | 
				
			||||||
      "scale" : "1x",
 | 
					 | 
				
			||||||
      "size" : "512x512"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "filename" : "Icon-macOS-ClearDark-1024x1024@1x.png",
 | 
					 | 
				
			||||||
      "idiom" : "mac",
 | 
					 | 
				
			||||||
      "scale" : "2x",
 | 
					 | 
				
			||||||
      "size" : "512x512"
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  ],
 | 
					 | 
				
			||||||
  "info" : {
 | 
					 | 
				
			||||||
    "author" : "xcode",
 | 
					 | 
				
			||||||
    "version" : 1
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 1.0 MiB  | 
| 
		 Before Width: | Height: | Size: 37 KiB  | 
| 
		 Before Width: | Height: | Size: 108 KiB  | 
| 
		 Before Width: | Height: | Size: 856 B  | 
| 
		 Before Width: | Height: | Size: 1.9 KiB  | 
| 
		 Before Width: | Height: | Size: 108 KiB  | 
| 
		 Before Width: | Height: | Size: 356 KiB  | 
| 
		 Before Width: | Height: | Size: 1.9 KiB  | 
| 
		 Before Width: | Height: | Size: 12 KiB  | 
| 
		 Before Width: | Height: | Size: 356 KiB  | 
@ -1,6 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
  "info" : {
 | 
					 | 
				
			||||||
    "author" : "xcode",
 | 
					 | 
				
			||||||
    "version" : 1
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||