Release notes added to Settings (iOS) and Help Menu (macOS)
This commit is contained in:
Stuart Breckenridge 2020-08-13 08:24:54 +08:00
parent cacc96fa5e
commit f1e3a19804
No known key found for this signature in database
GPG Key ID: 79BD673276AE83CE
5 changed files with 58 additions and 1 deletions

View File

@ -73,6 +73,12 @@ struct MainApp: App {
Button("Open in Browser", action: {}) Button("Open in Browser", action: {})
.keyboardShortcut(.rightArrow, modifiers: [.command]) .keyboardShortcut(.rightArrow, modifiers: [.command])
}) })
CommandGroup(after: .help, addition: {
Button("Release Notes", action: {
NSWorkspace.shared.open(ReleaseNotes().url)
})
.keyboardShortcut("V", modifiers: [.shift, .command])
})
} }
// Mac Preferences // Mac Preferences

View File

@ -0,0 +1,32 @@
//
// ReleaseNotes.swift
// NetNewsWire
//
// Created by Stuart Breckenridge on 13/8/20.
// Copyright © 2020 Ranchero Software. All rights reserved.
//
import Foundation
struct ReleaseNotes {
var url: URL {
var gitHub = "https://github.com/Ranchero-Software/NetNewsWire/releases/tag/"
#if os(macOS)
gitHub += "mac-\(String(describing: versionString()))"
return URL(string: gitHub)!
#else
gitHub += "ios-\(String(describing: versionString()))-\(String(describing: buildVersionString()))"
return URL(string: gitHub)!
#endif
}
private func versionString() -> String {
Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? ""
}
private func buildVersionString() -> String {
Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String ?? ""
}
}

View File

@ -12,7 +12,7 @@ import Account
class SettingsModel: ObservableObject { class SettingsModel: ObservableObject {
enum HelpSites { enum HelpSites {
case netNewsWireHelp, netNewsWire, supportNetNewsWire, github, bugTracker, technotes, netNewsWireSlack, none case netNewsWireHelp, netNewsWire, supportNetNewsWire, github, bugTracker, technotes, netNewsWireSlack, releaseNotes, none
var url: URL? { var url: URL? {
switch self { switch self {
@ -30,6 +30,8 @@ class SettingsModel: ObservableObject {
return URL(string: "https://github.com/brentsimmons/NetNewsWire/tree/main/Technotes")! return URL(string: "https://github.com/brentsimmons/NetNewsWire/tree/main/Technotes")!
case .netNewsWireSlack: case .netNewsWireSlack:
return URL(string: "https://ranchero.com/netnewswire/slack")! return URL(string: "https://ranchero.com/netnewswire/slack")!
case .releaseNotes:
return ReleaseNotes().url
case .none: case .none:
return nil return nil
} }

View File

@ -203,6 +203,9 @@ struct SettingsView: View {
Button("NetNewsWire Slack", action: { Button("NetNewsWire Slack", action: {
viewModel.selectedWebsite = .netNewsWireSlack viewModel.selectedWebsite = .netNewsWireSlack
}).foregroundColor(.primary) }).foregroundColor(.primary)
Button("Release Notes", action: {
viewModel.selectedWebsite = .releaseNotes
}).foregroundColor(.primary)
NavigationLink( NavigationLink(
destination: SettingsAboutView(), destination: SettingsAboutView(),
label: { label: {

View File

@ -54,6 +54,8 @@
17A1598624E3DEDD005DA32A /* RSDatabase in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 17A1598424E3DEDD005DA32A /* RSDatabase */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 17A1598624E3DEDD005DA32A /* RSDatabase in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 17A1598424E3DEDD005DA32A /* RSDatabase */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
17A1598824E3DEDD005DA32A /* RSParser in Frameworks */ = {isa = PBXBuildFile; productRef = 17A1598724E3DEDD005DA32A /* RSParser */; }; 17A1598824E3DEDD005DA32A /* RSParser in Frameworks */ = {isa = PBXBuildFile; productRef = 17A1598724E3DEDD005DA32A /* RSParser */; };
17A1598924E3DEDD005DA32A /* RSParser in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 17A1598724E3DEDD005DA32A /* RSParser */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 17A1598924E3DEDD005DA32A /* RSParser in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 17A1598724E3DEDD005DA32A /* RSParser */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
17AC0ABB24E4B65E004C1231 /* ReleaseNotes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17AC0ABA24E4B65E004C1231 /* ReleaseNotes.swift */; };
17AC0ABC24E4B65E004C1231 /* ReleaseNotes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17AC0ABA24E4B65E004C1231 /* ReleaseNotes.swift */; };
17D232A824AFF10A0005F075 /* AddWebFeedModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D232A724AFF10A0005F075 /* AddWebFeedModel.swift */; }; 17D232A824AFF10A0005F075 /* AddWebFeedModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D232A724AFF10A0005F075 /* AddWebFeedModel.swift */; };
17D232A924AFF10A0005F075 /* AddWebFeedModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D232A724AFF10A0005F075 /* AddWebFeedModel.swift */; }; 17D232A924AFF10A0005F075 /* AddWebFeedModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D232A724AFF10A0005F075 /* AddWebFeedModel.swift */; };
17D5F17124B0BC6700375168 /* SidebarToolbarModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D5F17024B0BC6700375168 /* SidebarToolbarModel.swift */; }; 17D5F17124B0BC6700375168 /* SidebarToolbarModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D5F17024B0BC6700375168 /* SidebarToolbarModel.swift */; };
@ -1439,6 +1441,7 @@
1799E6A824C2F93F00511E91 /* InspectorPlatformModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectorPlatformModifier.swift; sourceTree = "<group>"; }; 1799E6A824C2F93F00511E91 /* InspectorPlatformModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectorPlatformModifier.swift; sourceTree = "<group>"; };
1799E6CC24C320D600511E91 /* InspectorModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectorModel.swift; sourceTree = "<group>"; }; 1799E6CC24C320D600511E91 /* InspectorModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectorModel.swift; sourceTree = "<group>"; };
179DBBA2B22A659F81EED6F9 /* AccountsNewsBlurWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountsNewsBlurWindowController.swift; sourceTree = "<group>"; }; 179DBBA2B22A659F81EED6F9 /* AccountsNewsBlurWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountsNewsBlurWindowController.swift; sourceTree = "<group>"; };
17AC0ABA24E4B65E004C1231 /* ReleaseNotes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseNotes.swift; sourceTree = "<group>"; };
17B223DB24AC24D2001E4592 /* TimelineLayoutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineLayoutView.swift; sourceTree = "<group>"; }; 17B223DB24AC24D2001E4592 /* TimelineLayoutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineLayoutView.swift; sourceTree = "<group>"; };
17D232A724AFF10A0005F075 /* AddWebFeedModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddWebFeedModel.swift; sourceTree = "<group>"; }; 17D232A724AFF10A0005F075 /* AddWebFeedModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddWebFeedModel.swift; sourceTree = "<group>"; };
17D5F17024B0BC6700375168 /* SidebarToolbarModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarToolbarModel.swift; sourceTree = "<group>"; }; 17D5F17024B0BC6700375168 /* SidebarToolbarModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarToolbarModel.swift; sourceTree = "<group>"; };
@ -2231,6 +2234,14 @@
path = Add; path = Add;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
17AC0ACB24E4B66A004C1231 /* Release Notes */ = {
isa = PBXGroup;
children = (
17AC0ABA24E4B65E004C1231 /* ReleaseNotes.swift */,
);
path = "Release Notes";
sourceTree = "<group>";
};
510289CE2451BA1E00426DDF /* Twitter */ = { 510289CE2451BA1E00426DDF /* Twitter */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -2634,6 +2645,7 @@
514E6C0424AD2B0400AC6F6E /* SwiftUI Extensions */, 514E6C0424AD2B0400AC6F6E /* SwiftUI Extensions */,
51919FCB24AB855000541E64 /* Timeline */, 51919FCB24AB855000541E64 /* Timeline */,
171BCBB124CBD569006E22D9 /* Account Management */, 171BCBB124CBD569006E22D9 /* Account Management */,
17AC0ACB24E4B66A004C1231 /* Release Notes */,
); );
path = Shared; path = Shared;
sourceTree = "<group>"; sourceTree = "<group>";
@ -4447,6 +4459,7 @@
51E4991724A8090400B667CB /* ArticleUtilities.swift in Sources */, 51E4991724A8090400B667CB /* ArticleUtilities.swift in Sources */,
51E4991B24A8091000B667CB /* IconImage.swift in Sources */, 51E4991B24A8091000B667CB /* IconImage.swift in Sources */,
51E4995424A8734D00B667CB /* ExtensionPointIdentifer.swift in Sources */, 51E4995424A8734D00B667CB /* ExtensionPointIdentifer.swift in Sources */,
17AC0ABB24E4B65E004C1231 /* ReleaseNotes.swift in Sources */,
51E4996924A8760C00B667CB /* ArticleStylesManager.swift in Sources */, 51E4996924A8760C00B667CB /* ArticleStylesManager.swift in Sources */,
5177471E24B387E100EB0F74 /* ImageTransition.swift in Sources */, 5177471E24B387E100EB0F74 /* ImageTransition.swift in Sources */,
51E498F324A8085D00B667CB /* PseudoFeed.swift in Sources */, 51E498F324A8085D00B667CB /* PseudoFeed.swift in Sources */,
@ -4662,6 +4675,7 @@
51E4990724A808C300B667CB /* AuthorAvatarDownloader.swift in Sources */, 51E4990724A808C300B667CB /* AuthorAvatarDownloader.swift in Sources */,
51E4997424A8784400B667CB /* DefaultFeedsImporter.swift in Sources */, 51E4997424A8784400B667CB /* DefaultFeedsImporter.swift in Sources */,
51919FF524AB869C00541E64 /* TimelineItem.swift in Sources */, 51919FF524AB869C00541E64 /* TimelineItem.swift in Sources */,
17AC0ABC24E4B65E004C1231 /* ReleaseNotes.swift in Sources */,
51E4992024A8095000B667CB /* RSImage-Extensions.swift in Sources */, 51E4992024A8095000B667CB /* RSImage-Extensions.swift in Sources */,
51E499FE24A9137600B667CB /* SidebarModel.swift in Sources */, 51E499FE24A9137600B667CB /* SidebarModel.swift in Sources */,
51E498FE24A808BA00B667CB /* FaviconDownloader.swift in Sources */, 51E498FE24A808BA00B667CB /* FaviconDownloader.swift in Sources */,