Skip to content

Xcode project: synchronized folder for VisuStruct/ - #11

Merged
code4teaching merged 41 commits into
ci-app-buildfrom
xcode-synced-folders
Oct 19, 2026
Merged

code4teaching merged 41 commits into
ci-app-buildfrom
xcode-synced-folders

Conversation

@code4teaching

Copy link
Copy Markdown
Owner

Requested by Holger · project thread

Before: every Swift file, string table and resource was listed by hand in project.pbxproj (4 entries per file). Adding a file without them broke the build.

After: VisuStruct/ is a synchronized folder (Xcode 16+ format, objectVersion = 77). Files added, moved or removed under it are picked up automatically. The target builds the same set as before: Info.plist stays out (it is the target's Info.plist file), and so does the unused java.lproj/Localizable.strings (the app uses Java.strings, see AppLanguage.swift).

How: replaced the file references, groups and build-file entries with one PBXFileSystemSynchronizedRootGroup plus a membership exception set. Build settings, package reference and scheme are unchanged. Stacked on the CI app-build PR, whose job verifies this builds.


Generated by Claude Code

New, moved or deleted files under VisuStruct/ are picked up by Xcode
automatically, so later refactoring steps need no project.pbxproj
edits. Info.plist and the unused java.lproj/Localizable.strings stay
out of the target, as before (Java.strings is used instead).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ
@code4teaching code4teaching self-assigned this Oct 18, 2026
IO-prefix handling, keyword stripping for the line editor, quote
normalization and for-loop field handling move from ContentView into
VisuStructLineEditorText; the canvas display text (added keywords,
until -> while, keyword split) moves into VisuStructDiagramText. Both
are now covered by swift test. Removes two unused helpers
(stripLineEditorPrefix, stripKeywordPrefix). No behavior change.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ
@code4teaching
code4teaching marked this pull request as ready for review October 18, 2026 22:17
claude added 26 commits October 18, 2026 22:20
- VisuStructCore: VisuStructEditHistory (undo/redo stacks, 80-step limit)
  and VisuStructDocumentEditing.sanitizedSelection, with tests.
- DiagramSheetTab keeps a VisuStructEditHistory instead of two arrays.
- DiagramSheetTabsModel+Editing: currentTab, updateCurrentTab,
  commitDocument, resetHistoryAndDocument, undo, redo,
  selectAndClearError, setErrorOnCurrentTab.
- ContentView uses these instead of copying tabs by hand at each site.

No behavior change intended.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ
The engine, play/pause task, input text and the simulation mode flag
move from ContentView @State into an @observable SimulationController.
The step delay and highlight mode are read from UserDefaults at each
step, as the @AppStorage values were before.

No behavior change intended.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ
- Palette/PaletteActionList.swift: palette rows, drag preview and the
  action buttons below; actions come in as closures.
- Simulation/SimulationDetailView.swift: canvas plus state panel layout
  for simulation mode, driven by SimulationController.
- ContentView keeps the action logic (toggleSimulationMode,
  openCodeGenerator) and the simulation canvas.

No behavior change intended.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ
- VisuStructCore: VisuStructDocumentEditing.multiwayAncestorPath and
  caseIndex(of:inMultiwayAt:), with tests.
- Inspector/InspectorElementHints.swift: line editor placeholder and
  condition hint line per element type.
- Remove the unused statementIOModeIfApplicable().

No behavior change intended.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ
The four export actions in ContentView each rendered the diagram and
mapped errors themselves. Export/DiagramExporter.swift now does that;
ContentView only stores the share payloads it returns.

No behavior change intended.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ
- DiagramCanvasView.swift: inputs, state, layout and body, clipboard.
- DiagramCanvasDropZones.swift: drop bands, tap insert targets and
  applying drops.
- DiagramCanvasRenderer.swift: Canvas drawing of cells, lines and text.

The two new files are extensions of DiagramCanvasView, so members they
share lose their `private`. Code is moved unchanged otherwise.

No behavior change intended.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ
Carries the portrait simulation layout from main into
SimulationDetailView.swift.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ
Carries the VoiceOver block labels from main into
DiagramCanvasDropZones.swift.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ
claude and others added 13 commits October 19, 2026 07:30
# Conflicts:
#	VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ContentView.swift
Split DiagramCanvasView into view, drop zones and renderer
Bundle PNG, file, PDF and print export in DiagramExporter
Move inspector hints and Fallauswahl path helpers out of ContentView
Extract PaletteActionList and SimulationDetailView from ContentView
Move simulation state and controls into SimulationController
Move undo/redo and tab editing out of ContentView
Move inspector and canvas text logic into VisuStructCore
@code4teaching
code4teaching merged commit 1214587 into ci-app-build Oct 19, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants