The phone learns to say who it is — IndieAbout joins the Settings tab with a changelog of its own

The About section lands last in the mobile Settings form, mirroring the Mac AboutBox voice: license link, copyright, and a version label that doubles as the changelog link. The changelog is the phone app's own — a separate product with its own 1.0, so the Mac CHANGELOG.md would narrate someone else's releases. The Update Build Info stamping phase rides along so the version line can carry a build number and date.

Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
2026-08-08 10:22:04 -04:00
parent b88da5a4bd
commit 209c991030
4 changed files with 45 additions and 9 deletions
+14 -7
View File
@@ -1,7 +1,8 @@
import SwiftUI
import IndieAbout
import IndieBackup
/// App version, and backup/restore (indie-backup skill).
/// Backup/restore (indie-backup skill) and the About section (indie-about skill).
struct SettingsTabView: View {
@Environment(BoardIndexStore.self) private var index
@Environment(\.backupController) private var backupController
@@ -9,13 +10,19 @@ struct SettingsTabView: View {
var body: some View {
NavigationStack {
Form {
Section {
LabeledContent("Version") {
Text(Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "")
}
}
backupSection
// Last section by convention. The version label doubles as the changelog link,
// which is why the changelog sits in its dedicated slot and not in `documents`.
// Same voice as the Mac app's `AboutBox.configuration`; the changelog itself is
// the phone app's own (see project.yml separate product, separate 1.0).
Section {
IndieAbout(configuration: .init(
copyrightText: "© 2026 rzen",
documents: [.license(extension: "md")],
changelogDocument: .changelog()
))
}
}
.navigationTitle("Settings")
}