diff --git a/AutoFill/Assets.xcassets/AccentColor.colorset/Contents.json b/AutoFill/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..1f723f2 --- /dev/null +++ b/AutoFill/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.710", + "green" : "0.396", + "blue" : "0.114", + "alpha" : "1.000" + } + } + }, + { + "idiom" : "universal", + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.890", + "green" : "0.635", + "blue" : "0.357", + "alpha" : "1.000" + } + } + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MyPass/Assets.xcassets/Contents.json b/AutoFill/Assets.xcassets/Contents.json similarity index 100% rename from MyPass/Assets.xcassets/Contents.json rename to AutoFill/Assets.xcassets/Contents.json diff --git a/AutoFill/Assets.xcassets/VaultBackground.colorset/Contents.json b/AutoFill/Assets.xcassets/VaultBackground.colorset/Contents.json new file mode 100644 index 0000000..e4bd0f8 --- /dev/null +++ b/AutoFill/Assets.xcassets/VaultBackground.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.980", + "green" : "0.957", + "blue" : "0.925", + "alpha" : "1.000" + } + } + }, + { + "idiom" : "universal", + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.141", + "green" : "0.125", + "blue" : "0.094", + "alpha" : "1.000" + } + } + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AutoFill/AutoFill.entitlements b/AutoFill/AutoFill.entitlements index 7e0ef10..8c1a176 100644 --- a/AutoFill/AutoFill.entitlements +++ b/AutoFill/AutoFill.entitlements @@ -6,11 +6,11 @@ com.apple.security.application-groups - group.org.antiloop222.mypass + group.org.antiloop222.keevault keychain-access-groups - $(AppIdentifierPrefix)org.antiloop222.mypass + $(AppIdentifierPrefix)org.antiloop222.keevault diff --git a/AutoFill/CredentialProviderViewController.swift b/AutoFill/CredentialProviderViewController.swift index 6565ca1..6a562f3 100644 --- a/AutoFill/CredentialProviderViewController.swift +++ b/AutoFill/CredentialProviderViewController.swift @@ -7,16 +7,16 @@ import AuthenticationServices import SwiftUI -import MyPassCore +import KeeVaultCore final class CredentialProviderViewController: ASCredentialProviderViewController { private let session = VaultSession() private let bookmarkService = FileBookmarkService() - private let keychainStore = KeychainStore(accessGroup: "F2KB6W8N4R.org.antiloop222.mypass") + private let keychainStore = KeychainStore(accessGroup: "F2KB6W8N4R.org.antiloop222.keevault") private let biometricService = BiometricAuthService() - // Called when the user selects MyPass from the QuickType bar. + // Called when the user selects KeeVault from the QuickType bar. override func prepareCredentialList(for serviceIdentifiers: [ASCredentialServiceIdentifier]) { let ids = serviceIdentifiers.map(\.identifier) showUI(serviceIdentifiers: ids) diff --git a/AutoFill/Views/CredentialListView.swift b/AutoFill/Views/CredentialListView.swift index afbb24d..0af6da5 100644 --- a/AutoFill/Views/CredentialListView.swift +++ b/AutoFill/Views/CredentialListView.swift @@ -1,6 +1,6 @@ // AutoFill/Views/CredentialListView.swift import SwiftUI -import MyPassCore +import KeeVaultCore struct CredentialListView: View { @ObservedObject var vm: ExtensionViewModel @@ -40,6 +40,8 @@ struct CredentialListView: View { } } } + .scrollContentBackground(.hidden) + .background(Color("VaultBackground")) .searchable(text: $searchQuery, prompt: "Search…") } } diff --git a/AutoFill/Views/ExtensionUnlockView.swift b/AutoFill/Views/ExtensionUnlockView.swift index 1104e06..d3a7a1b 100644 --- a/AutoFill/Views/ExtensionUnlockView.swift +++ b/AutoFill/Views/ExtensionUnlockView.swift @@ -1,7 +1,7 @@ // AutoFill/Views/ExtensionUnlockView.swift import SwiftUI import Combine -import MyPassCore +import KeeVaultCore /// Root view for the extension -- shows unlock screen or credential list depending on state. struct ExtensionRootView: View { @@ -36,7 +36,8 @@ struct ExtensionRootView: View { CredentialListView(vm: vm) } } - .navigationTitle("MyPass") + .background(Color("VaultBackground")) + .navigationTitle("KeeVault") .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .cancellationAction) { @@ -44,6 +45,7 @@ struct ExtensionRootView: View { } } } + .tint(Color("AccentColor")) .task { await vm.tryBiometricUnlock() } } @@ -74,8 +76,8 @@ struct ExtensionRootView: View { } if !vm.hasVault || vm.errorMessage != nil { - Link(destination: URL(string: "mypass://unlock")!) { - Label("Open MyPass to set up vault", systemImage: "arrow.up.right") + Link(destination: URL(string: "keevault://unlock")!) { + Label("Open KeeVault to set up vault", systemImage: "arrow.up.right") .font(.caption) } } @@ -140,7 +142,7 @@ final class ExtensionViewModel: ObservableObject { guard canUseBiometrics, session.isLocked else { return } isUnlocking = true do { - try await biometricService.authenticate(reason: "Unlock MyPass") + try await biometricService.authenticate(reason: "Unlock KeeVault") try performUnlockFromKeychain() } catch { errorMessage = error.localizedDescription diff --git a/MyPass.xcodeproj/project.pbxproj b/KeeVault.xcodeproj/project.pbxproj similarity index 86% rename from MyPass.xcodeproj/project.pbxproj rename to KeeVault.xcodeproj/project.pbxproj index c49a334..b514df4 100644 --- a/MyPass.xcodeproj/project.pbxproj +++ b/KeeVault.xcodeproj/project.pbxproj @@ -7,10 +7,10 @@ objects = { /* Begin PBXBuildFile section */ - 205678DB2FC0EB5200251C6B /* MyPassCore in Frameworks */ = {isa = PBXBuildFile; productRef = 205678DA2FC0EB5200251C6B /* MyPassCore */; }; + 205678DB2FC0EB5200251C6B /* KeeVaultCore in Frameworks */ = {isa = PBXBuildFile; productRef = 205678DA2FC0EB5200251C6B /* KeeVaultCore */; }; 2096B432305EC2B200C2F253 /* AuthenticationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 205678E32FC0F52A00251C6B /* AuthenticationServices.framework */; }; 2096B43D305EC2B200C2F253 /* AutoFill.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 2096B431305EC2B200C2F253 /* AutoFill.appex */; platformFilter = ios; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 67DE2FCFC21FD6DF5E761C87 /* MyPassCore in Frameworks */ = {isa = PBXBuildFile; productRef = 205678DA2FC0EB5200251C6B /* MyPassCore */; }; + 67DE2FCFC21FD6DF5E761C87 /* KeeVaultCore in Frameworks */ = {isa = PBXBuildFile; productRef = 205678DA2FC0EB5200251C6B /* KeeVaultCore */; }; 982CE38F924E4FD387BC2C20 /* BiometricAuthService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6C7DFA4A59640D7BF6B4960 /* BiometricAuthService.swift */; }; EABAC2B148F845C8A20EC2CC /* FileBookmarkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADBBB9F1BA62473294D2B5B5 /* FileBookmarkService.swift */; }; /* End PBXBuildFile section */ @@ -21,14 +21,14 @@ containerPortal = 2056788B2FBF9CBB00251C6B /* Project object */; proxyType = 1; remoteGlobalIDString = 205678922FBF9CBB00251C6B; - remoteInfo = MyPass; + remoteInfo = KeeVault; }; 205678AD2FBF9CBC00251C6B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 2056788B2FBF9CBB00251C6B /* Project object */; proxyType = 1; remoteGlobalIDString = 205678922FBF9CBB00251C6B; - remoteInfo = MyPass; + remoteInfo = KeeVault; }; 2096B43B305EC2B200C2F253 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -54,13 +54,13 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 205678932FBF9CBB00251C6B /* MyPass.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MyPass.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 205678A22FBF9CBC00251C6B /* MyPassTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MyPassTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 205678AC2FBF9CBC00251C6B /* MyPassUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MyPassUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 205678932FBF9CBB00251C6B /* KeeVault.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KeeVault.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 205678A22FBF9CBC00251C6B /* KeeVaultTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KeeVaultTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 205678AC2FBF9CBC00251C6B /* KeeVaultUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KeeVaultUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 205678E32FC0F52A00251C6B /* AuthenticationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AuthenticationServices.framework; path = System/Library/Frameworks/AuthenticationServices.framework; sourceTree = SDKROOT; }; 2096B431305EC2B200C2F253 /* AutoFill.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = AutoFill.appex; sourceTree = BUILT_PRODUCTS_DIR; }; - ADBBB9F1BA62473294D2B5B5 /* FileBookmarkService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = FileBookmarkService.swift; path = MyPass/Services/FileBookmarkService.swift; sourceTree = SOURCE_ROOT; }; - D6C7DFA4A59640D7BF6B4960 /* BiometricAuthService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = BiometricAuthService.swift; path = MyPass/Services/BiometricAuthService.swift; sourceTree = SOURCE_ROOT; }; + ADBBB9F1BA62473294D2B5B5 /* FileBookmarkService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = FileBookmarkService.swift; path = KeeVault/Services/FileBookmarkService.swift; sourceTree = SOURCE_ROOT; }; + D6C7DFA4A59640D7BF6B4960 /* BiometricAuthService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = BiometricAuthService.swift; path = KeeVault/Services/BiometricAuthService.swift; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ @@ -74,19 +74,19 @@ /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ - 205678952FBF9CBB00251C6B /* MyPass */ = { + 205678952FBF9CBB00251C6B /* KeeVault */ = { isa = PBXFileSystemSynchronizedRootGroup; - path = MyPass; + path = KeeVault; sourceTree = ""; }; - 205678A52FBF9CBC00251C6B /* MyPassTests */ = { + 205678A52FBF9CBC00251C6B /* KeeVaultTests */ = { isa = PBXFileSystemSynchronizedRootGroup; - path = MyPassTests; + path = KeeVaultTests; sourceTree = ""; }; - 205678AF2FBF9CBC00251C6B /* MyPassUITests */ = { + 205678AF2FBF9CBC00251C6B /* KeeVaultUITests */ = { isa = PBXFileSystemSynchronizedRootGroup; - path = MyPassUITests; + path = KeeVaultUITests; sourceTree = ""; }; 2096B433305EC2B200C2F253 /* AutoFill */ = { @@ -104,7 +104,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 205678DB2FC0EB5200251C6B /* MyPassCore in Frameworks */, + 205678DB2FC0EB5200251C6B /* KeeVaultCore in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -127,7 +127,7 @@ buildActionMask = 2147483647; files = ( 2096B432305EC2B200C2F253 /* AuthenticationServices.framework in Frameworks */, - 67DE2FCFC21FD6DF5E761C87 /* MyPassCore in Frameworks */, + 67DE2FCFC21FD6DF5E761C87 /* KeeVaultCore in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -146,9 +146,9 @@ 2056788A2FBF9CBB00251C6B = { isa = PBXGroup; children = ( - 205678952FBF9CBB00251C6B /* MyPass */, - 205678A52FBF9CBC00251C6B /* MyPassTests */, - 205678AF2FBF9CBC00251C6B /* MyPassUITests */, + 205678952FBF9CBB00251C6B /* KeeVault */, + 205678A52FBF9CBC00251C6B /* KeeVaultTests */, + 205678AF2FBF9CBC00251C6B /* KeeVaultUITests */, 2096B433305EC2B200C2F253 /* AutoFill */, 1A2B3C4D5E6F7A8B9C0D1E2F /* AutoFill Shared Services */, 205678E22FC0F52A00251C6B /* Frameworks */, @@ -159,9 +159,9 @@ 205678942FBF9CBB00251C6B /* Products */ = { isa = PBXGroup; children = ( - 205678932FBF9CBB00251C6B /* MyPass.app */, - 205678A22FBF9CBC00251C6B /* MyPassTests.xctest */, - 205678AC2FBF9CBC00251C6B /* MyPassUITests.xctest */, + 205678932FBF9CBB00251C6B /* KeeVault.app */, + 205678A22FBF9CBC00251C6B /* KeeVaultTests.xctest */, + 205678AC2FBF9CBC00251C6B /* KeeVaultUITests.xctest */, 2096B431305EC2B200C2F253 /* AutoFill.appex */, ); name = Products; @@ -178,9 +178,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 205678922FBF9CBB00251C6B /* MyPass */ = { + 205678922FBF9CBB00251C6B /* KeeVault */ = { isa = PBXNativeTarget; - buildConfigurationList = 205678B62FBF9CBC00251C6B /* Build configuration list for PBXNativeTarget "MyPass" */; + buildConfigurationList = 205678B62FBF9CBC00251C6B /* Build configuration list for PBXNativeTarget "KeeVault" */; buildPhases = ( 2056788F2FBF9CBB00251C6B /* Sources */, 205678902FBF9CBB00251C6B /* Frameworks */, @@ -193,19 +193,19 @@ 2096B43C305EC2B200C2F253 /* PBXTargetDependency */, ); fileSystemSynchronizedGroups = ( - 205678952FBF9CBB00251C6B /* MyPass */, + 205678952FBF9CBB00251C6B /* KeeVault */, ); - name = MyPass; + name = KeeVault; packageProductDependencies = ( - 205678DA2FC0EB5200251C6B /* MyPassCore */, + 205678DA2FC0EB5200251C6B /* KeeVaultCore */, ); - productName = MyPass; - productReference = 205678932FBF9CBB00251C6B /* MyPass.app */; + productName = KeeVault; + productReference = 205678932FBF9CBB00251C6B /* KeeVault.app */; productType = "com.apple.product-type.application"; }; - 205678A12FBF9CBC00251C6B /* MyPassTests */ = { + 205678A12FBF9CBC00251C6B /* KeeVaultTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 205678B92FBF9CBC00251C6B /* Build configuration list for PBXNativeTarget "MyPassTests" */; + buildConfigurationList = 205678B92FBF9CBC00251C6B /* Build configuration list for PBXNativeTarget "KeeVaultTests" */; buildPhases = ( 2056789E2FBF9CBC00251C6B /* Sources */, 2056789F2FBF9CBC00251C6B /* Frameworks */, @@ -217,18 +217,18 @@ 205678A42FBF9CBC00251C6B /* PBXTargetDependency */, ); fileSystemSynchronizedGroups = ( - 205678A52FBF9CBC00251C6B /* MyPassTests */, + 205678A52FBF9CBC00251C6B /* KeeVaultTests */, ); - name = MyPassTests; + name = KeeVaultTests; packageProductDependencies = ( ); - productName = MyPassTests; - productReference = 205678A22FBF9CBC00251C6B /* MyPassTests.xctest */; + productName = KeeVaultTests; + productReference = 205678A22FBF9CBC00251C6B /* KeeVaultTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - 205678AB2FBF9CBC00251C6B /* MyPassUITests */ = { + 205678AB2FBF9CBC00251C6B /* KeeVaultUITests */ = { isa = PBXNativeTarget; - buildConfigurationList = 205678BC2FBF9CBC00251C6B /* Build configuration list for PBXNativeTarget "MyPassUITests" */; + buildConfigurationList = 205678BC2FBF9CBC00251C6B /* Build configuration list for PBXNativeTarget "KeeVaultUITests" */; buildPhases = ( 205678A82FBF9CBC00251C6B /* Sources */, 205678A92FBF9CBC00251C6B /* Frameworks */, @@ -240,13 +240,13 @@ 205678AE2FBF9CBC00251C6B /* PBXTargetDependency */, ); fileSystemSynchronizedGroups = ( - 205678AF2FBF9CBC00251C6B /* MyPassUITests */, + 205678AF2FBF9CBC00251C6B /* KeeVaultUITests */, ); - name = MyPassUITests; + name = KeeVaultUITests; packageProductDependencies = ( ); - productName = MyPassUITests; - productReference = 205678AC2FBF9CBC00251C6B /* MyPassUITests.xctest */; + productName = KeeVaultUITests; + productReference = 205678AC2FBF9CBC00251C6B /* KeeVaultUITests.xctest */; productType = "com.apple.product-type.bundle.ui-testing"; }; 2096B430305EC2B200C2F253 /* AutoFill */ = { @@ -266,7 +266,7 @@ ); name = AutoFill; packageProductDependencies = ( - 205678DA2FC0EB5200251C6B /* MyPassCore */, + 205678DA2FC0EB5200251C6B /* KeeVaultCore */, ); productName = AutoFill; productReference = 2096B431305EC2B200C2F253 /* AutoFill.appex */; @@ -298,7 +298,7 @@ }; }; }; - buildConfigurationList = 2056788E2FBF9CBB00251C6B /* Build configuration list for PBXProject "MyPass" */; + buildConfigurationList = 2056788E2FBF9CBB00251C6B /* Build configuration list for PBXProject "KeeVault" */; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -308,16 +308,16 @@ mainGroup = 2056788A2FBF9CBB00251C6B; minimizedProjectReferenceProxies = 1; packageReferences = ( - 205678D92FC0EB5200251C6B /* XCLocalSwiftPackageReference "MyPassCore" */, + 205678D92FC0EB5200251C6B /* XCLocalSwiftPackageReference "KeeVaultCore" */, ); preferredProjectObjectVersion = 77; productRefGroup = 205678942FBF9CBB00251C6B /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 205678922FBF9CBB00251C6B /* MyPass */, - 205678A12FBF9CBC00251C6B /* MyPassTests */, - 205678AB2FBF9CBC00251C6B /* MyPassUITests */, + 205678922FBF9CBB00251C6B /* KeeVault */, + 205678A12FBF9CBC00251C6B /* KeeVaultTests */, + 205678AB2FBF9CBC00251C6B /* KeeVaultUITests */, 2096B430305EC2B200C2F253 /* AutoFill */, ); }; @@ -390,12 +390,12 @@ /* Begin PBXTargetDependency section */ 205678A42FBF9CBC00251C6B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 205678922FBF9CBB00251C6B /* MyPass */; + target = 205678922FBF9CBB00251C6B /* KeeVault */; targetProxy = 205678A32FBF9CBC00251C6B /* PBXContainerItemProxy */; }; 205678AE2FBF9CBC00251C6B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 205678922FBF9CBB00251C6B /* MyPass */; + target = 205678922FBF9CBB00251C6B /* KeeVault */; targetProxy = 205678AD2FBF9CBC00251C6B /* PBXContainerItemProxy */; }; 2096B43C305EC2B200C2F253 /* PBXTargetDependency */ = { @@ -530,7 +530,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = MyPass/MyPass.entitlements; + CODE_SIGN_ENTITLEMENTS = KeeVault/KeeVault.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = YES; @@ -540,6 +540,7 @@ ENABLE_USER_SELECTED_FILES = readonly; ENTITLEMENTS_REQUIRED = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; INFOPLIST_KEY_NSFaceIDUsageDescription = "Unlock your vault with Face ID."; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; @@ -556,8 +557,8 @@ "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 26.5; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.mypass; - "PRODUCT_BUNDLE_IDENTIFIER[sdk=xros*]" = org.antiloop222.MyPass; + PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.keevault; + "PRODUCT_BUNDLE_IDENTIFIER[sdk=xros*]" = org.antiloop222.KeeVault; PRODUCT_NAME = "$(TARGET_NAME)"; REGISTER_APP_GROUPS = YES; SDKROOT = auto; @@ -579,7 +580,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = MyPass/MyPass.entitlements; + CODE_SIGN_ENTITLEMENTS = KeeVault/KeeVault.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = YES; @@ -589,6 +590,7 @@ ENABLE_USER_SELECTED_FILES = readonly; ENTITLEMENTS_REQUIRED = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; INFOPLIST_KEY_NSFaceIDUsageDescription = "Unlock your vault with Face ID."; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; @@ -605,8 +607,8 @@ "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 26.5; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.mypass; - "PRODUCT_BUNDLE_IDENTIFIER[sdk=xros*]" = org.antiloop222.MyPass; + PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.keevault; + "PRODUCT_BUNDLE_IDENTIFIER[sdk=xros*]" = org.antiloop222.KeeVault; PRODUCT_NAME = "$(TARGET_NAME)"; REGISTER_APP_GROUPS = YES; SDKROOT = auto; @@ -634,7 +636,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 26.5; MACOSX_DEPLOYMENT_TARGET = 26.5; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.mypasstests; + PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.keevaulttests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; @@ -645,7 +647,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MyPass.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/MyPass"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KeeVault.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/KeeVault"; XROS_DEPLOYMENT_TARGET = 26.5; }; name = Debug; @@ -661,7 +663,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 26.5; MACOSX_DEPLOYMENT_TARGET = 26.5; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.mypasstests; + PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.keevaulttests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; @@ -672,7 +674,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MyPass.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/MyPass"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KeeVault.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/KeeVault"; XROS_DEPLOYMENT_TARGET = 26.5; }; name = Release; @@ -687,7 +689,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 26.5; MACOSX_DEPLOYMENT_TARGET = 26.5; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.mypassuitests; + PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.keevaultuitests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; @@ -698,7 +700,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = MyPass; + TEST_TARGET_NAME = KeeVault; XROS_DEPLOYMENT_TARGET = 26.5; }; name = Debug; @@ -713,7 +715,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 26.5; MACOSX_DEPLOYMENT_TARGET = 26.5; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.mypassuitests; + PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.keevaultuitests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; @@ -724,7 +726,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = MyPass; + TEST_TARGET_NAME = KeeVault; XROS_DEPLOYMENT_TARGET = 26.5; }; name = Release; @@ -732,6 +734,7 @@ 2096B43E305EC2B200C2F253 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = AutoFill/AutoFill.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; @@ -749,7 +752,7 @@ "@executable_path/../../Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.mypass.autofill; + PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.keevault.autofill; PRODUCT_NAME = "$(TARGET_NAME)"; REGISTER_APP_GROUPS = YES; SDKROOT = iphoneos; @@ -769,6 +772,7 @@ 2096B43F305EC2B200C2F253 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = AutoFill/AutoFill.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; @@ -786,7 +790,7 @@ "@executable_path/../../Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.mypass.autofill; + PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.keevault.autofill; PRODUCT_NAME = "$(TARGET_NAME)"; REGISTER_APP_GROUPS = YES; SDKROOT = iphoneos; @@ -807,7 +811,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 2056788E2FBF9CBB00251C6B /* Build configuration list for PBXProject "MyPass" */ = { + 2056788E2FBF9CBB00251C6B /* Build configuration list for PBXProject "KeeVault" */ = { isa = XCConfigurationList; buildConfigurations = ( 205678B42FBF9CBC00251C6B /* Debug */, @@ -816,7 +820,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 205678B62FBF9CBC00251C6B /* Build configuration list for PBXNativeTarget "MyPass" */ = { + 205678B62FBF9CBC00251C6B /* Build configuration list for PBXNativeTarget "KeeVault" */ = { isa = XCConfigurationList; buildConfigurations = ( 205678B72FBF9CBC00251C6B /* Debug */, @@ -825,7 +829,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 205678B92FBF9CBC00251C6B /* Build configuration list for PBXNativeTarget "MyPassTests" */ = { + 205678B92FBF9CBC00251C6B /* Build configuration list for PBXNativeTarget "KeeVaultTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 205678BA2FBF9CBC00251C6B /* Debug */, @@ -834,7 +838,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 205678BC2FBF9CBC00251C6B /* Build configuration list for PBXNativeTarget "MyPassUITests" */ = { + 205678BC2FBF9CBC00251C6B /* Build configuration list for PBXNativeTarget "KeeVaultUITests" */ = { isa = XCConfigurationList; buildConfigurations = ( 205678BD2FBF9CBC00251C6B /* Debug */, @@ -855,16 +859,16 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 205678D92FC0EB5200251C6B /* XCLocalSwiftPackageReference "MyPassCore" */ = { + 205678D92FC0EB5200251C6B /* XCLocalSwiftPackageReference "KeeVaultCore" */ = { isa = XCLocalSwiftPackageReference; - relativePath = MyPassCore; + relativePath = KeeVaultCore; }; /* End XCLocalSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 205678DA2FC0EB5200251C6B /* MyPassCore */ = { + 205678DA2FC0EB5200251C6B /* KeeVaultCore */ = { isa = XCSwiftPackageProductDependency; - productName = MyPassCore; + productName = KeeVaultCore; }; /* End XCSwiftPackageProductDependency section */ }; diff --git a/MyPass.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/KeeVault.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from MyPass.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to KeeVault.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/MyPass.xcodeproj/xcuserdata/kriss.xcuserdatad/xcschemes/xcschememanagement.plist b/KeeVault.xcodeproj/xcuserdata/kriss.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 79% rename from MyPass.xcodeproj/xcuserdata/kriss.xcuserdatad/xcschemes/xcschememanagement.plist rename to KeeVault.xcodeproj/xcuserdata/kriss.xcuserdatad/xcschemes/xcschememanagement.plist index ef7196f..59379f4 100644 --- a/MyPass.xcodeproj/xcuserdata/kriss.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/KeeVault.xcodeproj/xcuserdata/kriss.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,12 +7,12 @@ AutoFill.xcscheme_^#shared#^_ orderHint - 3 + 0 - MyPass.xcscheme_^#shared#^_ + KeeVault.xcscheme_^#shared#^_ orderHint - 4 + 1 diff --git a/KeeVault/Assets.xcassets/AccentColor.colorset/Contents.json b/KeeVault/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..1f723f2 --- /dev/null +++ b/KeeVault/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.710", + "green" : "0.396", + "blue" : "0.114", + "alpha" : "1.000" + } + } + }, + { + "idiom" : "universal", + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.890", + "green" : "0.635", + "blue" : "0.357", + "alpha" : "1.000" + } + } + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MyPass/Assets.xcassets/AppIcon.appiconset/Contents.json b/KeeVault/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 56% rename from MyPass/Assets.xcassets/AppIcon.appiconset/Contents.json rename to KeeVault/Assets.xcassets/AppIcon.appiconset/Contents.json index ffdfe15..8a54b80 100644 --- a/MyPass/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/KeeVault/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -3,7 +3,8 @@ { "idiom" : "universal", "platform" : "ios", - "size" : "1024x1024" + "size" : "1024x1024", + "filename" : "icon-1024-light.png" }, { "appearances" : [ @@ -14,7 +15,8 @@ ], "idiom" : "universal", "platform" : "ios", - "size" : "1024x1024" + "size" : "1024x1024", + "filename" : "icon-1024-dark.png" }, { "appearances" : [ @@ -25,57 +27,68 @@ ], "idiom" : "universal", "platform" : "ios", - "size" : "1024x1024" + "size" : "1024x1024", + "filename" : "icon-1024-tinted.png" }, { "idiom" : "mac", "scale" : "1x", - "size" : "16x16" + "size" : "16x16", + "filename" : "icon-mac-16.png" }, { "idiom" : "mac", "scale" : "2x", - "size" : "16x16" + "size" : "16x16", + "filename" : "icon-mac-16@2x.png" }, { "idiom" : "mac", "scale" : "1x", - "size" : "32x32" + "size" : "32x32", + "filename" : "icon-mac-32.png" }, { "idiom" : "mac", "scale" : "2x", - "size" : "32x32" + "size" : "32x32", + "filename" : "icon-mac-32@2x.png" }, { "idiom" : "mac", "scale" : "1x", - "size" : "128x128" + "size" : "128x128", + "filename" : "icon-mac-128.png" }, { "idiom" : "mac", "scale" : "2x", - "size" : "128x128" + "size" : "128x128", + "filename" : "icon-mac-128@2x.png" }, { "idiom" : "mac", "scale" : "1x", - "size" : "256x256" + "size" : "256x256", + "filename" : "icon-mac-256.png" }, { "idiom" : "mac", "scale" : "2x", - "size" : "256x256" + "size" : "256x256", + "filename" : "icon-mac-256@2x.png" }, { "idiom" : "mac", "scale" : "1x", - "size" : "512x512" + "size" : "512x512", + "filename" : "icon-mac-512.png" }, { "idiom" : "mac", "scale" : "2x", - "size" : "512x512" + "size" : "512x512", + "filename" : "icon-mac-512@2x.png" } ], "info" : { diff --git a/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-1024-dark.png b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-1024-dark.png new file mode 100644 index 0000000..28046b3 Binary files /dev/null and b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-1024-dark.png differ diff --git a/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-1024-light.png b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-1024-light.png new file mode 100644 index 0000000..200bb5a Binary files /dev/null and b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-1024-light.png differ diff --git a/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-1024-tinted.png b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-1024-tinted.png new file mode 100644 index 0000000..00751d9 Binary files /dev/null and b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-1024-tinted.png differ diff --git a/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-128.png b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-128.png new file mode 100644 index 0000000..1ea3d19 Binary files /dev/null and b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-128.png differ diff --git a/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-128@2x.png b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-128@2x.png new file mode 100644 index 0000000..ad77a73 Binary files /dev/null and b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-128@2x.png differ diff --git a/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-16.png b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-16.png new file mode 100644 index 0000000..17d8cef Binary files /dev/null and b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-16.png differ diff --git a/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-16@2x.png b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-16@2x.png new file mode 100644 index 0000000..4edecb9 Binary files /dev/null and b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-16@2x.png differ diff --git a/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-256.png b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-256.png new file mode 100644 index 0000000..ad77a73 Binary files /dev/null and b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-256.png differ diff --git a/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-256@2x.png b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-256@2x.png new file mode 100644 index 0000000..bbdebc6 Binary files /dev/null and b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-256@2x.png differ diff --git a/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-32.png b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-32.png new file mode 100644 index 0000000..4edecb9 Binary files /dev/null and b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-32.png differ diff --git a/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-32@2x.png b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-32@2x.png new file mode 100644 index 0000000..449157e Binary files /dev/null and b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-32@2x.png differ diff --git a/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-512.png b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-512.png new file mode 100644 index 0000000..bbdebc6 Binary files /dev/null and b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-512.png differ diff --git a/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-512@2x.png b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-512@2x.png new file mode 100644 index 0000000..200bb5a Binary files /dev/null and b/KeeVault/Assets.xcassets/AppIcon.appiconset/icon-mac-512@2x.png differ diff --git a/MyPass/Assets.xcassets/AccentColor.colorset/Contents.json b/KeeVault/Assets.xcassets/Contents.json similarity index 51% rename from MyPass/Assets.xcassets/AccentColor.colorset/Contents.json rename to KeeVault/Assets.xcassets/Contents.json index eb87897..73c0059 100644 --- a/MyPass/Assets.xcassets/AccentColor.colorset/Contents.json +++ b/KeeVault/Assets.xcassets/Contents.json @@ -1,9 +1,4 @@ { - "colors" : [ - { - "idiom" : "universal" - } - ], "info" : { "author" : "xcode", "version" : 1 diff --git a/KeeVault/Assets.xcassets/VaultBackground.colorset/Contents.json b/KeeVault/Assets.xcassets/VaultBackground.colorset/Contents.json new file mode 100644 index 0000000..e4bd0f8 --- /dev/null +++ b/KeeVault/Assets.xcassets/VaultBackground.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.980", + "green" : "0.957", + "blue" : "0.925", + "alpha" : "1.000" + } + } + }, + { + "idiom" : "universal", + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.141", + "green" : "0.125", + "blue" : "0.094", + "alpha" : "1.000" + } + } + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MyPass/ContentView.swift b/KeeVault/ContentView.swift similarity index 98% rename from MyPass/ContentView.swift rename to KeeVault/ContentView.swift index 9c61a87..581949d 100644 --- a/MyPass/ContentView.swift +++ b/KeeVault/ContentView.swift @@ -1,12 +1,12 @@ // // ContentView.swift -// MyPass +// KeeVault // // Created by Christophe Vila on 21/05/2026. // import SwiftUI -import MyPassCore +import KeeVaultCore #if os(macOS) import AppKit #endif @@ -22,6 +22,7 @@ struct ContentView: View { VaultRootView(session: session) } } + .background(Color("VaultBackground")) .onReceive( NotificationCenter.default.publisher(for: sceneBackgroundNotification) ) { _ in diff --git a/MyPass/MyPass.entitlements b/KeeVault/KeeVault.entitlements similarity index 77% rename from MyPass/MyPass.entitlements rename to KeeVault/KeeVault.entitlements index 7e0ef10..8c1a176 100644 --- a/MyPass/MyPass.entitlements +++ b/KeeVault/KeeVault.entitlements @@ -6,11 +6,11 @@ com.apple.security.application-groups - group.org.antiloop222.mypass + group.org.antiloop222.keevault keychain-access-groups - $(AppIdentifierPrefix)org.antiloop222.mypass + $(AppIdentifierPrefix)org.antiloop222.keevault diff --git a/MyPass/MyPassApp.swift b/KeeVault/KeeVaultApp.swift similarity index 73% rename from MyPass/MyPassApp.swift rename to KeeVault/KeeVaultApp.swift index f117269..7ce0df9 100644 --- a/MyPass/MyPassApp.swift +++ b/KeeVault/KeeVaultApp.swift @@ -1,6 +1,6 @@ // -// MyPassApp.swift -// MyPass +// KeeVaultApp.swift +// KeeVault // // Created by Christophe Vila on 21/05/2026. // @@ -8,7 +8,7 @@ import SwiftUI @main -struct MyPassApp: App { +struct KeeVaultApp: App { var body: some Scene { WindowGroup { ContentView() diff --git a/MyPass/Services/BiometricAuthService.swift b/KeeVault/Services/BiometricAuthService.swift similarity index 97% rename from MyPass/Services/BiometricAuthService.swift rename to KeeVault/Services/BiometricAuthService.swift index 407d641..d1ce43b 100644 --- a/MyPass/Services/BiometricAuthService.swift +++ b/KeeVault/Services/BiometricAuthService.swift @@ -1,6 +1,6 @@ // // BiometricAuthService.swift -// MyPass +// KeeVault // import LocalAuthentication diff --git a/MyPass/Services/ClipboardService.swift b/KeeVault/Services/ClipboardService.swift similarity index 98% rename from MyPass/Services/ClipboardService.swift rename to KeeVault/Services/ClipboardService.swift index fd8a736..dbf1d01 100644 --- a/MyPass/Services/ClipboardService.swift +++ b/KeeVault/Services/ClipboardService.swift @@ -1,6 +1,6 @@ // // ClipboardService.swift -// MyPass +// KeeVault // import Foundation diff --git a/MyPass/Services/FileBookmarkService.swift b/KeeVault/Services/FileBookmarkService.swift similarity index 96% rename from MyPass/Services/FileBookmarkService.swift rename to KeeVault/Services/FileBookmarkService.swift index c8f2fdb..a803217 100644 --- a/MyPass/Services/FileBookmarkService.swift +++ b/KeeVault/Services/FileBookmarkService.swift @@ -1,6 +1,6 @@ // // FileBookmarkService.swift -// MyPass +// KeeVault // import Foundation @@ -10,7 +10,7 @@ public final class FileBookmarkService { private static let key = "kdbxBookmark" private let defaults: UserDefaults - public init(appGroup: String = "group.org.antiloop222.mypass") { + public init(appGroup: String = "group.org.antiloop222.keevault") { defaults = UserDefaults(suiteName: appGroup) ?? .standard } diff --git a/MyPass/ViewModels/EntryEditViewModel.swift b/KeeVault/ViewModels/EntryEditViewModel.swift similarity index 94% rename from MyPass/ViewModels/EntryEditViewModel.swift rename to KeeVault/ViewModels/EntryEditViewModel.swift index 9480604..d4355b4 100644 --- a/MyPass/ViewModels/EntryEditViewModel.swift +++ b/KeeVault/ViewModels/EntryEditViewModel.swift @@ -1,8 +1,8 @@ -// MyPass/ViewModels/EntryEditViewModel.swift +// KeeVault/ViewModels/EntryEditViewModel.swift import Foundation import Combine import SwiftUI -import MyPassCore +import KeeVaultCore @MainActor final class EntryEditViewModel: ObservableObject { @@ -20,7 +20,7 @@ final class EntryEditViewModel: ObservableObject { private let existingEntry: Entry? /// `groupId` is the target group for a new entry, or the entry's current group when - /// editing (shown read-only in that case -- MyPass doesn't support re-parenting an + /// editing (shown read-only in that case -- KeeVault doesn't support re-parenting an /// existing entry to a different group yet). init(session: VaultSession, groupId: UUID, existing: Entry? = nil) { self.session = session diff --git a/MyPass/ViewModels/GroupFilterViewModel.swift b/KeeVault/ViewModels/GroupFilterViewModel.swift similarity index 88% rename from MyPass/ViewModels/GroupFilterViewModel.swift rename to KeeVault/ViewModels/GroupFilterViewModel.swift index fb5629a..543a5c6 100644 --- a/MyPass/ViewModels/GroupFilterViewModel.swift +++ b/KeeVault/ViewModels/GroupFilterViewModel.swift @@ -1,6 +1,6 @@ import Foundation import Combine -import MyPassCore +import KeeVaultCore @MainActor final class GroupFilterViewModel: ObservableObject { @@ -16,11 +16,11 @@ final class GroupFilterViewModel: ObservableObject { self.session = session } - func isSelected(_ group: MyPassCore.Group) -> Bool { + func isSelected(_ group: KeeVaultCore.Group) -> Bool { selectedGroupIds.contains(group.id) } - func toggle(_ group: MyPassCore.Group) { + func toggle(_ group: KeeVaultCore.Group) { guard let root = session.database?.root else { return } selectedGroupIds = GroupSelection.toggling(group.id, in: root, current: selectedGroupIds) lastToggledGroupId = selectedGroupIds.isEmpty ? nil : group.id diff --git a/MyPass/ViewModels/UnlockViewModel.swift b/KeeVault/ViewModels/UnlockViewModel.swift similarity index 96% rename from MyPass/ViewModels/UnlockViewModel.swift rename to KeeVault/ViewModels/UnlockViewModel.swift index aa1ac22..3d86002 100644 --- a/MyPass/ViewModels/UnlockViewModel.swift +++ b/KeeVault/ViewModels/UnlockViewModel.swift @@ -1,11 +1,11 @@ // // UnlockViewModel.swift -// MyPass +// KeeVault // import Foundation import Combine -import MyPassCore +import KeeVaultCore @MainActor final class UnlockViewModel: ObservableObject { @@ -24,7 +24,7 @@ final class UnlockViewModel: ObservableObject { init( session: VaultSession, bookmarkService: FileBookmarkService = .init(), - keychainStore: KeychainStore = .init(accessGroup: "F2KB6W8N4R.org.antiloop222.mypass"), + keychainStore: KeychainStore = .init(accessGroup: "F2KB6W8N4R.org.antiloop222.keevault"), biometricService: BiometricAuthService = .init() ) { self.session = session @@ -44,7 +44,7 @@ final class UnlockViewModel: ObservableObject { isUnlocking = true errorMessage = nil do { - try await biometricService.authenticate(reason: "Unlock MyPass") + try await biometricService.authenticate(reason: "Unlock KeeVault") let storedPassword = try keychainStore.load(for: keychainAccount) let url = try bookmarkService.resolveURL() defer { bookmarkService.stopAccess(url: url) } diff --git a/MyPass/ViewModels/VaultViewModel.swift b/KeeVault/ViewModels/VaultViewModel.swift similarity index 96% rename from MyPass/ViewModels/VaultViewModel.swift rename to KeeVault/ViewModels/VaultViewModel.swift index 90f12cf..caca440 100644 --- a/MyPass/ViewModels/VaultViewModel.swift +++ b/KeeVault/ViewModels/VaultViewModel.swift @@ -1,7 +1,7 @@ -// MyPass/ViewModels/VaultViewModel.swift +// KeeVault/ViewModels/VaultViewModel.swift import Foundation import Combine -import MyPassCore +import KeeVaultCore @MainActor final class VaultViewModel: ObservableObject { diff --git a/MyPass/Views/EntryDetailView.swift b/KeeVault/Views/EntryDetailView.swift similarity index 99% rename from MyPass/Views/EntryDetailView.swift rename to KeeVault/Views/EntryDetailView.swift index b817444..530039f 100644 --- a/MyPass/Views/EntryDetailView.swift +++ b/KeeVault/Views/EntryDetailView.swift @@ -1,11 +1,11 @@ // // EntryDetailView.swift -// MyPass +// KeeVault // import SwiftUI import Combine -import MyPassCore +import KeeVaultCore struct EntryDetailView: View { let entry: Entry diff --git a/MyPass/Views/EntryEditView.swift b/KeeVault/Views/EntryEditView.swift similarity index 98% rename from MyPass/Views/EntryEditView.swift rename to KeeVault/Views/EntryEditView.swift index 094b23c..d58b645 100644 --- a/MyPass/Views/EntryEditView.swift +++ b/KeeVault/Views/EntryEditView.swift @@ -1,6 +1,6 @@ -// MyPass/Views/EntryEditView.swift +// KeeVault/Views/EntryEditView.swift import SwiftUI -import MyPassCore +import KeeVaultCore struct EntryEditView: View { @ObservedObject var vm: EntryEditViewModel diff --git a/MyPass/Views/EntryListView.swift b/KeeVault/Views/EntryListView.swift similarity index 93% rename from MyPass/Views/EntryListView.swift rename to KeeVault/Views/EntryListView.swift index 1d969e8..03b3a36 100644 --- a/MyPass/Views/EntryListView.swift +++ b/KeeVault/Views/EntryListView.swift @@ -1,6 +1,6 @@ -// MyPass/Views/EntryListView.swift +// KeeVault/Views/EntryListView.swift import SwiftUI -import MyPassCore +import KeeVaultCore struct EntryListView: View { @ObservedObject var vm: VaultViewModel @@ -23,7 +23,9 @@ struct EntryListView: View { offsets.map { vm.displayedEntries[$0] }.forEach(vm.deleteEntry) } } - .navigationTitle("MyPass") + .scrollContentBackground(.hidden) + .background(Color("VaultBackground")) + .navigationTitle("KeeVault") .searchable(text: $vm.searchQuery, prompt: "Search entries…") .toolbar { ToolbarItem(placement: .primaryAction) { diff --git a/MyPass/Views/GroupFilterView.swift b/KeeVault/Views/GroupFilterView.swift similarity index 59% rename from MyPass/Views/GroupFilterView.swift rename to KeeVault/Views/GroupFilterView.swift index 2e1cbc2..eec8d92 100644 --- a/MyPass/Views/GroupFilterView.swift +++ b/KeeVault/Views/GroupFilterView.swift @@ -1,9 +1,9 @@ import SwiftUI -import MyPassCore +import KeeVaultCore struct GroupFilterView: View { @ObservedObject var vm: GroupFilterViewModel - let rootGroup: MyPassCore.Group + let rootGroup: KeeVaultCore.Group var body: some View { List { @@ -12,24 +12,25 @@ struct GroupFilterView: View { } GroupFilterNode(group: rootGroup, vm: vm) } + .scrollContentBackground(.hidden) + .background(Color("VaultBackground")) .navigationTitle("Groups") } } private struct GroupFilterNode: View { - let group: MyPassCore.Group + let group: KeeVaultCore.Group @ObservedObject var vm: GroupFilterViewModel + var depth: Int = 0 var body: some View { - if group.subgroups.isEmpty { + // A plain SwiftUI.Group (not a container view) flattens its children into + // separate List rows, so the whole subtree renders always-expanded -- + // no DisclosureGroup, no tap-to-reveal -- active filters are visible at a glance. + SwiftUI.Group { row - } else { - DisclosureGroup { - ForEach(group.subgroups) { sub in - GroupFilterNode(group: sub, vm: vm) - } - } label: { - row + ForEach(group.subgroups) { sub in + GroupFilterNode(group: sub, vm: vm, depth: depth + 1) } } } @@ -45,5 +46,6 @@ private struct GroupFilterNode: View { } } .buttonStyle(.plain) + .padding(.leading, CGFloat(depth) * 16) } } diff --git a/MyPass/Views/UnlockView.swift b/KeeVault/Views/UnlockView.swift similarity index 98% rename from MyPass/Views/UnlockView.swift rename to KeeVault/Views/UnlockView.swift index 8ce357a..0cc12b9 100644 --- a/MyPass/Views/UnlockView.swift +++ b/KeeVault/Views/UnlockView.swift @@ -1,11 +1,11 @@ // // UnlockView.swift -// MyPass +// KeeVault // import SwiftUI import UniformTypeIdentifiers -import MyPassCore +import KeeVaultCore struct UnlockView: View { @ObservedObject var vm: UnlockViewModel @@ -16,7 +16,7 @@ struct UnlockView: View { Image(systemName: "lock.shield.fill") .font(.system(size: 64)) .foregroundStyle(.tint) - Text("MyPass") + Text("KeeVault") .font(.largeTitle.bold()) if vm.hasVault { diff --git a/KeeVaultCore/.swiftpm/xcode/xcuserdata/kriss.xcuserdatad/xcschemes/xcschememanagement.plist b/KeeVaultCore/.swiftpm/xcode/xcuserdata/kriss.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..a45039e --- /dev/null +++ b/KeeVaultCore/.swiftpm/xcode/xcuserdata/kriss.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + KeeVaultCore.xcscheme_^#shared#^_ + + orderHint + 2 + + + + diff --git a/MyPassCore/Package.swift b/KeeVaultCore/Package.swift similarity index 68% rename from MyPassCore/Package.swift rename to KeeVaultCore/Package.swift index fd1f405..52b6b63 100644 --- a/MyPassCore/Package.swift +++ b/KeeVaultCore/Package.swift @@ -2,24 +2,24 @@ import PackageDescription let package = Package( - name: "MyPassCore", + name: "KeeVaultCore", platforms: [.iOS(.v17), .macOS(.v14)], products: [ - .library(name: "MyPassCore", targets: ["MyPassCore"]), + .library(name: "KeeVaultCore", targets: ["KeeVaultCore"]), ], dependencies: [ .package(path: "../Vendor/KeePassKit"), ], targets: [ .target( - name: "MyPassCore", + name: "KeeVaultCore", dependencies: [ .product(name: "KeePassKit", package: "KeePassKit"), ] ), .testTarget( - name: "MyPassCoreTests", - dependencies: ["MyPassCore"], + name: "KeeVaultCoreTests", + dependencies: ["KeeVaultCore"], resources: [.copy("Fixtures")] ), ] diff --git a/MyPassCore/Sources/MyPassCore/AutoFill/CredentialMatcher.swift b/KeeVaultCore/Sources/KeeVaultCore/AutoFill/CredentialMatcher.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/AutoFill/CredentialMatcher.swift rename to KeeVaultCore/Sources/KeeVaultCore/AutoFill/CredentialMatcher.swift diff --git a/MyPassCore/Sources/MyPassCore/Icons/KeePassIconMapper.swift b/KeeVaultCore/Sources/KeeVaultCore/Icons/KeePassIconMapper.swift similarity index 97% rename from MyPassCore/Sources/MyPassCore/Icons/KeePassIconMapper.swift rename to KeeVaultCore/Sources/KeeVaultCore/Icons/KeePassIconMapper.swift index bf72736..fc8ba96 100644 --- a/MyPassCore/Sources/MyPassCore/Icons/KeePassIconMapper.swift +++ b/KeeVaultCore/Sources/KeeVaultCore/Icons/KeePassIconMapper.swift @@ -1,7 +1,7 @@ import Foundation /// Maps KeePass's standard icon palette (indices 0-68) to an approximate SF Symbol. -/// This is a best-effort visual match, not the actual KeePass icon artwork -- MyPass's +/// This is a best-effort visual match, not the actual KeePass icon artwork -- KeeVault's /// data model only stores the numeric iconIndex, not custom icon images. public enum KeePassIconMapper { private static let symbolsByIndex: [Int: String] = [ diff --git a/MyPassCore/Sources/MyPassCore/KDBX/KDBXDocument.swift b/KeeVaultCore/Sources/KeeVaultCore/KDBX/KDBXDocument.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/KDBX/KDBXDocument.swift rename to KeeVaultCore/Sources/KeeVaultCore/KDBX/KDBXDocument.swift diff --git a/MyPassCore/Sources/MyPassCore/KDBX/KDBXError.swift b/KeeVaultCore/Sources/KeeVaultCore/KDBX/KDBXError.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/KDBX/KDBXError.swift rename to KeeVaultCore/Sources/KeeVaultCore/KDBX/KDBXError.swift diff --git a/MyPassCore/Sources/MyPassCore/KDBX/KDBXMapper.swift b/KeeVaultCore/Sources/KeeVaultCore/KDBX/KDBXMapper.swift similarity index 97% rename from MyPassCore/Sources/MyPassCore/KDBX/KDBXMapper.swift rename to KeeVaultCore/Sources/KeeVaultCore/KDBX/KDBXMapper.swift index ff4c773..7c63a35 100644 --- a/MyPassCore/Sources/MyPassCore/KDBX/KDBXMapper.swift +++ b/KeeVaultCore/Sources/KeeVaultCore/KDBX/KDBXMapper.swift @@ -3,7 +3,7 @@ import KeePassKit enum KDBXMapper { - // MARK: - KeePassKit → MyPassCore + // MARK: - KeePassKit → KeeVaultCore static func database(from tree: KPKTree) -> KDBXDatabase { let meta = DatabaseMetadata( @@ -67,7 +67,7 @@ enum KDBXMapper { ) } - // MARK: - MyPassCore → KeePassKit + // MARK: - KeeVaultCore → KeePassKit static func tree(from db: KDBXDatabase) -> KPKTree { let tree = KPKTree() @@ -129,7 +129,7 @@ enum KDBXMapper { var components = URLComponents() components.scheme = "otpauth" components.host = "totp" - components.path = "/MyPass" + components.path = "/KeeVault" components.queryItems = [ URLQueryItem(name: "secret", value: config.secret), URLQueryItem(name: "period", value: String(config.period)), diff --git a/MyPassCore/Sources/MyPassCore/Keychain/KeychainError.swift b/KeeVaultCore/Sources/KeeVaultCore/Keychain/KeychainError.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/Keychain/KeychainError.swift rename to KeeVaultCore/Sources/KeeVaultCore/Keychain/KeychainError.swift diff --git a/MyPassCore/Sources/MyPassCore/Keychain/KeychainStore.swift b/KeeVaultCore/Sources/KeeVaultCore/Keychain/KeychainStore.swift similarity index 99% rename from MyPassCore/Sources/MyPassCore/Keychain/KeychainStore.swift rename to KeeVaultCore/Sources/KeeVaultCore/Keychain/KeychainStore.swift index 13f56bf..2fc509f 100644 --- a/MyPassCore/Sources/MyPassCore/Keychain/KeychainStore.swift +++ b/KeeVaultCore/Sources/KeeVaultCore/Keychain/KeychainStore.swift @@ -5,7 +5,7 @@ public struct KeychainStore { private let accessGroup: String private let service: String - public init(accessGroup: String, service: String = "org.antiloop222.mypass") { + public init(accessGroup: String, service: String = "org.antiloop222.keevault") { self.accessGroup = accessGroup self.service = service } diff --git a/MyPassCore/Sources/MyPassCore/Models/Attachment.swift b/KeeVaultCore/Sources/KeeVaultCore/Models/Attachment.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/Models/Attachment.swift rename to KeeVaultCore/Sources/KeeVaultCore/Models/Attachment.swift diff --git a/MyPassCore/Sources/MyPassCore/Models/CustomField.swift b/KeeVaultCore/Sources/KeeVaultCore/Models/CustomField.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/Models/CustomField.swift rename to KeeVaultCore/Sources/KeeVaultCore/Models/CustomField.swift diff --git a/MyPassCore/Sources/MyPassCore/Models/DatabaseMetadata.swift b/KeeVaultCore/Sources/KeeVaultCore/Models/DatabaseMetadata.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/Models/DatabaseMetadata.swift rename to KeeVaultCore/Sources/KeeVaultCore/Models/DatabaseMetadata.swift diff --git a/MyPassCore/Sources/MyPassCore/Models/Entry.swift b/KeeVaultCore/Sources/KeeVaultCore/Models/Entry.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/Models/Entry.swift rename to KeeVaultCore/Sources/KeeVaultCore/Models/Entry.swift diff --git a/MyPassCore/Sources/MyPassCore/Models/Group.swift b/KeeVaultCore/Sources/KeeVaultCore/Models/Group.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/Models/Group.swift rename to KeeVaultCore/Sources/KeeVaultCore/Models/Group.swift diff --git a/MyPassCore/Sources/MyPassCore/Models/KDBXDatabase.swift b/KeeVaultCore/Sources/KeeVaultCore/Models/KDBXDatabase.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/Models/KDBXDatabase.swift rename to KeeVaultCore/Sources/KeeVaultCore/Models/KDBXDatabase.swift diff --git a/MyPassCore/Sources/MyPassCore/Models/ProtectedString.swift b/KeeVaultCore/Sources/KeeVaultCore/Models/ProtectedString.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/Models/ProtectedString.swift rename to KeeVaultCore/Sources/KeeVaultCore/Models/ProtectedString.swift diff --git a/MyPassCore/Sources/MyPassCore/Models/TOTPConfig.swift b/KeeVaultCore/Sources/KeeVaultCore/Models/TOTPConfig.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/Models/TOTPConfig.swift rename to KeeVaultCore/Sources/KeeVaultCore/Models/TOTPConfig.swift diff --git a/MyPassCore/Sources/MyPassCore/Session/GroupSelection.swift b/KeeVaultCore/Sources/KeeVaultCore/Session/GroupSelection.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/Session/GroupSelection.swift rename to KeeVaultCore/Sources/KeeVaultCore/Session/GroupSelection.swift diff --git a/MyPassCore/Sources/MyPassCore/Session/GroupTree.swift b/KeeVaultCore/Sources/KeeVaultCore/Session/GroupTree.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/Session/GroupTree.swift rename to KeeVaultCore/Sources/KeeVaultCore/Session/GroupTree.swift diff --git a/MyPassCore/Sources/MyPassCore/Session/VaultSession.swift b/KeeVaultCore/Sources/KeeVaultCore/Session/VaultSession.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/Session/VaultSession.swift rename to KeeVaultCore/Sources/KeeVaultCore/Session/VaultSession.swift diff --git a/MyPassCore/Sources/MyPassCore/TOTP/TOTPGenerator.swift b/KeeVaultCore/Sources/KeeVaultCore/TOTP/TOTPGenerator.swift similarity index 100% rename from MyPassCore/Sources/MyPassCore/TOTP/TOTPGenerator.swift rename to KeeVaultCore/Sources/KeeVaultCore/TOTP/TOTPGenerator.swift diff --git a/MyPassCore/Tests/MyPassCoreTests/CredentialMatcherTests.swift b/KeeVaultCore/Tests/KeeVaultCoreTests/CredentialMatcherTests.swift similarity index 98% rename from MyPassCore/Tests/MyPassCoreTests/CredentialMatcherTests.swift rename to KeeVaultCore/Tests/KeeVaultCoreTests/CredentialMatcherTests.swift index 123ae9c..30bb009 100644 --- a/MyPassCore/Tests/MyPassCoreTests/CredentialMatcherTests.swift +++ b/KeeVaultCore/Tests/KeeVaultCoreTests/CredentialMatcherTests.swift @@ -1,5 +1,5 @@ import XCTest -@testable import MyPassCore +@testable import KeeVaultCore final class CredentialMatcherTests: XCTestCase { func makeEntry(url: String) -> Entry { diff --git a/MyPassCore/Tests/MyPassCoreTests/Fixtures/test.kdbx b/KeeVaultCore/Tests/KeeVaultCoreTests/Fixtures/test.kdbx similarity index 100% rename from MyPassCore/Tests/MyPassCoreTests/Fixtures/test.kdbx rename to KeeVaultCore/Tests/KeeVaultCoreTests/Fixtures/test.kdbx diff --git a/MyPassCore/Tests/MyPassCoreTests/GroupSelectionTests.swift b/KeeVaultCore/Tests/KeeVaultCoreTests/GroupSelectionTests.swift similarity index 98% rename from MyPassCore/Tests/MyPassCoreTests/GroupSelectionTests.swift rename to KeeVaultCore/Tests/KeeVaultCoreTests/GroupSelectionTests.swift index ded5ef2..9b7df00 100644 --- a/MyPassCore/Tests/MyPassCoreTests/GroupSelectionTests.swift +++ b/KeeVaultCore/Tests/KeeVaultCoreTests/GroupSelectionTests.swift @@ -1,5 +1,5 @@ import XCTest -@testable import MyPassCore +@testable import KeeVaultCore final class GroupSelectionTests: XCTestCase { private func makeSampleTree() -> (root: Group, work: Group, email: Group, personal: Group) { diff --git a/MyPassCore/Tests/MyPassCoreTests/GroupTreeTests.swift b/KeeVaultCore/Tests/KeeVaultCoreTests/GroupTreeTests.swift similarity index 98% rename from MyPassCore/Tests/MyPassCoreTests/GroupTreeTests.swift rename to KeeVaultCore/Tests/KeeVaultCoreTests/GroupTreeTests.swift index bd27e9a..e338e18 100644 --- a/MyPassCore/Tests/MyPassCoreTests/GroupTreeTests.swift +++ b/KeeVaultCore/Tests/KeeVaultCoreTests/GroupTreeTests.swift @@ -1,5 +1,5 @@ import XCTest -@testable import MyPassCore +@testable import KeeVaultCore final class GroupTreeTests: XCTestCase { private func makeSampleTree() -> (root: Group, work: Group, email: Group) { diff --git a/MyPassCore/Tests/MyPassCoreTests/KDBXDocumentTests.swift b/KeeVaultCore/Tests/KeeVaultCoreTests/KDBXDocumentTests.swift similarity index 97% rename from MyPassCore/Tests/MyPassCoreTests/KDBXDocumentTests.swift rename to KeeVaultCore/Tests/KeeVaultCoreTests/KDBXDocumentTests.swift index 5926181..347c9a8 100644 --- a/MyPassCore/Tests/MyPassCoreTests/KDBXDocumentTests.swift +++ b/KeeVaultCore/Tests/KeeVaultCoreTests/KDBXDocumentTests.swift @@ -1,5 +1,5 @@ import XCTest -@testable import MyPassCore +@testable import KeeVaultCore final class KDBXDocumentTests: XCTestCase { var fixtureURL: URL! diff --git a/MyPassCore/Tests/MyPassCoreTests/KeePassIconMapperTests.swift b/KeeVaultCore/Tests/KeeVaultCoreTests/KeePassIconMapperTests.swift similarity index 94% rename from MyPassCore/Tests/MyPassCoreTests/KeePassIconMapperTests.swift rename to KeeVaultCore/Tests/KeeVaultCoreTests/KeePassIconMapperTests.swift index cca77f8..7093c6f 100644 --- a/MyPassCore/Tests/MyPassCoreTests/KeePassIconMapperTests.swift +++ b/KeeVaultCore/Tests/KeeVaultCoreTests/KeePassIconMapperTests.swift @@ -1,5 +1,5 @@ import XCTest -@testable import MyPassCore +@testable import KeeVaultCore final class KeePassIconMapperTests: XCTestCase { func test_knownIndex_returnsMappedSymbol() { diff --git a/MyPassCore/Tests/MyPassCoreTests/ProtectedStringTests.swift b/KeeVaultCore/Tests/KeeVaultCoreTests/ProtectedStringTests.swift similarity index 96% rename from MyPassCore/Tests/MyPassCoreTests/ProtectedStringTests.swift rename to KeeVaultCore/Tests/KeeVaultCoreTests/ProtectedStringTests.swift index 4eeb392..f242082 100644 --- a/MyPassCore/Tests/MyPassCoreTests/ProtectedStringTests.swift +++ b/KeeVaultCore/Tests/KeeVaultCoreTests/ProtectedStringTests.swift @@ -1,5 +1,5 @@ import XCTest -@testable import MyPassCore +@testable import KeeVaultCore final class ProtectedStringTests: XCTestCase { func test_reveal_returnsOriginalValue() { diff --git a/MyPassCore/Tests/MyPassCoreTests/TOTPGeneratorTests.swift b/KeeVaultCore/Tests/KeeVaultCoreTests/TOTPGeneratorTests.swift similarity index 97% rename from MyPassCore/Tests/MyPassCoreTests/TOTPGeneratorTests.swift rename to KeeVaultCore/Tests/KeeVaultCoreTests/TOTPGeneratorTests.swift index a0a3df4..dfe33c5 100644 --- a/MyPassCore/Tests/MyPassCoreTests/TOTPGeneratorTests.swift +++ b/KeeVaultCore/Tests/KeeVaultCoreTests/TOTPGeneratorTests.swift @@ -1,5 +1,5 @@ import XCTest -@testable import MyPassCore +@testable import KeeVaultCore final class TOTPGeneratorTests: XCTestCase { // RFC 6238 Section 8 test vectors for SHA-1 diff --git a/MyPassTests/MyPassTests.swift b/KeeVaultTests/KeeVaultTests.swift similarity index 82% rename from MyPassTests/MyPassTests.swift rename to KeeVaultTests/KeeVaultTests.swift index 28ab6ec..db4657a 100644 --- a/MyPassTests/MyPassTests.swift +++ b/KeeVaultTests/KeeVaultTests.swift @@ -1,13 +1,13 @@ // -// MyPassTests.swift -// MyPassTests +// KeeVaultTests.swift +// KeeVaultTests // // Created by Christophe Vila on 21/05/2026. // import Testing -struct MyPassTests { +struct KeeVaultTests { @Test func example() async throws { // Write your test here and use APIs like `#expect(...)` to check expected conditions. diff --git a/MyPassUITests/MyPassUITests.swift b/KeeVaultUITests/KeeVaultUITests.swift similarity index 93% rename from MyPassUITests/MyPassUITests.swift rename to KeeVaultUITests/KeeVaultUITests.swift index 04ca752..39cdc3c 100644 --- a/MyPassUITests/MyPassUITests.swift +++ b/KeeVaultUITests/KeeVaultUITests.swift @@ -1,13 +1,13 @@ // -// MyPassUITests.swift -// MyPassUITests +// KeeVaultUITests.swift +// KeeVaultUITests // // Created by Christophe Vila on 21/05/2026. // import XCTest -final class MyPassUITests: XCTestCase { +final class KeeVaultUITests: XCTestCase { override func setUpWithError() throws { // Put setup code here. This method is called before the invocation of each test method in the class. diff --git a/MyPassUITests/MyPassUITestsLaunchTests.swift b/KeeVaultUITests/KeeVaultUITestsLaunchTests.swift similarity index 88% rename from MyPassUITests/MyPassUITestsLaunchTests.swift rename to KeeVaultUITests/KeeVaultUITestsLaunchTests.swift index 70c5f19..36d1387 100644 --- a/MyPassUITests/MyPassUITestsLaunchTests.swift +++ b/KeeVaultUITests/KeeVaultUITestsLaunchTests.swift @@ -1,13 +1,13 @@ // -// MyPassUITestsLaunchTests.swift -// MyPassUITests +// KeeVaultUITestsLaunchTests.swift +// KeeVaultUITests // // Created by Christophe Vila on 21/05/2026. // import XCTest -final class MyPassUITestsLaunchTests: XCTestCase { +final class KeeVaultUITestsLaunchTests: XCTestCase { override class var runsForEachTargetApplicationUIConfiguration: Bool { true