@@ -30,6 +30,26 @@ class SoftwareUpdater: NSObject, ObservableObject, SPUUpdaterDelegate {
3030 }
3131 }
3232
33+ private var feedURLTask : Task < ( ) , Never > ?
34+
35+ private func setFeedURL( ) async {
36+ let url = URL ( string: " https://api.github.com/repos/CodeEditApp/CodeEdit/releases/latest " ) !
37+ let request = URLRequest ( url: url)
38+ guard let data = try ? await URLSession . shared. data ( for: request) ,
39+ let result = try ? JSONDecoder ( ) . decode ( GHAPIResult . self, from: data. 0 ) else {
40+ DispatchQueue . main. async {
41+ self . updater? . setFeedURL ( nil )
42+ }
43+ return
44+ }
45+ URL . appcast = URL (
46+ string: " https://github.com/CodeEditApp/CodeEdit/releases/download/ \( result. tagName) /appcast.xml "
47+ ) !
48+ DispatchQueue . main. async {
49+ self . updater? . setFeedURL ( . appcast)
50+ }
51+ }
52+
3353 override init ( ) {
3454 super. init ( )
3555 updater = SPUStandardUpdaterController (
@@ -38,7 +58,9 @@ class SoftwareUpdater: NSObject, ObservableObject, SPUUpdaterDelegate {
3858 userDriverDelegate: nil
3959 ) . updater
4060
41- updater? . setFeedURL ( . appcast)
61+ feedURLTask = Task {
62+ await setFeedURL ( )
63+ }
4264
4365 automaticallyChecksForUpdatesObservation = updater? . observe (
4466 \. automaticallyChecksForUpdates,
@@ -60,6 +82,10 @@ class SoftwareUpdater: NSObject, ObservableObject, SPUUpdaterDelegate {
6082 includePrereleaseVersions = UserDefaults . standard. bool ( forKey: " includePrereleaseVersions " )
6183 }
6284
85+ deinit {
86+ feedURLTask? . cancel ( )
87+ }
88+
6389 func allowedChannels( for updater: SPUUpdater ) -> Set < String > {
6490 if includePrereleaseVersions {
6591 return [ " dev " ]
@@ -70,10 +96,20 @@ class SoftwareUpdater: NSObject, ObservableObject, SPUUpdaterDelegate {
7096 func checkForUpdates( ) {
7197 updater? . checkForUpdates ( )
7298 }
99+
100+ private struct GHAPIResult : Codable {
101+ enum CodingKeys : String , CodingKey {
102+ case tagName = " tag_name "
103+ }
104+
105+ var tagName : String
106+ }
73107}
74108
75109extension URL {
76- static let appcast = URL (
110+ static var appcast = URL (
77111 string: " https://github.com/CodeEditApp/CodeEdit/releases/download/latest/appcast.xml "
78112 ) !
79113}
114+
115+ // https://github.com/CodeEditApp/CodeEdit/releases/download/0.0.1-alpha.10/appcast.xml
0 commit comments