Major changes: - Textbook UI: chapter list, reader, and interactive exercise view (keyboard + Apple Pencil) surfaced under the Course tab. 30 chapters, 251 exercises. - Stem-change conjugation toggle on Week 4 flashcard decks (E-IE, E-I, O-UE). Uses existing VerbForm + IrregularSpan data to render highlighted present tense conjugations inline. - Deterministic on-device answer grader with partial credit (correct / close for accent-stripped or single-char-typo / wrong). 11 unit tests cover it. - SharedModels: TextbookChapter (local), TextbookExerciseAttempt (cloud- synced), AnswerGrader helpers. Bumped schema. - DataLoader: textbook seeder (version 8) + refresh helpers that preserve LanGo course decks when textbook data is re-seeded. - Local extraction pipeline in Conjuga/Scripts/textbook/ — XHTML chapter parser, answer-key parser, macOS Vision image OCR + PDF page OCR, merger, NSSpellChecker validator, language-aware auto-fixer, and repair pass that re-pairs quarantined vocab rows using bounding-box coordinates. - UI test target (ConjugaUITests) with three tests: end-to-end textbook flow, all-chapters screenshot audit, and stem-change toggle verification. Generated textbook content (textbook_data.json, textbook_vocab.json) and third-party source files are gitignored — re-run Scripts/textbook/run_pipeline.sh locally to regenerate. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
120 lines
4.4 KiB
XML
120 lines
4.4 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<Scheme
|
|
LastUpgradeVersion = "2600"
|
|
version = "1.7">
|
|
<BuildAction
|
|
parallelizeBuildables = "YES"
|
|
buildImplicitDependencies = "YES"
|
|
runPostActionsOnFailure = "NO">
|
|
<BuildActionEntries>
|
|
<BuildActionEntry
|
|
buildForTesting = "YES"
|
|
buildForRunning = "YES"
|
|
buildForProfiling = "YES"
|
|
buildForArchiving = "YES"
|
|
buildForAnalyzing = "YES">
|
|
<BuildableReference
|
|
BuildableIdentifier = "primary"
|
|
BlueprintIdentifier = "96127FACA68AE541F5C0F8BC"
|
|
BuildableName = "Conjuga.app"
|
|
BlueprintName = "Conjuga"
|
|
ReferencedContainer = "container:Conjuga.xcodeproj">
|
|
</BuildableReference>
|
|
</BuildActionEntry>
|
|
<BuildActionEntry
|
|
buildForTesting = "YES"
|
|
buildForRunning = "YES"
|
|
buildForProfiling = "YES"
|
|
buildForArchiving = "YES"
|
|
buildForAnalyzing = "YES">
|
|
<BuildableReference
|
|
BuildableIdentifier = "primary"
|
|
BlueprintIdentifier = "F73909B4044081DB8F6272AF"
|
|
BuildableName = "ConjugaWidgetExtension.appex"
|
|
BlueprintName = "ConjugaWidgetExtension"
|
|
ReferencedContainer = "container:Conjuga.xcodeproj">
|
|
</BuildableReference>
|
|
</BuildActionEntry>
|
|
</BuildActionEntries>
|
|
</BuildAction>
|
|
<TestAction
|
|
buildConfiguration = "Debug"
|
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
onlyGenerateCoverageForSpecifiedTargets = "NO">
|
|
<MacroExpansion>
|
|
<BuildableReference
|
|
BuildableIdentifier = "primary"
|
|
BlueprintIdentifier = "96127FACA68AE541F5C0F8BC"
|
|
BuildableName = "Conjuga.app"
|
|
BlueprintName = "Conjuga"
|
|
ReferencedContainer = "container:Conjuga.xcodeproj">
|
|
</BuildableReference>
|
|
</MacroExpansion>
|
|
<Testables>
|
|
<TestableReference
|
|
skipped = "NO">
|
|
<BuildableReference
|
|
BuildableIdentifier = "primary"
|
|
BlueprintIdentifier = "C77B065CF67D1F5128E10CC7"
|
|
BuildableName = "ConjugaUITests.xctest"
|
|
BlueprintName = "ConjugaUITests"
|
|
ReferencedContainer = "container:Conjuga.xcodeproj">
|
|
</BuildableReference>
|
|
</TestableReference>
|
|
</Testables>
|
|
<CommandLineArguments>
|
|
</CommandLineArguments>
|
|
</TestAction>
|
|
<LaunchAction
|
|
buildConfiguration = "Debug"
|
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
launchStyle = "0"
|
|
useCustomWorkingDirectory = "NO"
|
|
ignoresPersistentStateOnLaunch = "NO"
|
|
debugDocumentVersioning = "YES"
|
|
debugServiceExtension = "internal"
|
|
allowLocationSimulation = "YES">
|
|
<BuildableProductRunnable
|
|
runnableDebuggingMode = "0">
|
|
<BuildableReference
|
|
BuildableIdentifier = "primary"
|
|
BlueprintIdentifier = "96127FACA68AE541F5C0F8BC"
|
|
BuildableName = "Conjuga.app"
|
|
BlueprintName = "Conjuga"
|
|
ReferencedContainer = "container:Conjuga.xcodeproj">
|
|
</BuildableReference>
|
|
</BuildableProductRunnable>
|
|
<CommandLineArguments>
|
|
</CommandLineArguments>
|
|
</LaunchAction>
|
|
<ProfileAction
|
|
buildConfiguration = "Release"
|
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
savedToolIdentifier = ""
|
|
useCustomWorkingDirectory = "NO"
|
|
debugDocumentVersioning = "YES">
|
|
<BuildableProductRunnable
|
|
runnableDebuggingMode = "0">
|
|
<BuildableReference
|
|
BuildableIdentifier = "primary"
|
|
BlueprintIdentifier = "96127FACA68AE541F5C0F8BC"
|
|
BuildableName = "Conjuga.app"
|
|
BlueprintName = "Conjuga"
|
|
ReferencedContainer = "container:Conjuga.xcodeproj">
|
|
</BuildableReference>
|
|
</BuildableProductRunnable>
|
|
<CommandLineArguments>
|
|
</CommandLineArguments>
|
|
</ProfileAction>
|
|
<AnalyzeAction
|
|
buildConfiguration = "Debug">
|
|
</AnalyzeAction>
|
|
<ArchiveAction
|
|
buildConfiguration = "Release"
|
|
revealArchiveInOrganizer = "YES">
|
|
</ArchiveAction>
|
|
</Scheme>
|