Release notes improvements: - Rewrote technical descriptions for better user understanding - Replaced technical jargon with clear benefits - Added blank lines after section headers for better readability - Focused on what users gain instead of implementation details View improvements: - Use AttributedString with proper markdown parsing - Enable text selection for copying content - Better markdown rendering with .interpretedSyntax option Content updates: - AppStore link and introduction added - User-focused feature descriptions - Clear benefit-oriented language - Acknowledgment for community contributions
49 lines
1.5 KiB
Swift
49 lines
1.5 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 attributedString = loadReleaseNotes() {
|
|
Text(attributedString)
|
|
.textSelection(.enabled)
|
|
.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() -> AttributedString? {
|
|
guard let url = Bundle.main.url(forResource: "RELEASE_NOTES", withExtension: "md"),
|
|
let markdownContent = try? String(contentsOf: url),
|
|
let attributedString = try? AttributedString(
|
|
markdown: markdownContent,
|
|
options: .init(interpretedSyntax: .full)
|
|
) else {
|
|
return nil
|
|
}
|
|
return attributedString
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
ReleaseNotesView()
|
|
}
|