diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj
index cc71e827..8e5cd8ce 100644
--- a/Xcodes.xcodeproj/project.pbxproj
+++ b/Xcodes.xcodeproj/project.pbxproj
@@ -121,6 +121,7 @@
E86671272B309D2F0048559A /* PlatformsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E86671262B309D2F0048559A /* PlatformsView.swift */; };
E87AB3C52939B65E00D72F43 /* Hardware.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87AB3C42939B65E00D72F43 /* Hardware.swift */; };
E87DD6EB25D053FA00D86808 /* Progress+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87DD6EA25D053FA00D86808 /* Progress+.swift */; };
+ E891A1C42B43ACF900A1B9D1 /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = E891A1C32B43ACF900A1B9D1 /* Sparkle */; };
E89342FA25EDCC17007CF557 /* NotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E89342F925EDCC17007CF557 /* NotificationManager.swift */; };
E8977EA325C11E1500835F80 /* PreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8977EA225C11E1500835F80 /* PreferencesView.swift */; };
E8B20CBF2A2EDEC20057D816 /* SDKs+Xcode.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8B20CBE2A2EDEC20057D816 /* SDKs+Xcode.swift */; };
@@ -134,7 +135,6 @@
E8E98A9025D8631800EC89A0 /* InstallationStepRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFBC3FF259AC17F00E2A3D8 /* InstallationStepRowView.swift */; };
E8E98A9625D863D700EC89A0 /* InstallationStepDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */; };
E8F44A1E296B4CD7002D6592 /* Path in Frameworks */ = {isa = PBXBuildFile; productRef = E8F44A1D296B4CD7002D6592 /* Path */; };
- E8F81FC4282D8A17006CBD0F /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = E8F81FC3282D8A17006CBD0F /* Sparkle */; };
E8FD5727291EE4AC001E004C /* AsyncNetworkService in Frameworks */ = {isa = PBXBuildFile; productRef = E8FD5726291EE4AC001E004C /* AsyncNetworkService */; };
/* End PBXBuildFile section */
@@ -344,12 +344,12 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- E8F81FC4282D8A17006CBD0F /* Sparkle in Frameworks */,
CABFA9E42592F08E00380FEE /* Version in Frameworks */,
CABFA9FD2592F13300380FEE /* LegibleError in Frameworks */,
E689540325BE8C64000EBCEA /* DockProgress in Frameworks */,
CA9FF86D25951C6E00E47BAF /* XCModel in Frameworks */,
CABFA9F82592F0F900380FEE /* KeychainAccess in Frameworks */,
+ E891A1C42B43ACF900A1B9D1 /* Sparkle in Frameworks */,
CAA858CD25A3D8BC00ACF8C0 /* ErrorHandling in Frameworks */,
E8C0EB1A291EF43E0081528A /* XcodesKit in Frameworks */,
E8FD5727291EE4AC001E004C /* AsyncNetworkService in Frameworks */,
@@ -705,12 +705,12 @@
CABFA9FC2592F13300380FEE /* LegibleError */,
CA9FF86C25951C6E00E47BAF /* XCModel */,
CAA858CC25A3D8BC00ACF8C0 /* ErrorHandling */,
- E8F81FC3282D8A17006CBD0F /* Sparkle */,
E689540225BE8C64000EBCEA /* DockProgress */,
E8FD5726291EE4AC001E004C /* AsyncNetworkService */,
E8C0EB19291EF43E0081528A /* XcodesKit */,
E8F44A1D296B4CD7002D6592 /* Path */,
E84E4F562B335094003F3959 /* OrderedCollections */,
+ E891A1C32B43ACF900A1B9D1 /* Sparkle */,
);
productName = XcodesMac;
productReference = CAD2E79E2449574E00113D76 /* Xcodes.app */;
@@ -793,11 +793,11 @@
CA9FF86B25951C6E00E47BAF /* XCRemoteSwiftPackageReference "data" */,
CAA858CB25A3D8BC00ACF8C0 /* XCRemoteSwiftPackageReference "ErrorHandling" */,
CAC28186259EE27200B8AB0B /* XCRemoteSwiftPackageReference "CombineExpectations" */,
- E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */,
E689540125BE8C64000EBCEA /* XCRemoteSwiftPackageReference "DockProgress" */,
E8FD5725291EE4AC001E004C /* XCRemoteSwiftPackageReference "AsyncHTTPNetworkService" */,
E8F44A1C296B4CD7002D6592 /* XCRemoteSwiftPackageReference "Path" */,
E84E4F552B335094003F3959 /* XCRemoteSwiftPackageReference "swift-collections" */,
+ E891A1C22B43ACA400A1B9D1 /* XCRemoteSwiftPackageReference "Sparkle" */,
);
productRefGroup = CAD2E79F2449574E00113D76 /* Products */;
projectDirPath = "";
@@ -1523,20 +1523,20 @@
minimumVersion = 1.0.5;
};
};
- E8F44A1C296B4CD7002D6592 /* XCRemoteSwiftPackageReference "Path" */ = {
+ E891A1C22B43ACA400A1B9D1 /* XCRemoteSwiftPackageReference "Sparkle" */ = {
isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/mxcl/Path.swift";
+ repositoryURL = "https://github.com/sparkle-project/Sparkle";
requirement = {
kind = upToNextMajorVersion;
- minimumVersion = 1.0.0;
+ minimumVersion = 2.5.2;
};
};
- E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */ = {
+ E8F44A1C296B4CD7002D6592 /* XCRemoteSwiftPackageReference "Path" */ = {
isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/sparkle-project/Sparkle";
+ repositoryURL = "https://github.com/mxcl/Path.swift";
requirement = {
kind = upToNextMajorVersion;
- minimumVersion = 2.0.0;
+ minimumVersion = 1.0.0;
};
};
E8FD5725291EE4AC001E004C /* XCRemoteSwiftPackageReference "AsyncHTTPNetworkService" */ = {
@@ -1599,6 +1599,11 @@
package = E84E4F552B335094003F3959 /* XCRemoteSwiftPackageReference "swift-collections" */;
productName = OrderedCollections;
};
+ E891A1C32B43ACF900A1B9D1 /* Sparkle */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = E891A1C22B43ACA400A1B9D1 /* XCRemoteSwiftPackageReference "Sparkle" */;
+ productName = Sparkle;
+ };
E8C0EB19291EF43E0081528A /* XcodesKit */ = {
isa = XCSwiftPackageProductDependency;
productName = XcodesKit;
@@ -1608,11 +1613,6 @@
package = E8F44A1C296B4CD7002D6592 /* XCRemoteSwiftPackageReference "Path" */;
productName = Path;
};
- E8F81FC3282D8A17006CBD0F /* Sparkle */ = {
- isa = XCSwiftPackageProductDependency;
- package = E8F81FC2282D8A17006CBD0F /* XCRemoteSwiftPackageReference "Sparkle" */;
- productName = Sparkle;
- };
E8FD5726291EE4AC001E004C /* AsyncNetworkService */ = {
isa = XCSwiftPackageProductDependency;
package = E8FD5725291EE4AC001E004C /* XCRemoteSwiftPackageReference "AsyncHTTPNetworkService" */;
diff --git a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
index 743059b0..220940ed 100644
--- a/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
+++ b/Xcodes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
@@ -78,8 +78,8 @@
"repositoryURL": "https://github.com/sparkle-project/Sparkle/",
"state": {
"branch": null,
- "revision": "286edd1fa22505a9e54d170e9fd07d775ea233f2",
- "version": "2.1.0"
+ "revision": "47d3d90aee3c52b6f61d04ceae426e607df62347",
+ "version": "2.5.2"
}
},
{
diff --git a/Xcodes/Frontend/Preferences/UpdatesPreferencePane.swift b/Xcodes/Frontend/Preferences/UpdatesPreferencePane.swift
index 349d9bec..624a3066 100644
--- a/Xcodes/Frontend/Preferences/UpdatesPreferencePane.swift
+++ b/Xcodes/Frontend/Preferences/UpdatesPreferencePane.swift
@@ -69,7 +69,8 @@ struct UpdatesPreferencePane: View {
class ObservableUpdater: ObservableObject {
private let updater: SPUUpdater
-
+ private let updaterDelegate = UpdaterDelegate()
+
@Published var automaticallyChecksForUpdates = false {
didSet {
updater.automaticallyChecksForUpdates = automaticallyChecksForUpdates
@@ -81,17 +82,17 @@ class ObservableUpdater: ObservableObject {
@Published var includePrereleaseVersions = false {
didSet {
UserDefaults.standard.setValue(includePrereleaseVersions, forKey: "includePrereleaseVersions")
-
- if includePrereleaseVersions {
- updater.setFeedURL(.prereleaseAppcast)
- } else {
- updater.setFeedURL(.appcast)
- }
+
+ updaterDelegate.includePrereleaseVersions = includePrereleaseVersions
}
}
init() {
- updater = SPUStandardUpdaterController(startingUpdater: true, updaterDelegate: nil, userDriverDelegate: nil).updater
+ updater = SPUStandardUpdaterController(startingUpdater: true, updaterDelegate: updaterDelegate, userDriverDelegate: nil).updater
+
+ // upgrade from an old sparkle version which set feeds via the updater
+ // now it uses the `updaterDelegate`
+ updater.clearFeedURLFromUserDefaults()
automaticallyChecksForUpdatesObservation = updater.observe(
\.automaticallyChecksForUpdates,
@@ -116,9 +117,22 @@ class ObservableUpdater: ObservableObject {
}
}
-extension URL {
- static let appcast = URL(string: "https://www.xcodes.app/appcast.xml")!
- static let prereleaseAppcast = URL(string: "https://www.xcodes.app/appcast_pre.xml")!
+class UpdaterDelegate: NSObject, SPUUpdaterDelegate {
+ var includePrereleaseVersions: Bool = false
+
+ func feedURLString(for updater: SPUUpdater) -> String? {
+ if includePrereleaseVersions {
+ return .prereleaseAppcast
+ } else {
+ return .appcast
+ }
+ }
+}
+
+
+extension String {
+ static let appcast = "https://www.xcodes.app/appcast.xml"
+ static let prereleaseAppcast = "https://www.xcodes.app/appcast_pre.xml"
}
struct UpdatesPreferencePane_Previews: PreviewProvider {
diff --git a/Xcodes/Resources/Licenses.rtf b/Xcodes/Resources/Licenses.rtf
index aa97f20f..266cedac 100644
--- a/Xcodes/Resources/Licenses.rtf
+++ b/Xcodes/Resources/Licenses.rtf
@@ -656,13 +656,86 @@ EXTERNAL LICENSES\
=================\
\
bspatch.c and bsdiff.c, from bsdiff 4.3 :\
- Copyright (c) 2003-2005 Colin Percival.\
+\
+Copyright 2003-2005 Colin Percival\
+All rights reserved\
+\
+Redistribution and use in source and binary forms, with or without\
+modification, are permitted providing that the following conditions \
+are met:\
+1. Redistributions of source code must retain the above copyright\
+ notice, this list of conditions and the following disclaimer.\
+2. Redistributions in binary form must reproduce the above copyright\
+ notice, this list of conditions and the following disclaimer in the\
+ documentation and/or other materials provided with the distribution.\
+\
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\
+POSSIBILITY OF SUCH DAMAGE.\
+\
+--\
\
sais.c and sais.c, from sais-lite (2010/08/07) :\
- Copyright (c) 2008-2010 Yuta Mori.\
+\
+The sais-lite copyright is as follows:\
+\
+Copyright (c) 2008-2010 Yuta Mori All Rights Reserved.\
+\
+Permission is hereby granted, free of charge, to any person\
+obtaining a copy of this software and associated documentation\
+files (the "Software"), to deal in the Software without\
+restriction, including without limitation the rights to use,\
+copy, modify, merge, publish, distribute, sublicense, and/or sell\
+copies of the Software, and to permit persons to whom the\
+Software is furnished to do so, subject to the following\
+conditions:\
+\
+The above copyright notice and this permission notice shall be\
+included in all copies or substantial portions of the Software.\
+\
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\
+OTHER DEALINGS IN THE SOFTWARE.\
+\
+--\
+\
+Portable C implementation of Ed25519, from https://github.com/orlp/ed25519\
+\
+Copyright (c) 2015 Orson Peters \
+\
+This software is provided 'as-is', without any express or implied warranty. In no event will the\
+authors be held liable for any damages arising from the use of this software.\
+\
+Permission is granted to anyone to use this software for any purpose, including commercial\
+applications, and to alter it and redistribute it freely, subject to the following restrictions:\
+\
+1. The origin of this software must not be misrepresented; you must not claim that you wrote the\
+ original software. If you use this software in a product, an acknowledgment in the product\
+ documentation would be appreciated but is not required.\
+\
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as\
+ being the original software.\
+\
+3. This notice may not be removed or altered from any source distribution.\
+\
+--\
\
SUSignatureVerifier.m:\
- Copyright (c) 2011 Mark Hamlin.\
+\
+Copyright (c) 2011 Mark Hamlin.\
\
All rights reserved.\
\