Nudge-Screen

This commit is contained in:
2026-04-20 09:41:18 +02:00
parent a48e857ada
commit 187c3e4fc6
26 changed files with 2542 additions and 229 deletions
+166 -4
View File
@@ -7,13 +7,42 @@
objects = {
/* Begin PBXBuildFile section */
049D789A53BC64AFB1C810A5 /* APIErrorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944952BFC6DCCE66317FF8D7 /* APIErrorTests.swift */; };
23B7C03076B6043F7EA4BBA8 /* PageEditorViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06ACD7F7DBD5175662183FB5 /* PageEditorViewModelTests.swift */; };
26FD17082F8A9643006E87F3 /* Donations.storekit in Resources */ = {isa = PBXBuildFile; fileRef = 26FD17072F8A9643006E87F3 /* Donations.storekit */; };
2AB9247CBE750A713DA8151B /* OnboardingViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01B196AE0433DB616DBF32EF /* OnboardingViewModelTests.swift */; };
57538A9C5792A8F0B00134DE /* AccentThemeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F2E04000A7F4412894F47CF /* AccentThemeTests.swift */; };
6B19ECCECBCC5040054B4916 /* SearchViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4054EC160F48247753D5E360 /* SearchViewModelTests.swift */; };
84A3204FA6CF24CC3D1126AE /* DTOTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57AC406884F8446C6F4FA215 /* DTOTests.swift */; };
C7308555E59969ECCBEAEEFC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0841C05048CA5AE635439A8 /* Foundation.framework */; };
DBD5B145DFCF7E2B9FFE0C20 /* DonationServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E478C272640163A74D17B3DE /* DonationServiceTests.swift */; };
EBEA92CF7BFC556D0B10E657 /* StringHTMLTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2480561934949230710825EA /* StringHTMLTests.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
992CA2ADDB48DFB1EE203820 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 261299CE2F6C686D00EC1C97 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 261299D52F6C686D00EC1C97;
remoteInfo = bookstax;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
01B196AE0433DB616DBF32EF /* OnboardingViewModelTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OnboardingViewModelTests.swift; path = bookstaxTests/OnboardingViewModelTests.swift; sourceTree = "<group>"; };
06ACD7F7DBD5175662183FB5 /* PageEditorViewModelTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PageEditorViewModelTests.swift; path = bookstaxTests/PageEditorViewModelTests.swift; sourceTree = "<group>"; };
0F2E04000A7F4412894F47CF /* AccentThemeTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AccentThemeTests.swift; path = bookstaxTests/AccentThemeTests.swift; sourceTree = "<group>"; };
2285E361AEE1AD0F1A3D1318 /* bookstaxTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = bookstaxTests.xctest; path = .xctest; sourceTree = BUILT_PRODUCTS_DIR; };
2480561934949230710825EA /* StringHTMLTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StringHTMLTests.swift; path = bookstaxTests/StringHTMLTests.swift; sourceTree = "<group>"; };
261299D62F6C686D00EC1C97 /* bookstax.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = bookstax.app; sourceTree = BUILT_PRODUCTS_DIR; };
26FD17062F8A95E1006E87F3 /* Tips.storekit */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tips.storekit; sourceTree = "<group>"; };
26FD17072F8A9643006E87F3 /* Donations.storekit */ = {isa = PBXFileReference; lastKnownFileType = text; path = Donations.storekit; sourceTree = "<group>"; };
4054EC160F48247753D5E360 /* SearchViewModelTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchViewModelTests.swift; path = bookstaxTests/SearchViewModelTests.swift; sourceTree = "<group>"; };
57AC406884F8446C6F4FA215 /* DTOTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DTOTests.swift; path = bookstaxTests/DTOTests.swift; sourceTree = "<group>"; };
944952BFC6DCCE66317FF8D7 /* APIErrorTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = APIErrorTests.swift; path = bookstaxTests/APIErrorTests.swift; sourceTree = "<group>"; };
C0841C05048CA5AE635439A8 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
E478C272640163A74D17B3DE /* DonationServiceTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DonationServiceTests.swift; path = bookstaxTests/DonationServiceTests.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
@@ -25,6 +54,14 @@
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
1A1B96526910505E82E2CFDB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
C7308555E59969ECCBEAEEFC /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
261299D32F6C686D00EC1C97 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -35,6 +72,14 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
1BB5D3095A0460024F7BA321 /* iOS */ = {
isa = PBXGroup;
children = (
C0841C05048CA5AE635439A8 /* Foundation.framework */,
);
name = iOS;
sourceTree = "<group>";
};
261299CD2F6C686D00EC1C97 = {
isa = PBXGroup;
children = (
@@ -42,6 +87,8 @@
261299D82F6C686D00EC1C97 /* bookstax */,
261299D72F6C686D00EC1C97 /* Products */,
26FD17072F8A9643006E87F3 /* Donations.storekit */,
EB2578937899373803DA341A /* Frameworks */,
46815FA4B6CE7CC70A5E1AC0 /* bookstaxTests */,
);
sourceTree = "<group>";
};
@@ -49,10 +96,34 @@
isa = PBXGroup;
children = (
261299D62F6C686D00EC1C97 /* bookstax.app */,
2285E361AEE1AD0F1A3D1318 /* bookstaxTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
46815FA4B6CE7CC70A5E1AC0 /* bookstaxTests */ = {
isa = PBXGroup;
children = (
2480561934949230710825EA /* StringHTMLTests.swift */,
944952BFC6DCCE66317FF8D7 /* APIErrorTests.swift */,
4054EC160F48247753D5E360 /* SearchViewModelTests.swift */,
57AC406884F8446C6F4FA215 /* DTOTests.swift */,
06ACD7F7DBD5175662183FB5 /* PageEditorViewModelTests.swift */,
01B196AE0433DB616DBF32EF /* OnboardingViewModelTests.swift */,
0F2E04000A7F4412894F47CF /* AccentThemeTests.swift */,
E478C272640163A74D17B3DE /* DonationServiceTests.swift */,
);
name = bookstaxTests;
sourceTree = "<group>";
};
EB2578937899373803DA341A /* Frameworks */ = {
isa = PBXGroup;
children = (
1BB5D3095A0460024F7BA321 /* iOS */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -72,12 +143,28 @@
261299D82F6C686D00EC1C97 /* bookstax */,
);
name = bookstax;
packageProductDependencies = (
);
productName = bookstax;
productReference = 261299D62F6C686D00EC1C97 /* bookstax.app */;
productType = "com.apple.product-type.application";
};
AD8774751A52779622D7AED5 /* bookstaxTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 29568FB35D3D7050B63B6901 /* Build configuration list for PBXNativeTarget "bookstaxTests" */;
buildPhases = (
67E32E036FC96F91F25C740D /* Sources */,
1A1B96526910505E82E2CFDB /* Frameworks */,
AA28FE166C71A3A60AC62034 /* Resources */,
);
buildRules = (
);
dependencies = (
90647D0E4313E7A718C1C384 /* PBXTargetDependency */,
);
name = bookstaxTests;
productName = bookstaxTests;
productReference = 2285E361AEE1AD0F1A3D1318 /* bookstaxTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
@@ -101,6 +188,7 @@
Base,
de,
es,
fr,
);
mainGroup = 261299CD2F6C686D00EC1C97;
minimizedProjectReferenceProxies = 1;
@@ -110,6 +198,7 @@
projectRoot = "";
targets = (
261299D52F6C686D00EC1C97 /* bookstax */,
AD8774751A52779622D7AED5 /* bookstaxTests */,
);
};
/* End PBXProject section */
@@ -123,6 +212,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
AA28FE166C71A3A60AC62034 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -133,9 +229,49 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
67E32E036FC96F91F25C740D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
EBEA92CF7BFC556D0B10E657 /* StringHTMLTests.swift in Sources */,
049D789A53BC64AFB1C810A5 /* APIErrorTests.swift in Sources */,
6B19ECCECBCC5040054B4916 /* SearchViewModelTests.swift in Sources */,
84A3204FA6CF24CC3D1126AE /* DTOTests.swift in Sources */,
23B7C03076B6043F7EA4BBA8 /* PageEditorViewModelTests.swift in Sources */,
2AB9247CBE750A713DA8151B /* OnboardingViewModelTests.swift in Sources */,
57538A9C5792A8F0B00134DE /* AccentThemeTests.swift in Sources */,
DBD5B145DFCF7E2B9FFE0C20 /* DonationServiceTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
90647D0E4313E7A718C1C384 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = bookstax;
target = 261299D52F6C686D00EC1C97 /* bookstax */;
targetProxy = 992CA2ADDB48DFB1EE203820 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
1C68E5D77B468BD3A7F1C349 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ENABLE_OBJC_WEAK = NO;
DEVELOPMENT_TEAM = EKFHUHT63T;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 18.6;
PRODUCT_BUNDLE_IDENTIFIER = Team.bookstaxTests;
SDKROOT = iphoneos;
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/bookstax.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/bookstax";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
261299DF2F6C686E00EC1C97 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -268,11 +404,12 @@
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = NO;
INFOPLIST_FILE = Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 18.6;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.2;
MARKETING_VERSION = 1.3;
PRODUCT_BUNDLE_IDENTIFIER = Team.bookstax;
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = YES;
@@ -299,11 +436,12 @@
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = NO;
INFOPLIST_FILE = Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 18.6;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.2;
MARKETING_VERSION = 1.3;
PRODUCT_BUNDLE_IDENTIFIER = Team.bookstax;
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = YES;
@@ -319,6 +457,21 @@
};
name = Release;
};
C9DF29CF9FF31B97AC4E31E5 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ENABLE_OBJC_WEAK = NO;
DEVELOPMENT_TEAM = EKFHUHT63T;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 18.6;
PRODUCT_BUNDLE_IDENTIFIER = Team.bookstaxTests;
SDKROOT = iphoneos;
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/bookstax.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/bookstax";
};
name = Debug;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
@@ -340,6 +493,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
29568FB35D3D7050B63B6901 /* Build configuration list for PBXNativeTarget "bookstaxTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1C68E5D77B468BD3A7F1C349 /* Release */,
C9DF29CF9FF31B97AC4E31E5 /* Debug */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 261299CE2F6C686D00EC1C97 /* Project object */;
@@ -21,6 +21,20 @@
ReferencedContainer = "container:bookstax.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "AD8774751A52779622D7AED5"
BuildableName = "bookstaxTests.xctest"
BlueprintName = "bookstaxTests"
ReferencedContainer = "container:bookstax.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
@@ -28,7 +42,19 @@
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
shouldAutocreateTestPlan = "NO">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "AD8774751A52779622D7AED5"
BuildableName = "bookstaxTests.xctest"
BlueprintName = "bookstaxTests"
ReferencedContainer = "container:bookstax.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"