diff --git a/Mac/Base.lproj/Preferences.storyboard b/Mac/Base.lproj/Preferences.storyboard
index ee3005c13..725aafbbe 100644
--- a/Mac/Base.lproj/Preferences.storyboard
+++ b/Mac/Base.lproj/Preferences.storyboard
@@ -177,54 +177,91 @@
-
+
-
-
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
+
+
-
+
@@ -232,7 +269,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/Mac/Preferences/Advanced/AdvancedPreferencesViewController.swift b/Mac/Preferences/Advanced/AdvancedPreferencesViewController.swift
index 8e8909f25..296f2c876 100644
--- a/Mac/Preferences/Advanced/AdvancedPreferencesViewController.swift
+++ b/Mac/Preferences/Advanced/AdvancedPreferencesViewController.swift
@@ -10,5 +10,56 @@ import AppKit
final class AdvancedPreferencesViewController: NSViewController {
+ @IBOutlet var releaseBuildsButton: NSButton!
+ @IBOutlet var testBuildsButton: NSButton!
+
+ let releaseBuildsURL = Bundle.main.infoDictionary!["SUFeedURL"]! as! String
+ let testBuildsURL = Bundle.main.infoDictionary!["FeedURLForTestBuilds"]! as! String
+ let appcastDefaultsKey = "SUFeedURL"
+
+ var didRegisterForNotification = false
+ var wantsTestBuilds: Bool {
+ get {
+ return currentAppcastURL() == testBuildsURL
+ }
+ set {
+ UserDefaults.standard.set(newValue ? testBuildsURL : releaseBuildsURL, forKey: appcastDefaultsKey)
+ }
+ }
+
+ override func viewWillAppear() {
+ super.viewWillAppear()
+ updateUI()
+ if !didRegisterForNotification {
+ NotificationCenter.default.addObserver(self, selector: #selector(userDefaultsDidChange(_:)), name: UserDefaults.didChangeNotification, object: nil)
+ didRegisterForNotification = true
+ }
+ }
+
+ @IBAction func updateTypeButtonClicked(_ sender: Any?) {
+ guard let button = sender as? NSButton else {
+ return
+ }
+ wantsTestBuilds = (button === testBuildsButton)
+ }
+
+ @objc func userDefaultsDidChange(_ sender: Any?) {
+ updateUI()
+ }
}
+private extension AdvancedPreferencesViewController {
+
+ func updateUI() {
+ if wantsTestBuilds {
+ testBuildsButton.state = .on
+ }
+ else {
+ releaseBuildsButton.state = .on
+ }
+ }
+
+ func currentAppcastURL() -> String {
+ return UserDefaults.standard.string(forKey: appcastDefaultsKey) ?? ""
+ }
+}