chore: wire up AutoFill extension target and rebrand bundle prefix

Adds the AutoFill Credential Provider Extension target (App Group +
Keychain Sharing capabilities, autofill-credential-provider
entitlement), removes the leftover SwiftData bootstrap from
MyPassApp.swift now that Item.swift is gone, and switches the bundle
ID / App Group / Keychain group prefix from com.christophevila to
org.antiloop222 to match the project's existing identifier.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
This commit is contained in:
2026-09-19 15:33:23 +02:00
co-authored by Claude Sonnet 5
parent 838e078304
commit 6279488416
1290 changed files with 364 additions and 6505 deletions
+3
View File
@@ -1,3 +1,6 @@
[submodule "Vendor/KeePassKit"]
path = Vendor/KeePassKit
url = https://github.com/mstarke/KeePassKit
[submodule "Vendor/KissXML"]
path = Vendor/KissXML
url = https://github.com/robbiehanson/KissXML
+215 -1
View File
@@ -6,6 +6,12 @@
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
205678DB2FC0EB5200251C6B /* MyPassCore in Frameworks */ = {isa = PBXBuildFile; productRef = 205678DA2FC0EB5200251C6B /* MyPassCore */; };
2096B432305EC2B200C2F253 /* AuthenticationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 205678E32FC0F52A00251C6B /* AuthenticationServices.framework */; };
2096B43D305EC2B200C2F253 /* autofill.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 2096B431305EC2B200C2F253 /* autofill.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
205678A32FBF9CBC00251C6B /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
@@ -21,14 +27,47 @@
remoteGlobalIDString = 205678922FBF9CBB00251C6B;
remoteInfo = MyPass;
};
2096B43B305EC2B200C2F253 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 2056788B2FBF9CBB00251C6B /* Project object */;
proxyType = 1;
remoteGlobalIDString = 2096B430305EC2B200C2F253;
remoteInfo = autofill;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
205678F42FC0F52A00251C6B /* Embed Foundation Extensions */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 13;
files = (
2096B43D305EC2B200C2F253 /* autofill.appex in Embed Foundation Extensions */,
);
name = "Embed Foundation Extensions";
runOnlyForDeploymentPostprocessing = 0;
};
/* 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; };
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; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
2096B440305EC2B200C2F253 /* Exceptions for "autofill" folder in "autofill" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
);
target = 2096B430305EC2B200C2F253 /* autofill */;
};
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
205678952FBF9CBB00251C6B /* MyPass */ = {
isa = PBXFileSystemSynchronizedRootGroup;
@@ -45,6 +84,14 @@
path = MyPassUITests;
sourceTree = "<group>";
};
2096B433305EC2B200C2F253 /* autofill */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
2096B440305EC2B200C2F253 /* Exceptions for "autofill" folder in "autofill" target */,
);
path = autofill;
sourceTree = "<group>";
};
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
@@ -52,6 +99,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
205678DB2FC0EB5200251C6B /* MyPassCore in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -69,6 +117,14 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
2096B42E305EC2B200C2F253 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
2096B432305EC2B200C2F253 /* AuthenticationServices.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
@@ -78,6 +134,8 @@
205678952FBF9CBB00251C6B /* MyPass */,
205678A52FBF9CBC00251C6B /* MyPassTests */,
205678AF2FBF9CBC00251C6B /* MyPassUITests */,
2096B433305EC2B200C2F253 /* autofill */,
205678E22FC0F52A00251C6B /* Frameworks */,
205678942FBF9CBB00251C6B /* Products */,
);
sourceTree = "<group>";
@@ -88,10 +146,19 @@
205678932FBF9CBB00251C6B /* MyPass.app */,
205678A22FBF9CBC00251C6B /* MyPassTests.xctest */,
205678AC2FBF9CBC00251C6B /* MyPassUITests.xctest */,
2096B431305EC2B200C2F253 /* autofill.appex */,
);
name = Products;
sourceTree = "<group>";
};
205678E22FC0F52A00251C6B /* Frameworks */ = {
isa = PBXGroup;
children = (
205678E32FC0F52A00251C6B /* AuthenticationServices.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -102,16 +169,19 @@
2056788F2FBF9CBB00251C6B /* Sources */,
205678902FBF9CBB00251C6B /* Frameworks */,
205678912FBF9CBB00251C6B /* Resources */,
205678F42FC0F52A00251C6B /* Embed Foundation Extensions */,
);
buildRules = (
);
dependencies = (
2096B43C305EC2B200C2F253 /* PBXTargetDependency */,
);
fileSystemSynchronizedGroups = (
205678952FBF9CBB00251C6B /* MyPass */,
);
name = MyPass;
packageProductDependencies = (
205678DA2FC0EB5200251C6B /* MyPassCore */,
);
productName = MyPass;
productReference = 205678932FBF9CBB00251C6B /* MyPass.app */;
@@ -163,6 +233,28 @@
productReference = 205678AC2FBF9CBC00251C6B /* MyPassUITests.xctest */;
productType = "com.apple.product-type.bundle.ui-testing";
};
2096B430305EC2B200C2F253 /* autofill */ = {
isa = PBXNativeTarget;
buildConfigurationList = 2096B441305EC2B200C2F253 /* Build configuration list for PBXNativeTarget "autofill" */;
buildPhases = (
2096B42D305EC2B200C2F253 /* Sources */,
2096B42E305EC2B200C2F253 /* Frameworks */,
2096B42F305EC2B200C2F253 /* Resources */,
);
buildRules = (
);
dependencies = (
);
fileSystemSynchronizedGroups = (
2096B433305EC2B200C2F253 /* autofill */,
);
name = autofill;
packageProductDependencies = (
);
productName = autofill;
productReference = 2096B431305EC2B200C2F253 /* autofill.appex */;
productType = "com.apple.product-type.app-extension";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
@@ -170,7 +262,7 @@
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 2650;
LastSwiftUpdateCheck = 2660;
LastUpgradeCheck = 2650;
TargetAttributes = {
205678922FBF9CBB00251C6B = {
@@ -184,6 +276,9 @@
CreatedOnToolsVersion = 26.5;
TestTargetID = 205678922FBF9CBB00251C6B;
};
2096B430305EC2B200C2F253 = {
CreatedOnToolsVersion = 26.6;
};
};
};
buildConfigurationList = 2056788E2FBF9CBB00251C6B /* Build configuration list for PBXProject "MyPass" */;
@@ -195,6 +290,9 @@
);
mainGroup = 2056788A2FBF9CBB00251C6B;
minimizedProjectReferenceProxies = 1;
packageReferences = (
205678D92FC0EB5200251C6B /* XCLocalSwiftPackageReference "MyPassCore" */,
);
preferredProjectObjectVersion = 77;
productRefGroup = 205678942FBF9CBB00251C6B /* Products */;
projectDirPath = "";
@@ -203,6 +301,7 @@
205678922FBF9CBB00251C6B /* MyPass */,
205678A12FBF9CBC00251C6B /* MyPassTests */,
205678AB2FBF9CBC00251C6B /* MyPassUITests */,
2096B430305EC2B200C2F253 /* autofill */,
);
};
/* End PBXProject section */
@@ -229,6 +328,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
2096B42F305EC2B200C2F253 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -253,6 +359,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
2096B42D305EC2B200C2F253 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
@@ -266,6 +379,11 @@
target = 205678922FBF9CBB00251C6B /* MyPass */;
targetProxy = 205678AD2FBF9CBC00251C6B /* PBXContainerItemProxy */;
};
2096B43C305EC2B200C2F253 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 2096B430305EC2B200C2F253 /* autofill */;
targetProxy = 2096B43B305EC2B200C2F253 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
@@ -388,8 +506,10 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = MyPass/MyPass.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = F2KB6W8N4R;
ENABLE_APP_SANDBOX = YES;
ENABLE_PREVIEWS = YES;
ENABLE_USER_SELECTED_FILES = readonly;
@@ -410,6 +530,9 @@
MACOSX_DEPLOYMENT_TARGET = 26.5;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.MyPass;
"PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = org.antiloop222.MyPass;
"PRODUCT_BUNDLE_IDENTIFIER[sdk=macosx*]" = org.antiloop222.MyPass;
"PRODUCT_BUNDLE_IDENTIFIER[sdk=xros*]" = org.antiloop222.MyPass;
PRODUCT_NAME = "$(TARGET_NAME)";
REGISTER_APP_GROUPS = YES;
SDKROOT = auto;
@@ -430,8 +553,10 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = MyPass/MyPass.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = F2KB6W8N4R;
ENABLE_APP_SANDBOX = YES;
ENABLE_PREVIEWS = YES;
ENABLE_USER_SELECTED_FILES = readonly;
@@ -452,6 +577,9 @@
MACOSX_DEPLOYMENT_TARGET = 26.5;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.MyPass;
"PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = org.antiloop222.MyPass;
"PRODUCT_BUNDLE_IDENTIFIER[sdk=macosx*]" = org.antiloop222.MyPass;
"PRODUCT_BUNDLE_IDENTIFIER[sdk=xros*]" = org.antiloop222.MyPass;
PRODUCT_NAME = "$(TARGET_NAME)";
REGISTER_APP_GROUPS = YES;
SDKROOT = auto;
@@ -565,6 +693,69 @@
};
name = Release;
};
2096B43E305EC2B200C2F253 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_ENTITLEMENTS = autofill/autofill.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = F2KB6W8N4R;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = autofill/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = autofill;
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 26.5;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.MyPass.autofill;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
2096B43F305EC2B200C2F253 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_ENTITLEMENTS = autofill/autofill.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = F2KB6W8N4R;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = autofill/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = autofill;
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 26.5;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = org.antiloop222.MyPass.autofill;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
@@ -604,7 +795,30 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
2096B441305EC2B200C2F253 /* Build configuration list for PBXNativeTarget "autofill" */ = {
isa = XCConfigurationList;
buildConfigurations = (
2096B43E305EC2B200C2F253 /* Debug */,
2096B43F305EC2B200C2F253 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCLocalSwiftPackageReference section */
205678D92FC0EB5200251C6B /* XCLocalSwiftPackageReference "MyPassCore" */ = {
isa = XCLocalSwiftPackageReference;
relativePath = MyPassCore;
};
/* End XCLocalSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
205678DA2FC0EB5200251C6B /* MyPassCore */ = {
isa = XCSwiftPackageProductDependency;
productName = MyPassCore;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 2056788B2FBF9CBB00251C6B /* Project object */;
}
@@ -4,11 +4,21 @@
<dict>
<key>SchemeUserState</key>
<dict>
<key>AutoFillExtension.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>1</integer>
</dict>
<key>MyPass.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
<key>autofill.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>1</integer>
</dict>
</dict>
</dict>
</plist>
@@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>com.apple.security.application-groups</key>
<array/>
</dict>
</plist>
-15
View File
@@ -6,27 +6,12 @@
//
import SwiftUI
import SwiftData
@main
struct MyPassApp: App {
var sharedModelContainer: ModelContainer = {
let schema = Schema([
Item.self,
])
let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)
do {
return try ModelContainer(for: schema, configurations: [modelConfiguration])
} catch {
fatalError("Could not create ModelContainer: \(error)")
}
}()
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(sharedModelContainer)
}
}
-1
View File
@@ -1 +0,0 @@
15943
@@ -1,15 +0,0 @@
#if __OBJC__
#import <Foundation/Foundation.h>
#if __cplusplus
extern "C" {
#endif
NSBundle* KeePassKit_SWIFTPM_MODULE_BUNDLE(void);
#define SWIFTPM_MODULE_BUNDLE KeePassKit_SWIFTPM_MODULE_BUNDLE()
#if __cplusplus
}
#endif
#endif
@@ -1,12 +0,0 @@
#import <Foundation/Foundation.h>
NSBundle* KeePassKit_SWIFTPM_MODULE_BUNDLE() {
NSURL *bundleURL = [[[NSBundle mainBundle] bundleURL] URLByAppendingPathComponent:@"KeePassKit_KeePassKit.bundle"];
NSBundle *preferredBundle = [NSBundle bundleWithURL:bundleURL];
if (preferredBundle == nil) {
return [NSBundle bundleWithPath:@"/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/KeePassKit_KeePassKit.bundle"];
}
return preferredBundle;
}
@@ -1,6 +0,0 @@
/* Bundle name */
"CFBundleName" = "KeePassKit";
/* Copyright (human-readable) */
"NSHumanReadableCopyright" = "Copyright 2013-2021 HicknHack Software GmbH. Alle Rechte vorbehalten.";
@@ -1,268 +0,0 @@
/* Action name for adding a customt icon. */
"ADD_CUSTOM_ICON" = "Icon hinzufügen";
/* Error description */
"Alignment Error" = "Speicherausrichtungsfehler";
/* Error description */
"Buffer Too Small" = "Puffer zu klein";
/* Default title for KDBX databases
Title for the root group created for KDB files */
"DATABASE" = "Datenbank";
/* Error description */
"Decode Error" = "Dekodierungsfehler";
/* Action name for deleting a custom icon */
"DELETE_CUSTOM_ICON" = "Icon entfernen";
/* EMail */
"EMAIL" = "E-Mail";
/* No comment provided by engineer. */
"ERROR_AES_DECRYPTION_FAILED" = "AES Entschlüsselung fehlgeschlagen";
/* No comment provided by engineer. */
"ERROR_AES_ENCRYPTION_FAILED" = "AES Verschlüsselung ist fehlgeschlagen";
/* No comment provided by engineer. */
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "Bezeichnung wird bereits verwendet!";
/* (No Comment) */
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "Die Autotype-Sequenz ist fehlerhaft!";
/* (No Comment) */
"ERROR_CORRUPT_TREE" = "Interne Datenstruktur defekt!";
/* No comment provided by engineer. */
"ERROR_DECRYPTION_FAILED" = "Entschlüsseln fehlgeschlagen";
/* No comment provided by engineer. */
"ERROR_ENCRYPTION_FAILED" = "Verschlüsseln fehlgeschlafen";
/* No comment provided by engineer. */
"ERROR_GROUP_ELEMENT_MISSING" = "Datenbank-XML enthält kein Group-Element";
/* (No Comment) */
"ERROR_HEADER_CORRUPTED" = "Header-Daten sind beschädigt";
/* (No Comment) */
"ERROR_HEADER_HASH_MISSMATCH" = "Fehlerhafte Datei: Header-Hash stimmt nicht mit Daten überein.";
/* No comment provided by engineer. */
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "Datenbank-Hash falsch. Datenintegrität ist möglicherweise verletzt!";
/* No comment provided by engineer. */
"ERROR_INTEGRITY_CHECK_FAILED" = "Die Integrität der Datei konnte nicht sichergestellt werden";
/* No comment provided by engineer. */
"ERROR_INVALID_FIELD_SIZE" = "Datenfeld mit falscher Größe. Password falsch?";
/* No comment provided by engineer. */
"ERROR_INVALID_FIELD_TYPE" = "Unbekanntes Datenfeld. Password falsch?";
/* No comment provided by engineer. */
"ERROR_INVALID_HEADER_FIELD_SIZE" = "Falsche Größe eines Header-Feldes";
/* No comment provided by engineer. */
"ERROR_INVALID_HEADER_FIELD_TYPE" = "Falscher Typ eines Header-Feldes";
/* No comment provided by engineer. */
"ERROR_INVALID_HEADER_IV_SIZE" = "Falsche Größe des Initalisierungs-Vektor im Header";
/* No comment provided by engineer. */
"ERROR_KDB_CORRUPT_TREE" = "Defekter KDB-Baum";
/* No comment provided by engineer. */
"ERROR_KDB_FILE_HEADER_TRUNCATED" = "KDB-Header unvollständig";
/* No comment provided by engineer. */
"ERROR_KDBX_CORRUPTED_CONTENT_STREAM" = "Die Inhaltsdaten sind fehlerhaft.";
/* No comment provided by engineer. */
"ERROR_KDBX_CORRUPTED_ENCRYPTION_STREAM" = "Die verschlüsselten Daten sind fehlerhaft.";
/* No comment provided by engineer. */
"ERROR_KDBX_CORRUPTED_INNER_HEADER" = "Der innere Header ist fehlerhaft.";
/* No comment provided by engineer. */
"ERROR_KDBX_CORRUPTED_PUBLIC_CUSTOM_DATA" = "Die unverschlüsselten öffentlichen Daten sind fehlerhaft.";
/* No comment provided by engineer. */
"ERROR_KDBX_INVALID_INNER_HEADER_FIELD" = "Der innere Header enthält ein unbekanntes Feld";
/* No comment provided by engineer. */
"ERROR_KDBX_INVALID_KEY_DERIVATION_DATA" = "Die Daten zur Schlüsselherleitung sind nicht fehlerhaft";
/* No comment provided by engineer. */
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "Datenbank-XML enthält keine KeePassFile-Elemente";
/* No comment provided by engineer. */
"ERROR_KEY_DERIVATION_FAILED" = "Schlüsselherleitung fehlgeschlagen";
/* No comment provided by engineer. */
"ERROR_META_ELEMENT_MISSING" = "Datenbank-XML enthält kein Meta-Element";
/* No comment provided by engineer. */
"ERROR_NO_DATA" = "Keine Daten";
/* No comment provided by engineer. */
"ERROR_NO_KEY_DATA" = "Die Schlüsseldatei enthält keine Daten";
/* No comment provided by engineer. */
"ERROR_NO_XML_DATA" = "Die Schlüsseldatei ist keine Xml Datei";
/* No comment provided by engineer. */
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "Falsche Password und/oder die Schlüsseldatei";
/* No comment provided by engineer. */
"ERROR_ROOT_ELEMENT_MISSING" = "Datenbank-XML enthält kein Root-Elementen";
/* Error message for unknown error code */
"ERROR_UNKNOWN_ERROR_CODE" = "Ein unbekannter Fehler ist aufgetreten";
/* No comment provided by engineer. */
"ERROR_UNKNOWN_FILE_FORMAT" = "Unbekanntes Dateiformat";
/* (No Comment) */
"ERROR_UNSUPPORTED_CHIPHER" = "Verschlüsselungsalgorithmus wird nicht unterstützt";
/* No comment provided by engineer. */
"ERROR_UNSUPPORTED_CIPHER" = "Verschlüsselungsalgorithmus wird nicht unterstützt";
/* No comment provided by engineer. */
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "Datenbankformat wird nicht unterstützt";
/* No comment provided by engineer. */
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Kompressionsalgorithmus wird nicht unterstützt";
/* No comment provided by engineer. */
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Format des Zufallsdatenstroms wird nicht unterstützt";
/* No comment provided by engineer. */
"ERROR_UNSUPPORTED_KEYDERIVATION" = "Schlüsselherleitungsalgorithmus wird nicht unterstützt";
/* No comment provided by engineer. */
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "Format des Fenstertitles ist fehlerhaft!";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_CORRUPTED" = "Schlüssel-XML-Datei ist beschädigt!";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "Daten des Schlüssels nicht lesbar";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_UNSUPPORTED_VERSION" = "Schlüssel-XML-Datei Version wird nicht unterstützt";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "Schlüssel-XML-Datei enhält kein Data-Element";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_WITHOUT_HASH_ATTRIBUTE" = "Schlüssel-XML-Datei ohne Hash-Attribut!";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "Schlüssel-XML-Datei enthält kein Key-Element";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_WITHOUT_KEYFILE_ELEMENT" = "Schlüssel-XML-Datei ohne KeyFile-Element";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_WITHOUT_META_ELEMENT" = "Schlüssel-XML-Datei enthält kein Meta-Element";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_WRONG_HASH_SIZE" = "Hash-Element in Schlüssel-XML-Datei hat die falsche Länge";
/* No comment provided by engineer. */
"ERRROR_XML_STRUCUTRE_MALFORMED" = "Datenbank-XML Struktur ist fehlerhaft";
/* Error reason */
"Failed to allocate memory" = "Konnte keinen Speicher belegen";
/* Error reason */
"Function not implemented for the current algorithm" = "Funktion ist im aktuellen Algorithmus nicht implementiert";
/* General */
"GENERAL" = "Allgemein";
/* Homebanking */
"HOMEBANKING" = "Homebanking";
/* Error reason */
"Illegal parameter supplied to encryption/decryption algorithm" = "Falscher Parameter wurde für Ver-/Entschlüsselung übergeben";
/* Error reason */
"Input data did not decode or decrypt correctly" = "Eingangsdaten konnten nicht Dekodiert oder korrekt entschlüsselt werden";
/* Error reason */
"Input size to encryption algorithm was not aligned correctly" = "Eingabegröße für Verschlüsselung ist nicht korrekt auf Algorithmus ausgerichtet";
/* Error reason */
"Insufficient buffer provided for specified operation" = "Zu kleiner Puffer für Operation zur Verfügung";
/* Internet */
"INTERNET" = "Internet";
/* Title format for a copie of an entry. Contains a %@ placeholder */
"KPK_ENTRY_COPY_%@" = "Kopie von %@";
/* Title format for a copie of a group. Contains a %@ placeholder */
"KPK_GROUP_COPY_%@" = "Kopie von %@";
/* Error description */
"Memory Failure" = "Speicherfehler";
/* Network */
"NETWORK" = "Netzwerk";
/* Error description */
"Parameter Error" = "Parameterfehler";
/* Action name for setting a custom string value protected */
"PROTECT_%@" = "%@ schützen";
/* Action name for setting the background color of an enty */
"SET_BACKGROUND_COLOR" = "Hintergrundfarbe festlegen";
/* Action name for setting value of a custom attribute. Contains %@ placeholder */
"SET_CUSTOM_ATTTRIBUTE_%@" = "Benutzerdefinierten Werte festlegen";
/* Action name for setting the foreground color of an enty */
"SET_FOREGROUND_COLOR" = "Vordergrundfarbe festlegen";
/* Action name for setting the notes of an enty */
"SET_NOTES" = "Notizen festlegen";
/* Action name for setting the password of an enty */
"SET_PASSWORD" = "Password festlegen";
/* Action name for setting the tags of an enty */
"SET_TAGS" = "Tags festlegen";
/* Action name for setting the title of an enty */
"SET_TITLE" = "Titel festlegen";
/* Action name for setting the url of an enty */
"SET_URL" = "URL festlegen";
/* Action name for setting the username of an enty */
"SET_USERNAME" = "Benutzername festlegen";
/* Error description */
"Success" = "Erfolgreich";
/* Name for the trash group */
"TRASH" = "Papierkorb";
/* Error description */
"Unimplemented Function" = "Funktion nicht implementiert";
/* Error description */
"Unknown Error" = "Unbekannter Fehler";
/* Action name for setting a custom string value non-protected */
"UNPROTECT_%@" = "%@ nicht schützen";
/* Windows */
"WINDOWS" = "Windows";
@@ -1,268 +0,0 @@
/* Action name for adding a customt icon. */
"ADD_CUSTOM_ICON" = "Add Custom Icon";
/* Error description */
"Alignment Error" = "Alignment Error";
/* Error description */
"Buffer Too Small" = "Buffer Too Small";
/* Default title for KDBX databases
Title for the root group created for KDB files */
"DATABASE" = "Database";
/* Error description */
"Decode Error" = "Decode Error";
/* Action name for deleting a custom icon */
"DELETE_CUSTOM_ICON" = "Delete Custom Icon";
/* EMail */
"EMAIL" = "EMail";
/* No comment provided by engineer. */
"ERROR_AES_DECRYPTION_FAILED" = "AES decryption failed";
/* No comment provided by engineer. */
"ERROR_AES_ENCRYPTION_FAILED" = "AES encryption failed";
/* No comment provided by engineer. */
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "The attribute key is not unique!";
/* (No Comment) */
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "The autotype sequence is not valid!";
/* (No Comment) */
"ERROR_CORRUPT_TREE" = "The internal file structure is corrupted!";
/* No comment provided by engineer. */
"ERROR_DECRYPTION_FAILED" = "Decryption failed";
/* No comment provided by engineer. */
"ERROR_ENCRYPTION_FAILED" = "Encryption failed";
/* No comment provided by engineer. */
"ERROR_GROUP_ELEMENT_MISSING" = "The XML file contains no group node";
/* (No Comment) */
"ERROR_HEADER_CORRUPTED" = "Header is corrupted";
/* (No Comment) */
"ERROR_HEADER_HASH_MISSMATCH" = "The header hash doesn't match. File corrupted";
/* No comment provided by engineer. */
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "The database header hash is wrong. Data integrity might be broken!";
/* No comment provided by engineer. */
"ERROR_INTEGRITY_CHECK_FAILED" = "The database integrity isn't ensured";
/* No comment provided by engineer. */
"ERROR_INVALID_FIELD_SIZE" = "Incorrect size at data field. Password wrong?";
/* No comment provided by engineer. */
"ERROR_INVALID_FIELD_TYPE" = "Unknown data field. Password wrong?";
/* No comment provided by engineer. */
"ERROR_INVALID_HEADER_FIELD_SIZE" = "Invalid header field size";
/* No comment provided by engineer. */
"ERROR_INVALID_HEADER_FIELD_TYPE" = "Invalid header field type";
/* No comment provided by engineer. */
"ERROR_INVALID_HEADER_IV_SIZE" = "Invalid header initalization vector size";
/* No comment provided by engineer. */
"ERROR_KDB_CORRUPT_TREE" = "Corrupted KDB tree";
/* No comment provided by engineer. */
"ERROR_KDB_FILE_HEADER_TRUNCATED" = "KDB header truncated";
/* No comment provided by engineer. */
"ERROR_KDBX_CORRUPTED_CONTENT_STREAM" = "The content stream is corrupted";
/* No comment provided by engineer. */
"ERROR_KDBX_CORRUPTED_ENCRYPTION_STREAM" = "The encrypted stream is corrupted";
/* No comment provided by engineer. */
"ERROR_KDBX_CORRUPTED_INNER_HEADER" = "The inner header data is corrupted";
/* No comment provided by engineer. */
"ERROR_KDBX_CORRUPTED_PUBLIC_CUSTOM_DATA" = "The public custom data is corrupted";
/* No comment provided by engineer. */
"ERROR_KDBX_INVALID_INNER_HEADER_FIELD" = "The inner header contains an invalid field";
/* No comment provided by engineer. */
"ERROR_KDBX_INVALID_KEY_DERIVATION_DATA" = "The key derivation data is invalid";
/* No comment provided by engineer. */
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "The XML file is missing the KeePassFile element";
/* No comment provided by engineer. */
"ERROR_KEY_DERIVATION_FAILED" = "Key derivation failed";
/* No comment provided by engineer. */
"ERROR_META_ELEMENT_MISSING" = "Meta XML element is missing";
/* No comment provided by engineer. */
"ERROR_NO_DATA" = "No data";
/* No comment provided by engineer. */
"ERROR_NO_KEY_DATA" = "The key file contains no data";
/* No comment provided by engineer. */
"ERROR_NO_XML_DATA" = "No XML file data";
/* No comment provided by engineer. */
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "The password and/or the keyfile is wrong";
/* No comment provided by engineer. */
"ERROR_ROOT_ELEMENT_MISSING" = "The XML file contains no Root node";
/* Error message for unknown error code */
"ERROR_UNKNOWN_ERROR_CODE" = "An unknown error occured";
/* No comment provided by engineer. */
"ERROR_UNKNOWN_FILE_FORMAT" = "Unknown file format";
/* (No Comment) */
"ERROR_UNSUPPORTED_CHIPHER" = "Unsupported cipher algorithm";
/* No comment provided by engineer. */
"ERROR_UNSUPPORTED_CIPHER" = "Unsupported cipher";
/* No comment provided by engineer. */
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "The Database version is not supported";
/* No comment provided by engineer. */
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Unsupported compression algorithm";
/* No comment provided by engineer. */
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Unsupported random stream type";
/* No comment provided by engineer. */
"ERROR_UNSUPPORTED_KEYDERIVATION" = "Unsupported key derivation";
/* No comment provided by engineer. */
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "The Format of the Window Title is not valid!";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_CORRUPTED" = "Unable to load corrupted key file";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "Unable to read the data of the XML keyfile";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_UNSUPPORTED_VERSION" = "Unsupported XML key file version";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "The XML keyfile is missing the data element";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_WITHOUT_HASH_ATTRIBUTE" = "Unable to load key file. Hash is missing.";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "The XML keyfile is missing the key element";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_WITHOUT_KEYFILE_ELEMENT" = "The XML keyfile is missing the key file element";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_WITHOUT_META_ELEMENT" = "The Xml keyfile is missing the meta element";
/* No comment provided by engineer. */
"ERROR_XML_KEYFILE_WRONG_HASH_SIZE" = "The Xml key file has the wrong hash size";
/* No comment provided by engineer. */
"ERRROR_XML_STRUCUTRE_MALFORMED" = "Malformed XML structure";
/* Error reason */
"Failed to allocate memory" = "Failed to allocate memory";
/* Error reason */
"Function not implemented for the current algorithm" = "Function not implemented for the current algorithm";
/* General */
"GENERAL" = "General";
/* Homebanking */
"HOMEBANKING" = "Homebanking";
/* Error reason */
"Illegal parameter supplied to encryption/decryption algorithm" = "Illegal parameter supplied to encryption/decryption algorithm";
/* Error reason */
"Input data did not decode or decrypt correctly" = "Input data did not decode or decrypt correctly";
/* Error reason */
"Input size to encryption algorithm was not aligned correctly" = "Input size to encryption algorithm was not aligned correctly";
/* Error reason */
"Insufficient buffer provided for specified operation" = "Insufficient buffer provided for specified operation";
/* Internet */
"INTERNET" = "Internet";
/* Title format for a copie of an entry. Contains a %@ placeholder */
"KPK_ENTRY_COPY_%@" = "%@ copy";
/* Title format for a copie of a group. Contains a %@ placeholder */
"KPK_GROUP_COPY_%@" = "%@ copy";
/* Error description */
"Memory Failure" = "Memory Failure";
/* Network */
"NETWORK" = "Network";
/* Error description */
"Parameter Error" = "Parameter Error";
/* Action name for setting a custom string value protected */
"PROTECT_%@" = "Protect %@";
/* Action name for setting the background color of an enty */
"SET_BACKGROUND_COLOR" = "Set Background Color";
/* Action name for setting value of a custom attribute. Contains %@ placeholder */
"SET_CUSTOM_ATTTRIBUTE_%@" = "Set Custom Attribute %@";
/* Action name for setting the foreground color of an enty */
"SET_FOREGROUND_COLOR" = "Set Foreground Color";
/* Action name for setting the notes of an enty */
"SET_NOTES" = "Set Notes";
/* Action name for setting the password of an enty */
"SET_PASSWORD" = "Set Password";
/* Action name for setting the tags of an enty */
"SET_TAGS" = "Set Tags";
/* Action name for setting the title of an enty */
"SET_TITLE" = "Set Title";
/* Action name for setting the url of an enty */
"SET_URL" = "Set URL";
/* Action name for setting the username of an enty */
"SET_USERNAME" = "Set Username";
/* Error description */
"Success" = "Success";
/* Name for the trash group */
"TRASH" = "Trash";
/* Error description */
"Unimplemented Function" = "Unimplemented Function";
/* Error description */
"Unknown Error" = "Unknown Error";
/* Action name for setting a custom string value non-protected */
"UNPROTECT_%@" = "Unprotect %@";
/* Windows */
"WINDOWS" = "Windows";
@@ -1,52 +0,0 @@
/*
KPKLocalizable.strings
MacPass
Created by Michael Starke on 20/12/13.
Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
*/
"SET_TITLE" = "Editar Título";
"SET_USERNAME" = "Editar Nombre de Usuario";
"SET_PASSWORD" = "Editar Contraseña";
"SET_URL" = "Editar URL";
"SET_NOTES" = "Editar Notas";
"DATABASE" = "Base de Datos";
"EMAIL" = "EMail";
"GENERAL" = "General";
"HOMEBANKING" = "Bancos";
"INTERNET" = "Internet";
"NETWORK" = "Red";
"TRASH" = "Papelera";
"WINDOWS" = "Windows";
/* Copy */
"KPK_GROUP_COPY_%@" = "Copia %@";
"KPK_ENTRY_COPY_%@" = "Copia %@";
/* Validation Errors */
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "El formato del título no es válido.";
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "La llave de atributo no es única.";
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "La secuenta de Autotype no es válida.";
/* Errors */
"ERROR_CORRUPT_TREE" = "La estructura interna del archivo está corrupta.";
"ERROR_INVALID_FIELD_SIZE" = "La longitud del campo no es válida. ¿Contraseña incorrecta?";
"ERROR_INVALID_FIELD_TYPE" = "Valor desconocido. ¿Contraseña incorrecta?";
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "La versión de la base de datos no es soportada.";
"ERROR_UNSUPPORTED_CHIPHER" = "Algoritmo de encriptación no soportado";
"ERROR_UNKNOWN_FILE_FORMAT" = "Formato de archivo desconocido";
"ERROR_HEADER_CORRUPTED" = "Cabecera corrupta";
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Algoritmo de compresión no soportado";
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Tipo de random stream no soportado";
"ERROR_INTEGRITY_CHECK_FAILED" = "No se puede verificar la integridad de la base de datos";
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "La contraseña o el KeePassFile son incorrectos";
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "El archivo XML no contiene el elemento KeePassFile";
"ERROR_ROOT_ELEMENT_MISSING" = "El archivo XML no contiene el nodo Root";
"ERROR_GROUP_ELEMENT_MISSING" = "El archivo XML no contiene el nodo Group";
"ERROR_HEADER_HASH_MISSMATCH" = "El hash del header no coincide. Archivo corrupto";
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "El archivo XML no contiene el elemento key";
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "El archivo XML no contiene el elemento data";
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "No es posible leer la información del archivo XML.";
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "El hash de la cabecera de la base de datos es incorrecto. La integridad puede estar en riesgo.";
@@ -1,52 +0,0 @@
/*
KPKLocalizable.strings
MacPass
Created by Michael Starke on 20/12/13.
Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
*/
"SET_TITLE" = "Modifier le titre";
"SET_USERNAME" = "Modifier utilisateur";
"SET_PASSWORD" = "Modifier mot de passe";
"SET_NOTES" = "Modifier notes";
"SET_URL" = "Modifier URL";
"DATABASE" = "Base de données";
"EMAIL" = "Courrier électronique";
"GENERAL" = "Général";
"HOMEBANKING" = "Banque";
"INTERNET" = "Internet";
"NETWORK" = "Réseau";
"TRASH" = "Corbeille";
"WINDOWS" = "Windows";
/* Copy */
"KPK_GROUP_COPY_%@" = "%@ copy";
"KPK_ENTRY_COPY_%@" = "%@ copy";
/* Validation Errors */
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "Le format du titre de la fenêtre n'est pas valide !";
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "La clé d'attribut n'est pas unique";
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "La séquence de saisie automatique n'est pas valide !";
/* Errors */
"ERROR_CORRUPT_TREE" = "La structure interne du fichier est corrompue !";
"ERROR_INVALID_FIELD_SIZE" = "Taille incorrecte dans le champ. Mauvais mot de passe ?";
"ERROR_INVALID_FIELD_TYPE" = "Champ inconnu. Mauvais mot de passe ?";
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "Version de la base de données non prise en charge";
"ERROR_UNSUPPORTED_CHIPHER" = "Algorithme de chiffrement non pris en charge";
"ERROR_UNKNOWN_FILE_FORMAT" = "Format de fichier inconnu";
"ERROR_HEADER_CORRUPTED" = "En-tête de fichier corrompue";
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Algorithme de compression non pris en charge";
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Type de flux aléatoire non pris en charge";
"ERROR_INTEGRITY_CHECK_FAILED" = "L'intégrité de la base de données n'est pas assurée";
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "Mauvais mot de passe et/ou fichier clé";
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "Le fichier XML ne contient pas d'élément KeePassFile";
"ERROR_ROOT_ELEMENT_MISSING" = "Le fichier XML ne contient pas de nœud 'root'";
"ERROR_GROUP_ELEMENT_MISSING" = "Le fichier XML ne contient pas de nœud 'Groupe'";
"ERROR_HEADER_HASH_MISSMATCH" = "Le hash de l'en-tête ne correspond pas. Fichier corrompu";
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "Le fichier XML ne contient pas d'élément clé";
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "Le fichier clé XML ne contient pas d'élément de données";
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "Impossible de lire les données du fichier clé XML";
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "Le hash de l'en-tête n'est pas bon. Les données peuvent être corrompues !";
@@ -1,52 +0,0 @@
/*
KPKLocalizable.strings
MacPass
Created by Michael Starke on 20/12/13.
Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
*/
"SET_TITLE" = "Modifica Titolo";
"SET_USERNAME" = "Modifica Nome Utente";
"SET_PASSWORD" = "Modifica Password";
"SET_URL" = "Modifica URL";
"SET_NOTES" = "Modifica Note";
"DATABASE" = "Database";
"EMAIL" = "EMail";
"GENERAL" = "Generale";
"HOMEBANKING" = "Homebanking";
"INTERNET" = "Internet";
"NETWORK" = "Rete";
"TRASH" = "Cestino";
"WINDOWS" = "Windows";
/* Copy */
"KPK_GROUP_COPY_%@" = "%@ Copia";
"KPK_ENTRY_COPY_%@" = "%@ Copia";
/* Validation Errors */
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "Il Formato del Titolo della Finestra non é Valido!";
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "The Attribute Key is not unique!";
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "Sequenza di AutoType non Valida!";
/* Errors */
"ERROR_CORRUPT_TREE" = "La struttura interna del file é corrotta!";
"ERROR_INVALID_FIELD_SIZE" = "Taglia dati incorretta. Password errata?";
"ERROR_INVALID_FIELD_TYPE" = "Campo dati sconosciuto. Password errata?";
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "Versione del database non supportata";
"ERROR_UNSUPPORTED_CHIPHER" = "Algoritmo di cifratura non supportato";
"ERROR_UNKNOWN_FILE_FORMAT" = "Formato del file sconosciuto";
"ERROR_HEADER_CORRUPTED" = "Intestazione corrotta";
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Algoritmo di compressione non supportato";
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Flusso aleatorio non supportato";
"ERROR_INTEGRITY_CHECK_FAILED" = "L'integrità del database non é assicurata";
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "La password e/o la chiave sono errati";
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "Elemento KeePassFile mancante dal file XML";
"ERROR_ROOT_ELEMENT_MISSING" = "Il file XML non contiene un nodo root";
"ERROR_GROUP_ELEMENT_MISSING" = "Il file XML non contiene un nodo Gruppo";
"ERROR_HEADER_HASH_MISSMATCH" = "La hash dell'intestazione non corrisponde. File corrotto";
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "Il file chiave XML non contiene l'elemento chiave";
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "Il file chiave XML non contiene l'elemento dati";
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "Impossibile leggere i dati dal file chiave XML";
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "La hash dell'intestazione del database é errata, l'integrità dei dati potrebbe essere compromessa!";
@@ -1,52 +0,0 @@
/*
KPKLocalizable.strings
MacPass
Created by Michael Starke on 20/12/13.
Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
*/
"SET_TITLE" = "Wijzig Titel";
"SET_USERNAME" = "Wijzig Gebruikersnaam";
"SET_PASSWORD" = "Wijzig Wachtwoord";
"SET_URL" = "Wijzig URL";
"SET_NOTES" = "Wijzig Notities";
"DATABASE" = "Database";
"EMAIL" = "E-Mail";
"INTERNET" = "Internet";
"GENERAL" = "Algemeen";
"HOMEBANKING" = "Thuisbankieren";
"NETWORK" = "Netwerk";
"TRASH" = "Prullenmand";
"WINDOWS" = "Windows";
/* Copy */
"KPK_GROUP_COPY_%@" = "%@ Kopieer";
"KPK_ENTRY_COPY_%@" = "%@ Kopieer";
/* Validation Errors */
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "Het Formaat van de Venster Titel is ongeldig!";
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "De Attribuutkey is niet uniek!";
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "De Autotype Sequentie is niet geldig!";
/* Errors */
"ERROR_CORRUPT_TREE" = "De interne bestandsstructuur is corrupt!";
"ERROR_INVALID_FIELD_SIZE" = "Verkeerde grootte op dataveld. Verkeerd wachtwoord?";
"ERROR_INVALID_FIELD_TYPE" = "Onbekend databeld. Verkeerd wachtwoord?";
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "De databaseversie wordt niet ondersteund";
"ERROR_UNSUPPORTED_CHIPHER" = "Niet ondersteund chipher algoritmd";
"ERROR_UNKNOWN_FILE_FORMAT" = "Onbekend bestandsformaat";
"ERROR_HEADER_CORRUPTED" = "Header is corrupt";
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Niet ondersteund compressie-algoritme";
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Niet ondersteund random stream type";
"ERROR_INTEGRITY_CHECK_FAILED" = "De intergriteit van de database is niet verzekerd";
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "Het wachtwoord en/of de keyfile is niet correct";
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "Het XML-bestand mist het KeePassFile-element";
"ERROR_ROOT_ELEMENT_MISSING" = "Het XML-bestand bevat geen Root node";
"ERROR_GROUP_ELEMENT_MISSING" = "Het XML-bestand bevat geen Groep node";
"ERROR_HEADER_HASH_MISSMATCH" = "De header hash komt niet overeen. Bestand corrupt";
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "De XML-keyfile mist het key element";
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "De XML-keyfile mist the data element";
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "Kan geen data van de XML-keyfile lezen";
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "The database header hash is wrong. Data integritiy might be broken!";
@@ -1,110 +0,0 @@
/* Default name database */
"DATABASE" = "Baza danych";
/* (No Comment) */
"EMAIL" = "E-mail";
/* (No Comment) */
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "Atrybut klucza nie jest unikatowy!";
/* (No Comment) */
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "Sekwencja autouzupełnienia jest nieprawidłowa!";
/* (No Comment) */
"ERROR_CORRUPT_TREE" = "Struktura pliku jest uszkodzona!";
/* (No Comment) */
"ERROR_GROUP_ELEMENT_MISSING" = "Plik XML file contains no Group node";
/* (No Comment) */
"ERROR_HEADER_CORRUPTED" = "Nagłówek jest uszkodzony";
/* (No Comment) */
"ERROR_HEADER_HASH_MISSMATCH" = "Suma kontrolna nagłówka jest nieprawidłowa. Plik jest uszkodzony";
/* (No Comment) */
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "Nagłówek bazy danych jest nieprawidłowy. Spójność danych może nie być zachowana!";
/* (No Comment) */
"ERROR_INTEGRITY_CHECK_FAILED" = "Integralność bazy danych jest wątpliwa";
/* (No Comment) */
"ERROR_INVALID_FIELD_SIZE" = "Niewłaściwy rozmiar pola danych. Nieprawidłowe hasło?";
/* (No Comment) */
"ERROR_INVALID_FIELD_TYPE" = "Nieznane pole danych. Nieprawidłowe hasło?";
/* (No Comment) */
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "Plik XML nie zawiera elementu KeePass";
/* (No Comment) */
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "Hasło i/lub plik klucza jest nieprawidłowe";
/* (No Comment) */
"ERROR_ROOT_ELEMENT_MISSING" = "Plik XML nie zawiera głównego węzła";
/* (No Comment) */
"ERROR_UNKNOWN_FILE_FORMAT" = "Nieznany format pliku";
/* (No Comment) */
"ERROR_UNSUPPORTED_CHIPHER" = "Nieznany algorytm szyfrowania";
/* (No Comment) */
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "Ta wersja bazy danych nie jest wspierana";
/* (No Comment) */
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Nieobsługiwany algorytm kompresji";
/* (No Comment) */
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Niewspierany typ generatora pseudolosowego";
/* (No Comment) */
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "Format nazwy okna jest nieprawidłowy!";
/* (No Comment) */
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "Nie można odczytać danych XML z pliku klucza";
/* (No Comment) */
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "XML pliku z kliczem nie zawiera danych";
/* (No Comment) */
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "XML pliku z kluczem nie zawiera elementu klucza";
/* (No Comment) */
"GENERAL" = "Ogólne";
/* (No Comment) */
"HOMEBANKING" = "Homebanking";
/* (No Comment) */
"INTERNET" = "Internet";
/* (No Comment) */
"KPK_ENTRY_COPY_%@" = "%@ kopiuj";
/* (No Comment) */
"KPK_GROUP_COPY_%@" = "%@ kopiuj";
/* (No Comment) */
"NETWORK" = "Sieć";
/* (No Comment) */
"SET_NOTES" = "Edit Notes";
/* (No Comment) */
"SET_PASSWORD" = "Edit Password";
/* (No Comment) */
"SET_TITLE" = "Edit Title";
/* (No Comment) */
"SET_URL" = "Edit URL";
/* (No Comment) */
"SET_USERNAME" = "Edit Username";
/* (No Comment) */
"TRASH" = "Kosz";
/* (No Comment) */
"WINDOWS" = "Windows";
@@ -1,52 +0,0 @@
/*
KPKLocalizable.strings
MacPass
Created by Michael Starke on 20/12/13.
Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
*/
"SET_TITLE" = "Изменить Заголовок";
"SET_USERNAME" = "Изменить Имя пользователя";
"SET_PASSWORD" = "Изменить Пароль";
"SET_URL" = "Изменить URL";
"SET_NOTES" = "Изменить Заметки";
"DATABASE" = "База данных";
"EMAIL" = "EMail";
"GENERAL" = "Общие";
"HOMEBANKING" = "Домашний банк";
"INTERNET" = "Интернет";
"NETWORK" = "Сеть";
"TRASH" = "Удалить";
"WINDOWS" = "Windows";
/* Copy */
"KPK_GROUP_COPY_%@" = "%@ копия";
"KPK_ENTRY_COPY_%@" = "%@ копия";
/* Validation Errors */
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "Формат окна заголовка не верный!";
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "Ключ аттрибута не уникален!";
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "Эта последовательность автоввода неверна!";
/* Errors */
"ERROR_CORRUPT_TREE" = "Повреждена внутренняя структура файла!";
"ERROR_INVALID_FIELD_SIZE" = "Неверный размер поля данных. Пароль неверный?";
"ERROR_INVALID_FIELD_TYPE" = "Неизвестное поле данных. Пароль неверный?";
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "Версия базы данных не поддерживается";
"ERROR_UNSUPPORTED_CHIPHER" = "Не поддерживается алгоритм шифрования";
"ERROR_UNKNOWN_FILE_FORMAT" = "Неизвестный формат файла";
"ERROR_HEADER_CORRUPTED" = "Заголовк поврежден";
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Не поддерживается алгоритм сжатия";
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Не поддерживается случайный тип потока";
"ERROR_INTEGRITY_CHECK_FAILED" = "Целостность базы данных не гарантируется";
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "Пароль и/или файл ключа неверный";
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "XML файл не содержит KeePassFile элемент";
"ERROR_ROOT_ELEMENT_MISSING" = "XML файл не содержит корневой узел";
"ERROR_GROUP_ELEMENT_MISSING" = "XML файл не содержит узел Group";
"ERROR_HEADER_HASH_MISSMATCH" = "Неверный хэш заголовка. Файл поврежеден.";
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = " XML файл ключа не содержит элемента ключа";
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "XML файл ключа не содержит элемента данных";
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "Не могу прочитать данные в XML файле ключа";
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "Хэш заголовка базы данных неверный. Целостность данных может быть нарушена!";
@@ -1,52 +0,0 @@
/*
KPKLocalizable.strings
MacPass
Created by Michael Starke on 20/12/13.
Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
*/
"SET_TITLE" = "编辑标题";
"SET_USERNAME" = "编辑用户名";
"SET_PASSWORD" = "编辑密码";
"SET_URL" = "编辑 URL";
"SET_NOTES" = "编辑注释";
"DATABASE" = "数据库";
"GENERAL" = "通用";
"EMAIL" = "电子邮件";
"HOMEBANKING" = "家庭银行";
"INTERNET" = "互联网";
"NETWORK" = "网络";
"TRASH" = "废纸篓";
"WINDOWS" = "Windows";
/* Copy */
"KPK_GROUP_COPY_%@" = "%@ 拷贝";
"KPK_ENTRY_COPY_%@" = "%@ 拷贝";
/* Validation Errors */
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "窗口标题格式不正确!";
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "属性键 (Attribute Key) 不唯一!";
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "自动键入序列不正确!";
/* Errors */
"ERROR_CORRUPT_TREE" = "内部文件结构已损坏!";
"ERROR_INVALID_FIELD_SIZE" = "数据字段大小错误,可能是由于密码错误。";
"ERROR_INVALID_FIELD_TYPE" = "未知数据字段,可能是由于密码错误。";
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "不支持的数据库版本";
"ERROR_UNSUPPORTED_CHIPHER" = "不支持的密码算法";
"ERROR_UNKNOWN_FILE_FORMAT" = "未知文件格式";
"ERROR_HEADER_CORRUPTED" = "文件头已损坏";
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "不支持的压缩算法";
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "不支持的随机流 (random stream) 种类";
"ERROR_INTEGRITY_CHECK_FAILED" = "数据库完整性已被破坏";
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "密码与/或密钥文件错误";
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "XML 文件缺少 KeePassFile 元素";
"ERROR_ROOT_ELEMENT_MISSING" = "XML 文件未包含根节点";
"ERROR_GROUP_ELEMENT_MISSING" = "XML 文件未包含组节点";
"ERROR_HEADER_HASH_MISSMATCH" = "文件头哈希不匹配,文件已损坏";
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "XML 密钥文件缺少键 (key) 元素";
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "XML 密钥文件缺少数据 (data) 元素";
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "无法读取 XML 密钥文件的数据";
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "数据库文件头哈希错误,数据可能已经被破坏!";
@@ -1 +0,0 @@
/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/ModuleCache/19PO9S6FE9ZXX/modules.idx.lock-e1ceaeda
@@ -1,3 +0,0 @@
module MyPassCore {
header "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore.build/include/MyPassCore-Swift.h"
}
@@ -1,12 +0,0 @@
{
"": {
"swift-dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore.build/primary.swiftdeps"
},
"/Users/kriss/Dev/local/MyPass/MyPassCore/Sources/MyPassCore/Models/ProtectedString.swift": {
"dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore.build/ProtectedString.d",
"object": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore.build/ProtectedString.swift.o",
"swiftmodule": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore.build/ProtectedString~partial.swiftmodule",
"swift-dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore.build/ProtectedString.swiftdeps",
"diagnostics": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore.build/ProtectedString.dia"
}
}
@@ -1 +0,0 @@
/Users/kriss/Dev/local/MyPass/MyPassCore/Sources/MyPassCore/Models/ProtectedString.swift
@@ -1,3 +0,0 @@
module MyPassCorePackageTests {
header "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.build/include/MyPassCorePackageTests-Swift.h"
}
@@ -1,12 +0,0 @@
{
"": {
"swift-dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.build/primary.swiftdeps"
},
"/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.derived/runner.swift": {
"dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.build/runner.d",
"object": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.build/runner.swift.o",
"swiftmodule": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.build/runner~partial.swiftmodule",
"swift-dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.build/runner.swiftdeps",
"diagnostics": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.build/runner.dia"
}
}
@@ -1 +0,0 @@
/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.derived/runner.swift
@@ -1,547 +0,0 @@
#if canImport(Testing)
import Testing
#endif
#if false
import Foundation
import XCTest
public final class SwiftPMXCTestObserver: NSObject {
public override init() {
super.init()
XCTestObservationCenter.shared.addTestObserver(self)
}
}
extension SwiftPMXCTestObserver: XCTestObservation {
var testOutputPath: String {
return "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/testOutput.txt"
}
private func write(record: any Encodable) {
let lock = FileLock(at: URL(fileURLWithPath: self.testOutputPath + ".lock"))
_ = try? lock.withLock {
self._write(record: record)
}
}
private func _write(record: any Encodable) {
if let data = try? JSONEncoder().encode(record) {
if let fileHandle = FileHandle(forWritingAtPath: self.testOutputPath) {
defer { fileHandle.closeFile() }
fileHandle.seekToEndOfFile()
fileHandle.write("\n".data(using: .utf8)!)
fileHandle.write(data)
} else {
_ = try? data.write(to: URL(fileURLWithPath: self.testOutputPath))
}
}
}
public func testBundleWillStart(_ testBundle: Bundle) {
let record = TestBundleEventRecord(bundle: .init(testBundle), event: .start)
write(record: TestEventRecord(bundleEvent: record))
}
public func testSuiteWillStart(_ testSuite: XCTestSuite) {
let record = TestSuiteEventRecord(suite: .init(testSuite), event: .start)
write(record: TestEventRecord(suiteEvent: record))
}
public func testCaseWillStart(_ testCase: XCTestCase) {
let record = TestCaseEventRecord(testCase: .init(testCase), event: .start)
write(record: TestEventRecord(caseEvent: record))
}
#if canImport(Darwin)
public func testCase(_ testCase: XCTestCase, didRecord issue: XCTIssue) {
let record = TestCaseFailureRecord(testCase: .init(testCase), issue: .init(issue), failureKind: .unexpected)
write(record: TestEventRecord(caseFailure: record))
}
public func testCase(_ testCase: XCTestCase, didRecord expectedFailure: XCTExpectedFailure) {
let record = TestCaseFailureRecord(testCase: .init(testCase), issue: .init(expectedFailure.issue), failureKind: .expected(failureReason: expectedFailure.failureReason))
write(record: TestEventRecord(caseFailure: record))
}
#else
public func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {
let issue = TestIssue(description: description, inFile: filePath, atLine: lineNumber)
let record = TestCaseFailureRecord(testCase: .init(testCase), issue: issue, failureKind: .unexpected)
write(record: TestEventRecord(caseFailure: record))
}
#endif
public func testCaseDidFinish(_ testCase: XCTestCase) {
let record = TestCaseEventRecord(testCase: .init(testCase), event: .finish)
write(record: TestEventRecord(caseEvent: record))
}
#if canImport(Darwin)
public func testSuite(_ testSuite: XCTestSuite, didRecord issue: XCTIssue) {
let record = TestSuiteFailureRecord(suite: .init(testSuite), issue: .init(issue), failureKind: .unexpected)
write(record: TestEventRecord(suiteFailure: record))
}
public func testSuite(_ testSuite: XCTestSuite, didRecord expectedFailure: XCTExpectedFailure) {
let record = TestSuiteFailureRecord(suite: .init(testSuite), issue: .init(expectedFailure.issue), failureKind: .expected(failureReason: expectedFailure.failureReason))
write(record: TestEventRecord(suiteFailure: record))
}
#else
public func testSuite(_ testSuite: XCTestSuite, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {
let issue = TestIssue(description: description, inFile: filePath, atLine: lineNumber)
let record = TestSuiteFailureRecord(suite: .init(testSuite), issue: issue, failureKind: .unexpected)
write(record: TestEventRecord(suiteFailure: record))
}
#endif
public func testSuiteDidFinish(_ testSuite: XCTestSuite) {
let record = TestSuiteEventRecord(suite: .init(testSuite), event: .finish)
write(record: TestEventRecord(suiteEvent: record))
}
public func testBundleDidFinish(_ testBundle: Bundle) {
let record = TestBundleEventRecord(bundle: .init(testBundle), event: .finish)
write(record: TestEventRecord(bundleEvent: record))
}
}
// FIXME: Copied from `Lock.swift` in TSCBasic, would be nice if we had a better way
#if canImport(Glibc)
@_exported import Glibc
#elseif canImport(Musl)
@_exported import Musl
#elseif os(Windows)
@_exported import CRT
@_exported import WinSDK
#elseif os(WASI)
@_exported import WASILibc
#elseif canImport(Android)
@_exported import Android
#else
@_exported import Darwin.C
#endif
import Foundation
public final class FileLock {
#if os(Windows)
private var handle: HANDLE?
#else
private var fileDescriptor: CInt?
#endif
private let lockFile: URL
public init(at lockFile: URL) {
self.lockFile = lockFile
}
public func lock() throws {
#if os(Windows)
if handle == nil {
let h: HANDLE = lockFile.path.withCString(encodedAs: UTF16.self, {
CreateFileW(
$0,
UInt32(GENERIC_READ) | UInt32(GENERIC_WRITE),
UInt32(FILE_SHARE_READ) | UInt32(FILE_SHARE_WRITE),
nil,
DWORD(OPEN_ALWAYS),
DWORD(FILE_ATTRIBUTE_NORMAL),
nil
)
})
if h == INVALID_HANDLE_VALUE {
throw FileSystemError(errno: Int32(GetLastError()), lockFile)
}
self.handle = h
}
var overlapped = OVERLAPPED()
overlapped.Offset = 0
overlapped.OffsetHigh = 0
overlapped.hEvent = nil
if !LockFileEx(handle, DWORD(LOCKFILE_EXCLUSIVE_LOCK), 0,
UInt32.max, UInt32.max, &overlapped) {
throw ProcessLockError.unableToAquireLock(errno: Int32(GetLastError()))
}
#elseif os(WASI)
// WASI doesn't support flock
#else
if fileDescriptor == nil {
let fd = open(lockFile.path, O_WRONLY | O_CREAT | O_CLOEXEC, 0o666)
if fd == -1 {
fatalError("errno: \(errno), lockFile: \(lockFile)")
}
self.fileDescriptor = fd
}
while true {
if flock(fileDescriptor!, LOCK_EX) == 0 {
break
}
if errno == EINTR { continue }
fatalError("unable to acquire lock, errno: \(errno)")
}
#endif
}
public func unlock() {
#if os(Windows)
var overlapped = OVERLAPPED()
overlapped.Offset = 0
overlapped.OffsetHigh = 0
overlapped.hEvent = nil
UnlockFileEx(handle, 0, UInt32.max, UInt32.max, &overlapped)
#elseif os(WASI)
// WASI doesn't support flock
#else
guard let fd = fileDescriptor else { return }
flock(fd, LOCK_UN)
#endif
}
deinit {
#if os(Windows)
guard let handle = handle else { return }
CloseHandle(handle)
#elseif os(WASI)
// WASI doesn't support flock
#else
guard let fd = fileDescriptor else { return }
close(fd)
#endif
}
public func withLock<T>(_ body: () throws -> T) throws -> T {
try lock()
defer { unlock() }
return try body()
}
public func withLock<T>(_ body: () async throws -> T) async throws -> T {
try lock()
defer { unlock() }
return try await body()
}
}
// FIXME: Copied from `XCTEvents.swift`, would be nice if we had a better way
struct TestEventRecord: Codable {
let caseFailure: TestCaseFailureRecord?
let suiteFailure: TestSuiteFailureRecord?
let bundleEvent: TestBundleEventRecord?
let suiteEvent: TestSuiteEventRecord?
let caseEvent: TestCaseEventRecord?
init(
caseFailure: TestCaseFailureRecord? = nil,
suiteFailure: TestSuiteFailureRecord? = nil,
bundleEvent: TestBundleEventRecord? = nil,
suiteEvent: TestSuiteEventRecord? = nil,
caseEvent: TestCaseEventRecord? = nil
) {
self.caseFailure = caseFailure
self.suiteFailure = suiteFailure
self.bundleEvent = bundleEvent
self.suiteEvent = suiteEvent
self.caseEvent = caseEvent
}
}
// MARK: - Records
struct TestAttachment: Codable {
let name: String?
// TODO: Handle `userInfo: [AnyHashable : Any]?`
let uniformTypeIdentifier: String
let payload: Data?
}
struct TestBundleEventRecord: Codable {
let bundle: TestBundle
let event: TestEvent
}
struct TestCaseEventRecord: Codable {
let testCase: TestCase
let event: TestEvent
}
struct TestCaseFailureRecord: Codable, CustomStringConvertible {
let testCase: TestCase
let issue: TestIssue
let failureKind: TestFailureKind
var description: String {
return "\(issue.sourceCodeContext.description)\(testCase) \(issue.compactDescription)"
}
}
struct TestSuiteEventRecord: Codable {
let suite: TestSuiteRecord
let event: TestEvent
}
struct TestSuiteFailureRecord: Codable {
let suite: TestSuiteRecord
let issue: TestIssue
let failureKind: TestFailureKind
}
// MARK: Primitives
struct TestBundle: Codable {
let bundleIdentifier: String?
let bundlePath: String
}
struct TestCase: Codable {
let name: String
}
struct TestErrorInfo: Codable {
let description: String
let type: String
}
enum TestEvent: Codable {
case start
case finish
}
enum TestFailureKind: Codable, Equatable {
case unexpected
case expected(failureReason: String?)
var isExpected: Bool {
switch self {
case .expected: return true
case .unexpected: return false
}
}
}
struct TestIssue: Codable {
let type: TestIssueType
let compactDescription: String
let detailedDescription: String?
let associatedError: TestErrorInfo?
let sourceCodeContext: TestSourceCodeContext
let attachments: [TestAttachment]
}
enum TestIssueType: Codable {
case assertionFailure
case performanceRegression
case system
case thrownError
case uncaughtException
case unmatchedExpectedFailure
case unknown
}
struct TestLocation: Codable, CustomStringConvertible {
let file: String
let line: Int
var description: String {
return "\(file):\(line) "
}
}
struct TestSourceCodeContext: Codable, CustomStringConvertible {
let callStack: [TestSourceCodeFrame]
let location: TestLocation?
var description: String {
return location?.description ?? ""
}
}
struct TestSourceCodeFrame: Codable {
let address: UInt64
let symbolInfo: TestSourceCodeSymbolInfo?
let symbolicationError: TestErrorInfo?
}
struct TestSourceCodeSymbolInfo: Codable {
let imageName: String
let symbolName: String
let location: TestLocation?
}
struct TestSuiteRecord: Codable {
let name: String
}
// MARK: XCTest compatibility
extension TestIssue {
init(description: String, inFile filePath: String?, atLine lineNumber: Int) {
let location: TestLocation?
if let filePath = filePath {
location = .init(file: filePath, line: lineNumber)
} else {
location = nil
}
self.init(type: .assertionFailure, compactDescription: description, detailedDescription: description, associatedError: nil, sourceCodeContext: .init(callStack: [], location: location), attachments: [])
}
}
import XCTest
#if canImport(Darwin) // XCTAttachment is unavailable in swift-corelibs-xctest.
extension TestAttachment {
init(_ attachment: XCTAttachment) {
self.init(
name: attachment.name,
uniformTypeIdentifier: attachment.uniformTypeIdentifier,
payload: attachment.value(forKey: "payload") as? Data
)
}
}
#endif
extension TestBundle {
init(_ testBundle: Bundle) {
self.init(
bundleIdentifier: testBundle.bundleIdentifier,
bundlePath: testBundle.bundlePath
)
}
}
extension TestCase {
init(_ testCase: XCTestCase) {
self.init(name: testCase.name)
}
}
extension TestErrorInfo {
init(_ error: any Swift.Error) {
self.init(description: "\(error)", type: "\(Swift.type(of: error))")
}
}
#if canImport(Darwin) // XCTIssue is unavailable in swift-corelibs-xctest.
extension TestIssue {
init(_ issue: XCTIssue) {
self.init(
type: .init(issue.type),
compactDescription: issue.compactDescription,
detailedDescription: issue.detailedDescription,
associatedError: issue.associatedError.map { .init($0) },
sourceCodeContext: .init(issue.sourceCodeContext),
attachments: issue.attachments.map { .init($0) }
)
}
}
extension TestIssueType {
init(_ type: XCTIssue.IssueType) {
switch type {
case .assertionFailure: self = .assertionFailure
case .thrownError: self = .thrownError
case .uncaughtException: self = .uncaughtException
case .performanceRegression: self = .performanceRegression
case .system: self = .system
case .unmatchedExpectedFailure: self = .unmatchedExpectedFailure
@unknown default: self = .unknown
}
}
}
#endif
#if canImport(Darwin) // XCTSourceCodeLocation/XCTSourceCodeContext/XCTSourceCodeFrame/XCTSourceCodeSymbolInfo is unavailable in swift-corelibs-xctest.
extension TestLocation {
init(_ location: XCTSourceCodeLocation) {
self.init(
file: location.fileURL.absoluteString,
line: location.lineNumber
)
}
}
extension TestSourceCodeContext {
init(_ context: XCTSourceCodeContext) {
self.init(
callStack: context.callStack.map { .init($0) },
location: context.location.map { .init($0) }
)
}
}
extension TestSourceCodeFrame {
init(_ frame: XCTSourceCodeFrame) {
self.init(
address: frame.address,
symbolInfo: (try? frame.symbolInfo()).map { .init($0) },
symbolicationError: frame.symbolicationError.map { .init($0) }
)
}
}
extension TestSourceCodeSymbolInfo {
init(_ symbolInfo: XCTSourceCodeSymbolInfo) {
self.init(
imageName: symbolInfo.imageName,
symbolName: symbolInfo.symbolName,
location: symbolInfo.location.map { .init($0) }
)
}
}
#endif
extension TestSuiteRecord {
init(_ testSuite: XCTestSuite) {
self.init(name: testSuite.name)
}
}
import XCTest
#endif
@main
@available(macOS 10.15, iOS 11, watchOS 4, tvOS 11, *)
@available(*, deprecated, message: "Not actually deprecated. Marked as deprecated to allow inclusion of deprecated tests (which test deprecated functionality) without warnings")
struct Runner {
private static func testingLibrary() -> String {
var iterator = CommandLine.arguments.makeIterator()
while let argument = iterator.next() {
if argument == "--testing-library", let libraryName = iterator.next() {
return libraryName.lowercased()
}
}
// Fallback if not specified: run XCTest (legacy behavior)
return "xctest"
}
#if false
@_silgen_name("$ss13_runAsyncMainyyyyYaKcF")
private static func _runAsyncMain(_ asyncFun: @Sendable @escaping () async throws -> ())
#endif
static func main() async {
let testingLibrary = Self.testingLibrary()
#if canImport(Testing)
if testingLibrary == "swift-testing" {
#if false
_runAsyncMain {
await Testing.__swiftPMEntryPoint() as Never
}
#else
await Testing.__swiftPMEntryPoint() as Never
#endif
}
#endif
#if false
if testingLibrary == "xctest" {
XCTMain(__allDiscoveredTests()) as Never
}
#endif
}
}
@@ -1,17 +0,0 @@
import Foundation
extension Foundation.Bundle {
static let module: Bundle = {
let mainPath = Bundle.main.bundleURL.appendingPathComponent("MyPassCore_MyPassCoreTests.bundle").path
let buildPath = "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore_MyPassCoreTests.bundle"
let preferredBundle = Bundle(path: mainPath)
guard let bundle = preferredBundle ?? Bundle(path: buildPath) else {
// Users can write a function called fatalError themselves, we should be resilient against that.
Swift.fatalError("could not load resource bundle: from \(mainPath) or \(buildPath)")
}
return bundle
}()
}
@@ -1,19 +0,0 @@
{
"": {
"swift-dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/primary.swiftdeps"
},
"/Users/kriss/Dev/local/MyPass/MyPassCore/Tests/MyPassCoreTests/ProtectedStringTests.swift": {
"dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/ProtectedStringTests.d",
"object": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/ProtectedStringTests.swift.o",
"swiftmodule": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/ProtectedStringTests~partial.swiftmodule",
"swift-dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/ProtectedStringTests.swiftdeps",
"diagnostics": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/ProtectedStringTests.dia"
},
"/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/DerivedSources/resource_bundle_accessor.swift": {
"dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/resource_bundle_accessor.d",
"object": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/resource_bundle_accessor.swift.o",
"swiftmodule": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/resource_bundle_accessor~partial.swiftmodule",
"swift-dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/resource_bundle_accessor.swiftdeps",
"diagnostics": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/resource_bundle_accessor.dia"
}
}
@@ -1,2 +0,0 @@
/Users/kriss/Dev/local/MyPass/MyPassCore/Tests/MyPassCoreTests/ProtectedStringTests.swift
/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/DerivedSources/resource_bundle_accessor.swift
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More