Skip to content

CI: also build the app for the iOS Simulator - #10

Merged
code4teaching merged 46 commits into
mainfrom
ci-app-build
Oct 19, 2026
Merged

code4teaching merged 46 commits into
mainfrom
ci-app-build

Conversation

@code4teaching

Copy link
Copy Markdown
Owner

Requested by Holger · project thread

Before: CI only ran swift test on VisuStructCore. A change that broke the app target (a missing file reference, a compile error in a view) stayed green.

After: a second job, app-build, runs xcodebuild build for the VisuStruct scheme against the iOS Simulator SDK, without code signing.

How: new job in .github/workflows/core-tests.yml (workflow renamed to CI). Step 1 of the refactoring plan for ContentView and DiagramCanvasView.


Generated by Claude Code

Catches changes that break the Xcode project (missing file references,
compile errors in the app target), which swift test on VisuStructCore
cannot see.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ
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:15
- 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
claude and others added 24 commits October 19, 2026 07:12
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
# 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
Xcode project: synchronized folder for VisuStruct/
@code4teaching
code4teaching merged commit 4233b9b into main 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