Files
2026-03-21 09:49:01 +01:00

2.9 KiB
Raw Permalink Blame History

BookStax Development Changelog

Session 1

Architecture & Foundation

  • Full app architecture planned and implemented from scratch
  • Target: iOS 26.2, Xcode 26, Swift 6, SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor
  • Models: BookStackError, all API DTOs (ShelfDTO, BookDTO, ChapterDTO, PageDTO, etc.), SwiftData cache models
  • Services: KeychainService (actor), ConnectivityMonitor (@Observable), BookStackAPI (actor), SyncService
  • ViewModels: OnboardingViewModel, LibraryViewModel, SearchViewModel, PageEditorViewModel
  • Views: Full onboarding flow, library hierarchy, page reader (WebPage/WebView iOS 26), editor, search, settings, main tab view
  • Localisation: English, German, Spanish (Localizable.strings)
  • SwiftData model container, onboarding gate, Keychain credential loading wired in bookstaxApp.swift

Session 2

Bug Fixes

  • BookStackAPI filter syntax: Fixed book_id=Xfilter[book_id]=X for chapters and pages endpoints (BookStack API requirement)
  • Color picker in Settings not responding: Added .buttonStyle(.plain) to swatch buttons inside Form (SwiftUI list button style conflict)

Localisation

  • Search section fully translated: Replaced all hardcoded English strings in SearchView.swift with L() keys
  • ContentType.displayName: Changed from hardcoded English to NSLocalizedString (required because nonisolated structs can't call @MainActor-isolated L())
  • New localisation keys added to en/de/es: search.loading, search.empty.title, search.empty.message, search.filter.all, search.type.page/book/chapter/shelf

Breadcrumb Navigation (Library)

  • Added BookInShelf wrapper struct (Hashable) to carry shelf context through NavigationStack
  • Added Crumb struct and BreadcrumbBar view (scrollable, tappable ancestor crumbs)
  • Breadcrumbs embedded as first Section in List (prevents large title collapse that occurred with .safeAreaInset)
  • BooksInShelfView: shows Library → Shelf crumbs, dismiss action on Library crumb
  • BookDetailView: shows Library → Shelf → Book crumbs, new shelfName: String? parameter
  • New navigationDestination(for: BookInShelf.self) in LibraryView

Session 3

App Icon

  • Created three 1024×1024 app icon variants (light, dark, tinted) using provided artwork
  • Light (AppIcon.png): isometric purple BookStax books on white background
  • Dark (AppIcon-dark.png): same books on dark navy background (user-provided AI-generated image)
  • Tinted (AppIcon-tinted.png): greyscale version of dark icon for iOS tinted icon mode
  • Contents.json references all three variants with correct luminosity appearance entries
  • Icon files also saved as standalone copies in bookstax/bookstax/

Build Fix

  • Fixed stray t character at top of PageEditorView.swift causing compile errors (timport SwiftUIimport SwiftUI)