diff --git a/Sources/Packages/Sources/Brief/Documentation.docc/Documentation.md b/Sources/Packages/Sources/Brief/Documentation.docc/Documentation.md index fe1562c..af11448 100644 --- a/Sources/Packages/Sources/Brief/Documentation.docc/Documentation.md +++ b/Sources/Packages/Sources/Brief/Documentation.docc/Documentation.md @@ -11,5 +11,5 @@ Brief is a collection of protocols and concrete implmentation describing updates ### Updater -- ``UpdaterProtocol`` -- ``Updater`` +- ``UpdateCheckerProtocol`` +- ``UpdateChecker`` diff --git a/Sources/Packages/Sources/Brief/Updater.swift b/Sources/Packages/Sources/Brief/Updater.swift index c71e538..dd4ff2a 100644 --- a/Sources/Packages/Sources/Brief/Updater.swift +++ b/Sources/Packages/Sources/Brief/Updater.swift @@ -1,8 +1,8 @@ import Foundation import Combine -/// A concrete implementation of ``UpdaterProtocol`` which considers the current release and OS version. -public class Updater: ObservableObject, UpdaterProtocol { +/// A concrete implementation of ``UpdateCheckerProtocol`` which considers the current release and OS version. +public class UpdateChecker: ObservableObject, UpdateCheckerProtocol { @Published public var update: Release? public let testBuild: Bool @@ -53,7 +53,7 @@ public class Updater: ObservableObject, UpdaterProtocol { } -extension Updater { +extension UpdateChecker { /// Evaluates the available downloadable releases, and selects the newest non-prerelease release that the user is able to run. /// - Parameter releases: An array of ``Release`` objects. @@ -88,7 +88,7 @@ extension Updater { } -extension Updater { +extension UpdateChecker { enum Constants { static let updateURL = URL(string: "https://api.github.com/repos/maxgoedjen/secretive/releases")! diff --git a/Sources/Packages/Sources/Brief/UpdaterProtocol.swift b/Sources/Packages/Sources/Brief/UpdaterProtocol.swift index 1930a0f..1d37b84 100644 --- a/Sources/Packages/Sources/Brief/UpdaterProtocol.swift +++ b/Sources/Packages/Sources/Brief/UpdaterProtocol.swift @@ -1,7 +1,7 @@ import Foundation /// A protocol for retreiving the latest available version of an app. -public protocol UpdaterProtocol: ObservableObject { +public protocol UpdateCheckerProtocol: ObservableObject { /// The latest update var update: Release? { get } diff --git a/Sources/Packages/Tests/BriefTests/ReleaseParsingTests.swift b/Sources/Packages/Tests/BriefTests/ReleaseParsingTests.swift index 74af9ee..3a0f326 100644 --- a/Sources/Packages/Tests/BriefTests/ReleaseParsingTests.swift +++ b/Sources/Packages/Tests/BriefTests/ReleaseParsingTests.swift @@ -51,7 +51,7 @@ class ReleaseParsingTests: XCTestCase { func testGreatestSelectedIfOldPatchIsPublishedLater() { // If 2.x.x series has been published, and a patch for 1.x.x is issued // 2.x.x should still be selected if user can run it. - let updater = Updater(checkOnLaunch: false, osVersion: SemVer("2.2.3"), currentVersion: SemVer("1.0.0")) + let updater = UpdateChecker(checkOnLaunch: false, osVersion: SemVer("2.2.3"), currentVersion: SemVer("1.0.0")) let two = Release(name: "2.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "2.0 available! Minimum macOS Version: 2.2.3") let releases = [ Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Initial release Minimum macOS Version: 1.2.3"), @@ -72,7 +72,7 @@ class ReleaseParsingTests: XCTestCase { func testLatestVersionIsRunnable() { // If the 2.x.x series has been published but the user can't run it // the last version the user can run should be selected. - let updater = Updater(checkOnLaunch: false, osVersion: SemVer("1.2.3"), currentVersion: SemVer("1.0.0")) + let updater = UpdateChecker(checkOnLaunch: false, osVersion: SemVer("1.2.3"), currentVersion: SemVer("1.0.0")) let oneOhTwo = Release(name: "1.0.2", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Emergency patch! Minimum macOS Version: 1.2.3") let releases = [ Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Initial release Minimum macOS Version: 1.2.3"), diff --git a/Sources/SecretAgent/AppDelegate.swift b/Sources/SecretAgent/AppDelegate.swift index 2c221dd..54bac2f 100644 --- a/Sources/SecretAgent/AppDelegate.swift +++ b/Sources/SecretAgent/AppDelegate.swift @@ -16,7 +16,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { list.add(store: SmartCard.Store()) return list }() - private let updater = Updater(checkOnLaunch: false) + private let updater = UpdateChecker(checkOnLaunch: false) private let notifier = Notifier() private let publicKeyFileStoreController = PublicKeyFileStoreController(homeDirectory: NSHomeDirectory()) private lazy var agent: Agent = { diff --git a/Sources/Secretive.xcodeproj/project.pbxproj b/Sources/Secretive.xcodeproj/project.pbxproj index 79ad47b..a12bbee 100644 --- a/Sources/Secretive.xcodeproj/project.pbxproj +++ b/Sources/Secretive.xcodeproj/project.pbxproj @@ -18,6 +18,9 @@ 5003EF612780081600DF2006 /* SmartCardSecretKit in Frameworks */ = {isa = PBXBuildFile; productRef = 5003EF602780081600DF2006 /* SmartCardSecretKit */; }; 5003EF632780081B00DF2006 /* SecureEnclaveSecretKit in Frameworks */ = {isa = PBXBuildFile; productRef = 5003EF622780081B00DF2006 /* SecureEnclaveSecretKit */; }; 5003EF652780081B00DF2006 /* SmartCardSecretKit in Frameworks */ = {isa = PBXBuildFile; productRef = 5003EF642780081B00DF2006 /* SmartCardSecretKit */; }; + 500ED3D427B7934A00A6DC28 /* UpdaterProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5088065927B4A5E40090BD57 /* UpdaterProtocol.swift */; }; + 500ED3D527B796C800A6DC28 /* Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater.app in Resources */ = {isa = PBXBuildFile; fileRef = 5081F6D027B790DD0094B82D /* Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater.app */; }; + 500ED3DA27B797EE00A6DC28 /* Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater.app in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5081F6D027B790DD0094B82D /* Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 501421622781262300BBAA70 /* Brief in Frameworks */ = {isa = PBXBuildFile; productRef = 501421612781262300BBAA70 /* Brief */; }; 501421652781268000BBAA70 /* SecretAgent.app in CopyFiles */ = {isa = PBXBuildFile; fileRef = 50A3B78A24026B7500D209EA /* SecretAgent.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 50153E20250AFCB200525160 /* UpdateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50153E1F250AFCB200525160 /* UpdateView.swift */; }; @@ -37,10 +40,12 @@ 506772C72424784600034DED /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 506772C62424784600034DED /* Credits.rtf */; }; 506772C92425BB8500034DED /* NoStoresView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 506772C82425BB8500034DED /* NoStoresView.swift */; }; 5079BA0F250F29BF00EA86F4 /* StoreListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5079BA0E250F29BF00EA86F4 /* StoreListView.swift */; }; - 5088065327B4A5BE0090BD57 /* SecretiveUpdater.xpc in Embed XPC Services */ = {isa = PBXBuildFile; fileRef = 5088064827B4A5BE0090BD57 /* SecretiveUpdater.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 5088065A27B4A5E40090BD57 /* UpdaterProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5088065927B4A5E40090BD57 /* UpdaterProtocol.swift */; }; - 5088065C27B4A6240090BD57 /* Updater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5088065B27B4A6240090BD57 /* Updater.swift */; }; - 5088065E27B4A6460090BD57 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5088065D27B4A6460090BD57 /* main.swift */; }; + 5081F6D327B790DD0094B82D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5081F6D227B790DD0094B82D /* AppDelegate.swift */; }; + 5081F6D727B790DE0094B82D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5081F6D627B790DE0094B82D /* Assets.xcassets */; }; + 5081F6E027B791110094B82D /* UpdaterProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5088065927B4A5E40090BD57 /* UpdaterProtocol.swift */; }; + 5081F6E127B791110094B82D /* Updater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5088065B27B4A6240090BD57 /* Updater.swift */; }; + 5081F6E327B791620094B82D /* Brief in Frameworks */ = {isa = PBXBuildFile; productRef = 5081F6E227B791620094B82D /* Brief */; }; + 5081F70027B792150094B82D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5081F6FF27B792150094B82D /* Main.storyboard */; }; 5088068F27B4A6FF0090BD57 /* UpdaterCommunicationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5088068E27B4A6FF0090BD57 /* UpdaterCommunicationController.swift */; }; 508A58AA241E06B40069DC07 /* PreviewUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58A9241E06B40069DC07 /* PreviewUpdater.swift */; }; 508A58B3241ED2180069DC07 /* AgentStatusChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58B2241ED2180069DC07 /* AgentStatusChecker.swift */; }; @@ -49,7 +54,6 @@ 508BF2AA25B4F1CB009EFB7E /* InternetAccessPolicy.plist in Resources */ = {isa = PBXBuildFile; fileRef = 508BF29425B4F140009EFB7E /* InternetAccessPolicy.plist */; }; 5091D2BC25183B830049FD9B /* ApplicationDirectoryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5091D2BB25183B830049FD9B /* ApplicationDirectoryController.swift */; }; 5099A02423FD2AAA0062B6F2 /* CreateSecretView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5099A02323FD2AAA0062B6F2 /* CreateSecretView.swift */; }; - 50A00F5B27B4E99C0020C9CA /* Brief in Frameworks */ = {isa = PBXBuildFile; productRef = 50A00F5A27B4E99C0020C9CA /* Brief */; }; 50A3B79124026B7600D209EA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 50A3B79024026B7600D209EA /* Assets.xcassets */; }; 50A3B79424026B7600D209EA /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 50A3B79324026B7600D209EA /* Preview Assets.xcassets */; }; 50A3B79724026B7600D209EA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 50A3B79524026B7600D209EA /* Main.storyboard */; }; @@ -59,6 +63,20 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 500ED3D627B796C800A6DC28 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 50617D7723FCE48D0099B055 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5081F6CF27B790DD0094B82D; + remoteInfo = SecretiveUpdater; + }; + 500ED3D827B7978700A6DC28 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 50617D7723FCE48D0099B055 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5081F6CF27B790DD0094B82D; + remoteInfo = SecretiveUpdater; + }; 50142166278126B500BBAA70 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 50617D7723FCE48D0099B055 /* Project object */; @@ -73,13 +91,6 @@ remoteGlobalIDString = 50617D7E23FCE48D0099B055; remoteInfo = Secretive; }; - 5088065127B4A5BE0090BD57 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 50617D7723FCE48D0099B055 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5088064727B4A5BE0090BD57; - remoteInfo = SecretiveUpdater; - }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -93,17 +104,6 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; - 5088065427B4A5BE0090BD57 /* Embed XPC Services */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(CONTENTS_FOLDER_PATH)/XPCServices"; - dstSubfolderSpec = 16; - files = ( - 5088065327B4A5BE0090BD57 /* SecretiveUpdater.xpc in Embed XPC Services */, - ); - name = "Embed XPC Services"; - runOnlyForDeploymentPostprocessing = 0; - }; 50A5C18E240E4B4B00E2996C /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -120,6 +120,7 @@ dstPath = Contents/Library/LoginItems; dstSubfolderSpec = 1; files = ( + 500ED3DA27B797EE00A6DC28 /* Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater.app in CopyFiles */, 501421652781268000BBAA70 /* SecretAgent.app in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; @@ -153,7 +154,11 @@ 506772C62424784600034DED /* Credits.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = ""; }; 506772C82425BB8500034DED /* NoStoresView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoStoresView.swift; sourceTree = ""; }; 5079BA0E250F29BF00EA86F4 /* StoreListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreListView.swift; sourceTree = ""; }; - 5088064827B4A5BE0090BD57 /* SecretiveUpdater.xpc */ = {isa = PBXFileReference; explicitFileType = "wrapper.xpc-service"; includeInIndex = 0; path = SecretiveUpdater.xpc; sourceTree = BUILT_PRODUCTS_DIR; }; + 5081F6D027B790DD0094B82D /* Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 5081F6D227B790DD0094B82D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 5081F6D627B790DE0094B82D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 5081F6DB27B790DE0094B82D /* SecretiveUpdater.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SecretiveUpdater.entitlements; sourceTree = ""; }; + 5081F6FF27B792150094B82D /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; 5088065027B4A5BE0090BD57 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 5088065927B4A5E40090BD57 /* UpdaterProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdaterProtocol.swift; sourceTree = ""; }; 5088065B27B4A6240090BD57 /* Updater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Updater.swift; sourceTree = ""; }; @@ -198,11 +203,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5088064527B4A5BE0090BD57 /* Frameworks */ = { + 5081F6CD27B790DD0094B82D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 50A00F5B27B4E99C0020C9CA /* Brief in Frameworks */, + 5081F6E327B791620094B82D /* Brief in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -238,6 +243,7 @@ 50A3B78B24026B7500D209EA /* SecretAgent */, 508A58AF241E144C0069DC07 /* Config */, 5088064927B4A5BE0090BD57 /* SecretiveUpdater */, + 5081F6D127B790DD0094B82D /* SecretiveUpdater */, 50617D8023FCE48E0099B055 /* Products */, 5099A08B240243730062B6F2 /* Frameworks */, ); @@ -249,7 +255,7 @@ 50617D7F23FCE48E0099B055 /* Secretive.app */, 50617D9423FCE48E0099B055 /* SecretiveTests.xctest */, 50A3B78A24026B7500D209EA /* SecretAgent.app */, - 5088064827B4A5BE0090BD57 /* SecretiveUpdater.xpc */, + 5081F6D027B790DD0094B82D /* Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater.app */, ); name = Products; sourceTree = ""; @@ -291,12 +297,23 @@ path = SecretiveTests; sourceTree = ""; }; + 5081F6D127B790DD0094B82D /* SecretiveUpdater */ = { + isa = PBXGroup; + children = ( + 5081F6D227B790DD0094B82D /* AppDelegate.swift */, + 5088065927B4A5E40090BD57 /* UpdaterProtocol.swift */, + 5088065B27B4A6240090BD57 /* Updater.swift */, + 5081F6FF27B792150094B82D /* Main.storyboard */, + 5081F6D627B790DE0094B82D /* Assets.xcassets */, + 5081F6DB27B790DE0094B82D /* SecretiveUpdater.entitlements */, + ); + path = SecretiveUpdater; + sourceTree = ""; + }; 5088064927B4A5BE0090BD57 /* SecretiveUpdater */ = { isa = PBXGroup; children = ( 5088065027B4A5BE0090BD57 /* Info.plist */, - 5088065927B4A5E40090BD57 /* UpdaterProtocol.swift */, - 5088065B27B4A6240090BD57 /* Updater.swift */, 5088065D27B4A6460090BD57 /* main.swift */, ); path = SecretiveUpdater; @@ -337,8 +354,8 @@ 508A58B2241ED2180069DC07 /* AgentStatusChecker.swift */, 5091D2BB25183B830049FD9B /* ApplicationDirectoryController.swift */, 50571E0224393C2600F76F6C /* JustUpdatedChecker.swift */, - 50571E0424393D1500F76F6C /* LaunchAgentController.swift */, 5066A6F6251829B1004B5A36 /* ShellConfigurationController.swift */, + 50571E0424393D1500F76F6C /* LaunchAgentController.swift */, ); path = Controllers; sourceTree = ""; @@ -385,13 +402,13 @@ 50617D7D23FCE48D0099B055 /* Resources */, 50617DBF23FCE4AB0099B055 /* Embed Frameworks */, 50C385AF240E438B00AF2719 /* CopyFiles */, - 5088065427B4A5BE0090BD57 /* Embed XPC Services */, ); buildRules = ( ); dependencies = ( 50142167278126B500BBAA70 /* PBXTargetDependency */, - 5088065227B4A5BE0090BD57 /* PBXTargetDependency */, + 500ED3D727B796C800A6DC28 /* PBXTargetDependency */, + 500ED3D927B7978700A6DC28 /* PBXTargetDependency */, ); name = Secretive; packageProductDependencies = ( @@ -422,13 +439,13 @@ productReference = 50617D9423FCE48E0099B055 /* SecretiveTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - 5088064727B4A5BE0090BD57 /* SecretiveUpdater */ = { + 5081F6CF27B790DD0094B82D /* SecretiveUpdater */ = { isa = PBXNativeTarget; - buildConfigurationList = 5088065827B4A5BE0090BD57 /* Build configuration list for PBXNativeTarget "SecretiveUpdater" */; + buildConfigurationList = 5081F6DC27B790DE0094B82D /* Build configuration list for PBXNativeTarget "SecretiveUpdater" */; buildPhases = ( - 5088064427B4A5BE0090BD57 /* Sources */, - 5088064527B4A5BE0090BD57 /* Frameworks */, - 5088064627B4A5BE0090BD57 /* Resources */, + 5081F6CC27B790DD0094B82D /* Sources */, + 5081F6CD27B790DD0094B82D /* Frameworks */, + 5081F6CE27B790DD0094B82D /* Resources */, ); buildRules = ( ); @@ -436,11 +453,11 @@ ); name = SecretiveUpdater; packageProductDependencies = ( - 50A00F5A27B4E99C0020C9CA /* Brief */, + 5081F6E227B791620094B82D /* Brief */, ); productName = SecretiveUpdater; - productReference = 5088064827B4A5BE0090BD57 /* SecretiveUpdater.xpc */; - productType = "com.apple.product-type.xpc-service"; + productReference = 5081F6D027B790DD0094B82D /* Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater.app */; + productType = "com.apple.product-type.application"; }; 50A3B78924026B7500D209EA /* SecretAgent */ = { isa = PBXNativeTarget; @@ -473,7 +490,7 @@ 50617D7723FCE48D0099B055 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1220; + LastSwiftUpdateCheck = 1330; LastUpgradeCheck = 1320; ORGANIZATIONNAME = "Max Goedjen"; TargetAttributes = { @@ -484,9 +501,8 @@ CreatedOnToolsVersion = 11.3; TestTargetID = 50617D7E23FCE48D0099B055; }; - 5088064727B4A5BE0090BD57 = { + 5081F6CF27B790DD0094B82D = { CreatedOnToolsVersion = 13.3; - LastSwiftMigration = 1330; }; 50A3B78924026B7500D209EA = { CreatedOnToolsVersion = 11.4; @@ -509,7 +525,7 @@ 50617D7E23FCE48D0099B055 /* Secretive */, 50617D9323FCE48E0099B055 /* SecretiveTests */, 50A3B78924026B7500D209EA /* SecretAgent */, - 5088064727B4A5BE0090BD57 /* SecretiveUpdater */, + 5081F6CF27B790DD0094B82D /* SecretiveUpdater */, ); }; /* End PBXProject section */ @@ -522,6 +538,7 @@ 50617D8A23FCE48E0099B055 /* Preview Assets.xcassets in Resources */, 50617D8723FCE48E0099B055 /* Assets.xcassets in Resources */, 506772C72424784600034DED /* Credits.rtf in Resources */, + 500ED3D527B796C800A6DC28 /* Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater.app in Resources */, 508BF28E25B4F005009EFB7E /* InternetAccessPolicy.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -533,10 +550,12 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5088064627B4A5BE0090BD57 /* Resources */ = { + 5081F6CE27B790DD0094B82D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 5081F6D727B790DE0094B82D /* Assets.xcassets in Resources */, + 5081F70027B792150094B82D /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -565,6 +584,7 @@ 50571E0324393C2600F76F6C /* JustUpdatedChecker.swift in Sources */, 5079BA0F250F29BF00EA86F4 /* StoreListView.swift in Sources */, 50617DD223FCEFA90099B055 /* PreviewStore.swift in Sources */, + 500ED3D427B7934A00A6DC28 /* UpdaterProtocol.swift in Sources */, 5066A6F7251829B1004B5A36 /* ShellConfigurationController.swift in Sources */, 50033AC327813F1700253856 /* BundleIDs.swift in Sources */, 508A58B3241ED2180069DC07 /* AgentStatusChecker.swift in Sources */, @@ -592,13 +612,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5088064427B4A5BE0090BD57 /* Sources */ = { + 5081F6CC27B790DD0094B82D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5088065A27B4A5E40090BD57 /* UpdaterProtocol.swift in Sources */, - 5088065C27B4A6240090BD57 /* Updater.swift in Sources */, - 5088065E27B4A6460090BD57 /* main.swift in Sources */, + 5081F6D327B790DD0094B82D /* AppDelegate.swift in Sources */, + 5081F6E027B791110094B82D /* UpdaterProtocol.swift in Sources */, + 5081F6E127B791110094B82D /* Updater.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -614,6 +634,16 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 500ED3D727B796C800A6DC28 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5081F6CF27B790DD0094B82D /* SecretiveUpdater */; + targetProxy = 500ED3D627B796C800A6DC28 /* PBXContainerItemProxy */; + }; + 500ED3D927B7978700A6DC28 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5081F6CF27B790DD0094B82D /* SecretiveUpdater */; + targetProxy = 500ED3D827B7978700A6DC28 /* PBXContainerItemProxy */; + }; 50142167278126B500BBAA70 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 50A3B78924026B7500D209EA /* SecretAgent */; @@ -624,11 +654,6 @@ target = 50617D7E23FCE48D0099B055 /* Secretive */; targetProxy = 50617D9523FCE48E0099B055 /* PBXContainerItemProxy */; }; - 5088065227B4A5BE0090BD57 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5088064727B4A5BE0090BD57 /* SecretiveUpdater */; - targetProxy = 5088065127B4A5BE0090BD57 /* PBXContainerItemProxy */; - }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -862,12 +887,13 @@ }; name = Release; }; - 5088065527B4A5BE0090BD57 /* Debug */ = { + 5081F6DD27B790DE0094B82D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_ENTITLEMENTS = SecretiveUpdater/SecretiveUpdater.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; @@ -875,76 +901,77 @@ ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = SecretiveUpdater/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = SecretiveUpdater; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Max Goedjen. All rights reserved."; + INFOPLIST_KEY_NSMainStoryboardFile = Main; + INFOPLIST_KEY_NSPrincipalClass = NSApplication; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", - "@loader_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 12.3; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.SecretiveUpdater; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; + PRODUCT_BUNDLE_IDENTIFIER = Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater; + PRODUCT_NAME = Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater; SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; }; name = Debug; }; - 5088065627B4A5BE0090BD57 /* Test */ = { + 5081F6DE27B790DE0094B82D /* Test */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; - CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = SecretiveUpdater/SecretiveUpdater.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = Z72PRUAWF6; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = SecretiveUpdater/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = SecretiveUpdater; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Max Goedjen. All rights reserved."; + INFOPLIST_KEY_NSMainStoryboardFile = Main; + INFOPLIST_KEY_NSPrincipalClass = NSApplication; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", - "@loader_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 12.3; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.SecretiveUpdater; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; + PRODUCT_BUNDLE_IDENTIFIER = Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater; + PRODUCT_NAME = Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater; SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; }; name = Test; }; - 5088065727B4A5BE0090BD57 /* Release */ = { + 5081F6DF27B790DE0094B82D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = "Developer ID Application"; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_ENTITLEMENTS = SecretiveUpdater/SecretiveUpdater.entitlements; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = Z72PRUAWF6; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = SecretiveUpdater/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = SecretiveUpdater; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Max Goedjen. All rights reserved."; + INFOPLIST_KEY_NSMainStoryboardFile = Main; + INFOPLIST_KEY_NSPrincipalClass = NSApplication; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", - "@loader_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 12.3; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.SecretiveUpdater; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; + PRODUCT_BUNDLE_IDENTIFIER = Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater; + PRODUCT_NAME = Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; }; @@ -1020,6 +1047,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Secretive/Secretive.entitlements; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; @@ -1162,12 +1190,12 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5088065827B4A5BE0090BD57 /* Build configuration list for PBXNativeTarget "SecretiveUpdater" */ = { + 5081F6DC27B790DE0094B82D /* Build configuration list for PBXNativeTarget "SecretiveUpdater" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5088065527B4A5BE0090BD57 /* Debug */, - 5088065627B4A5BE0090BD57 /* Test */, - 5088065727B4A5BE0090BD57 /* Release */, + 5081F6DD27B790DE0094B82D /* Debug */, + 5081F6DE27B790DE0094B82D /* Test */, + 5081F6DF27B790DE0094B82D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1221,7 +1249,7 @@ isa = XCSwiftPackageProductDependency; productName = Brief; }; - 50A00F5A27B4E99C0020C9CA /* Brief */ = { + 5081F6E227B791620094B82D /* Brief */ = { isa = XCSwiftPackageProductDependency; productName = Brief; }; diff --git a/Sources/Secretive.xcodeproj/xcshareddata/xcschemes/SecretiveUpdater.xcscheme b/Sources/Secretive.xcodeproj/xcshareddata/xcschemes/SecretiveUpdater.xcscheme new file mode 100644 index 0000000..25476f1 --- /dev/null +++ b/Sources/Secretive.xcodeproj/xcshareddata/xcschemes/SecretiveUpdater.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sources/Secretive/App.swift b/Sources/Secretive/App.swift index fdf369d..24b7fb3 100644 --- a/Sources/Secretive/App.swift +++ b/Sources/Secretive/App.swift @@ -24,9 +24,9 @@ struct Secretive: App { @SceneBuilder var body: some Scene { WindowGroup { - ContentView(showingCreation: $showingCreation, runningSetup: $showingSetup, hasRunSetup: $hasRunSetup) + ContentView(showingCreation: $showingCreation, runningSetup: $showingSetup, hasRunSetup: $hasRunSetup) .environmentObject(storeList) - .environmentObject(Updater(checkOnLaunch: hasRunSetup)) + .environmentObject(UpdateChecker(checkOnLaunch: hasRunSetup)) .environmentObject(agentStatusChecker) .onAppear { updaterController.configure() diff --git a/Sources/Secretive/Controllers/UpdaterCommunicationController.swift b/Sources/Secretive/Controllers/UpdaterCommunicationController.swift index 2657e2b..883d4c4 100644 --- a/Sources/Secretive/Controllers/UpdaterCommunicationController.swift +++ b/Sources/Secretive/Controllers/UpdaterCommunicationController.swift @@ -3,7 +3,8 @@ import Combine import AppKit import OSLog import SecretKit -import SecretiveUpdater +//import SecretiveUpdater +import ServiceManagement class UpdaterCommunicationController: ObservableObject { @@ -16,7 +17,10 @@ class UpdaterCommunicationController: ObservableObject { func configure() { guard !running else { return } - connection = NSXPCConnection(serviceName: "com.maxgoedjen.SecretiveUpdater") + // TODO: Set disabled on launch. Only enable when I have an update to install. + let x = SMLoginItemSetEnabled("Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater" as CFString, false) + let y = SMLoginItemSetEnabled("Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater" as CFString, true) + connection = NSXPCConnection(machServiceName: "Z72PRUAWF6.com.maxgoedjen.SecretiveUpdater") connection?.remoteObjectInterface = NSXPCInterface(with: UpdaterProtocol.self) connection?.invalidationHandler = { Logger().warning("XPC connection invalidated") @@ -25,6 +29,9 @@ class UpdaterCommunicationController: ObservableObject { updater = connection?.remoteObjectProxyWithErrorHandler({ error in Logger().error("\(String(describing: error))") }) as? UpdaterProtocol + Task { + print(try await updater?.installUpdate(url: URL(string: "https://google.com")!)) + } running = true } diff --git a/Sources/Secretive/Preview Content/PreviewUpdater.swift b/Sources/Secretive/Preview Content/PreviewUpdater.swift index a993d87..8708cde 100644 --- a/Sources/Secretive/Preview Content/PreviewUpdater.swift +++ b/Sources/Secretive/Preview Content/PreviewUpdater.swift @@ -2,7 +2,7 @@ import Foundation import Combine import Brief -class PreviewUpdater: UpdaterProtocol { +class PreviewUpdater: UpdateCheckerProtocol { let update: Release? let testBuild = false diff --git a/Sources/Secretive/Secretive.entitlements b/Sources/Secretive/Secretive.entitlements index c1bb5e0..4778f7e 100644 --- a/Sources/Secretive/Secretive.entitlements +++ b/Sources/Secretive/Secretive.entitlements @@ -4,6 +4,10 @@ com.apple.security.app-sandbox + com.apple.security.application-groups + + $(TeamIdentifierPrefix)com.maxgoedjen.Secretive + com.apple.security.files.user-selected.read-write com.apple.security.network.client diff --git a/Sources/Secretive/Views/ContentView.swift b/Sources/Secretive/Views/ContentView.swift index c14e48e..5a65076 100644 --- a/Sources/Secretive/Views/ContentView.swift +++ b/Sources/Secretive/Views/ContentView.swift @@ -4,7 +4,7 @@ import SecureEnclaveSecretKit import SmartCardSecretKit import Brief -struct ContentView: View { +struct ContentView: View { @Binding var showingCreation: Bool @Binding var runningSetup: Bool diff --git a/Sources/Secretive/Views/UpdateView.swift b/Sources/Secretive/Views/UpdateView.swift index afe620e..55e2a16 100644 --- a/Sources/Secretive/Views/UpdateView.swift +++ b/Sources/Secretive/Views/UpdateView.swift @@ -1,7 +1,7 @@ import SwiftUI import Brief -struct UpdateDetailView: View { +struct UpdateDetailView: View { @EnvironmentObject var updater: UpdaterType diff --git a/Sources/SecretiveUpdater/AppDelegate.swift b/Sources/SecretiveUpdater/AppDelegate.swift new file mode 100644 index 0000000..ed2b424 --- /dev/null +++ b/Sources/SecretiveUpdater/AppDelegate.swift @@ -0,0 +1,43 @@ +import Cocoa + +@main +class AppDelegate: NSObject, NSApplicationDelegate { + + let delegate = ServiceDelegate(exportedObject: Updater()) + let listener = NSXPCListener(machServiceName: Bundle.main.bundleIdentifier!) + + func applicationDidFinishLaunching(_ aNotification: Notification) { + listener.delegate = delegate + listener.resume() + Task { + try! await delegate.exported.authorize() + } + } + + func applicationWillTerminate(_ aNotification: Notification) { + } + + func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return false + } + + +} + +class ServiceDelegate: NSObject, NSXPCListenerDelegate { + + let exported: UpdaterProtocol + + init(exportedObject: UpdaterProtocol) { + self.exported = exportedObject + } + + func listener(_ listener: NSXPCListener, shouldAcceptNewConnection newConnection: NSXPCConnection) -> Bool { + newConnection.exportedInterface = NSXPCInterface(with: UpdaterProtocol.self) + newConnection.exportedObject = exported + newConnection.resume() + return true + } + +} + diff --git a/Sources/SecretiveUpdater/Assets.xcassets/AccentColor.colorset/Contents.json b/Sources/SecretiveUpdater/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/Sources/SecretiveUpdater/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Sources/SecretiveUpdater/Assets.xcassets/AppIcon.appiconset/Contents.json b/Sources/SecretiveUpdater/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..c14ca73 --- /dev/null +++ b/Sources/SecretiveUpdater/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,60 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "filename" : "Mac Icon.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "filename" : "Mac Icon@0.25x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Sources/SecretiveUpdater/Assets.xcassets/AppIcon.appiconset/Mac Icon.png b/Sources/SecretiveUpdater/Assets.xcassets/AppIcon.appiconset/Mac Icon.png new file mode 100644 index 0000000..99a172b Binary files /dev/null and b/Sources/SecretiveUpdater/Assets.xcassets/AppIcon.appiconset/Mac Icon.png differ diff --git a/Sources/SecretiveUpdater/Assets.xcassets/AppIcon.appiconset/Mac Icon@0.25x.png b/Sources/SecretiveUpdater/Assets.xcassets/AppIcon.appiconset/Mac Icon@0.25x.png new file mode 100644 index 0000000..8b7b7ae Binary files /dev/null and b/Sources/SecretiveUpdater/Assets.xcassets/AppIcon.appiconset/Mac Icon@0.25x.png differ diff --git a/Sources/SecretiveUpdater/Assets.xcassets/Contents.json b/Sources/SecretiveUpdater/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Sources/SecretiveUpdater/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Sources/SecretiveUpdater/Info.plist b/Sources/SecretiveUpdater/Info.plist index c123a5d..dada86e 100644 --- a/Sources/SecretiveUpdater/Info.plist +++ b/Sources/SecretiveUpdater/Info.plist @@ -2,10 +2,7 @@ - XPCService - - ServiceType - Application - + LSUIElement + diff --git a/Sources/SecretiveUpdater/Main.storyboard b/Sources/SecretiveUpdater/Main.storyboard new file mode 100644 index 0000000..a8531a8 --- /dev/null +++ b/Sources/SecretiveUpdater/Main.storyboard @@ -0,0 +1,683 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sources/SecretiveUpdater/SecretiveUpdater.entitlements b/Sources/SecretiveUpdater/SecretiveUpdater.entitlements new file mode 100644 index 0000000..b87fc3a --- /dev/null +++ b/Sources/SecretiveUpdater/SecretiveUpdater.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + $(TeamIdentifierPrefix)com.maxgoedjen.Secretive + + + diff --git a/Sources/SecretiveUpdater/Updater.swift b/Sources/SecretiveUpdater/Updater.swift index 5002eea..d4cc72d 100644 --- a/Sources/SecretiveUpdater/Updater.swift +++ b/Sources/SecretiveUpdater/Updater.swift @@ -9,7 +9,7 @@ import Security.AuthorizationTags class Updater: UpdaterProtocol { func installUpdate(url: URL) async throws -> String { - try await authorize() +// try await authorize() // let (downloadedURL, _) = try await URLSession.shared.download(from: url) // let unzipped = try await decompress(url: downloadedURL) // let config = NSWorkspace.OpenConfiguration() diff --git a/Sources/SecretiveUpdater/UpdaterProtocol.swift b/Sources/SecretiveUpdater/UpdaterProtocol.swift index a432677..0961b4c 100644 --- a/Sources/SecretiveUpdater/UpdaterProtocol.swift +++ b/Sources/SecretiveUpdater/UpdaterProtocol.swift @@ -4,5 +4,6 @@ import Brief @objc public protocol UpdaterProtocol { func installUpdate(url: URL) async throws -> String + func authorize() async throws }