Implement comprehensive release notes feature: - RELEASE_NOTES.md with version 1.0 and 1.1 content in English - VersionManager to track app versions and detect updates - ReleaseNotesView with native markdown rendering - Auto-popup sheet on first launch after version update - Manual access via "What's New" button in General Settings Features: - Markdown-based release notes stored in app bundle - Automatic version detection using CFBundleShortVersionString - UserDefaults tracking of last seen version - Dismissable sheet with "Done" button - Settings button shows current version number Technical implementation: - VersionManager singleton for version tracking - Sheet presentation in MainTabView on new version - Settings integration with sparkles icon - Native SwiftUI Text markdown rendering - Bundle resource loading for RELEASE_NOTES.md Release notes content: - Version 1.1: iOS 26 features, floating buttons, progress tracking - Version 1.0: Initial release features and capabilities
45 lines
1.3 KiB
Swift
45 lines
1.3 KiB
Swift
import SwiftUI
|
|
|
|
struct ReleaseNotesView: View {
|
|
@Environment(\.dismiss) private var dismiss
|
|
|
|
var body: some View {
|
|
NavigationView {
|
|
ScrollView {
|
|
VStack(alignment: .leading, spacing: 16) {
|
|
if let markdownContent = loadReleaseNotes() {
|
|
Text(.init(markdownContent))
|
|
.font(.body)
|
|
.padding()
|
|
} else {
|
|
Text("Unable to load release notes")
|
|
.foregroundColor(.secondary)
|
|
.padding()
|
|
}
|
|
}
|
|
}
|
|
.navigationTitle("What's New")
|
|
.navigationBarTitleDisplayMode(.large)
|
|
.toolbar {
|
|
ToolbarItem(placement: .confirmationAction) {
|
|
Button("Done") {
|
|
dismiss()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private func loadReleaseNotes() -> String? {
|
|
guard let url = Bundle.main.url(forResource: "RELEASE_NOTES", withExtension: "md"),
|
|
let content = try? String(contentsOf: url) else {
|
|
return nil
|
|
}
|
|
return content
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
ReleaseNotesView()
|
|
}
|