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